From c3eca75f194c8fd0abe33c8b5f08b7d78e00c43b Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 27 Jan 2025 14:09:51 +0900 Subject: [PATCH 01/40] =?UTF-8?q?autmanual=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- automanual/AUTODELETE$1.class | Bin 0 -> 1212 bytes automanual/AUTODELETE$2.class | Bin 0 -> 1212 bytes automanual/AUTODELETE$3.class | Bin 0 -> 1212 bytes automanual/AUTODELETE$4.class | Bin 0 -> 3085 bytes automanual/AUTODELETE$5.class | Bin 0 -> 3257 bytes automanual/AUTODELETE$6.class | Bin 0 -> 1430 bytes automanual/AUTODELETE$7.class | Bin 0 -> 1498 bytes automanual/AUTODELETE.cbl | 94 +++ automanual/AUTODELETE.class | Bin 0 -> 8503 bytes automanual/AUTODELETE.java | 544 +++++++++++++ automanual/AUTODELETE_2.cbl | 95 +++ automanual/AUTOMANUAL.cbl | 177 ++++ automanual/AUTOMANUAL_original.cbl | 129 +++ automanual/cob4j_convert.bat | 151 ++++ automanual/cob4j_convert2.bat | 151 ++++ automanual/new/1-1.md | 22 + automanual/new/1-10.md | 27 + automanual/new/1-2-1.md | 19 + automanual/new/1-2-2.md | 13 + automanual/new/1-2-3.md | 11 + automanual/new/1-2-4.md | 22 + automanual/new/1-2-5.md | 15 + automanual/new/1-2-6.md | 14 + automanual/new/1-2-7.md | 31 + automanual/new/1-2-8.md | 25 + automanual/new/1-3.md | 23 + automanual/new/1-4.md | 33 + automanual/new/1-5.md | 19 + automanual/new/1-6.md | 37 + automanual/new/1-7-1.md | 19 + automanual/new/1-7-2.md | 41 + automanual/new/1-7-3.md | 13 + automanual/new/1-8.md | 24 + automanual/new/1-9.md | 15 + automanual/new/2-1.md | 46 ++ automanual/new/2-2.md | 19 + automanual/new/3.md | 28 + automanual/new/4-1-1.md | 41 + automanual/new/4-1-2.md | 23 + automanual/new/4-1-3.md | 19 + automanual/new/4-1-4.md | 114 +++ automanual/new/4-2-1-1.md | 112 +++ automanual/new/4-2-1-2.md | 29 + automanual/new/4-2-1-3.md | 31 + automanual/new/4-2-2.md | 22 + automanual/new/5-1.md | 57 ++ automanual/new/5-2.md | 26 + automanual/new/5-3.md | 302 +++++++ automanual/new/5-4.md | 25 + automanual/new/5-5.md | 19 + automanual/new/5-6.md | 105 +++ automanual/new/6-1-1.md | 38 + automanual/new/6-1-2.md | 54 ++ automanual/new/6-1-3.md | 30 + automanual/new/6-1-4-1.md | 57 ++ automanual/new/6-1-4-2.md | 148 ++++ automanual/new/6-1-5.md | 52 ++ automanual/new/6-1-6.md | 46 ++ automanual/new/6-1-7.md | 24 + automanual/new/6-1-8-1.md | 34 + automanual/new/6-1-8-2.md | 25 + automanual/new/6-10.md | 17 + automanual/new/6-11.md | 19 + automanual/new/6-12.md | 33 + automanual/new/6-13-1.md | 31 + automanual/new/6-13-2.md | 21 + automanual/new/6-14-1.md | 23 + automanual/new/6-14-2.md | 17 + automanual/new/6-14-3.md | 29 + automanual/new/6-14-4.md | 23 + automanual/new/6-14-5.md | 15 + automanual/new/6-15-1.md | 25 + automanual/new/6-15-2.md | 25 + automanual/new/6-15-3.md | 25 + automanual/new/6-15-4.md | 25 + automanual/new/6-15-5.md | 25 + automanual/new/6-16.md | 21 + automanual/new/6-17.md | 59 ++ automanual/new/6-18.md | 42 + automanual/new/6-19.md | 23 + automanual/new/6-2.md | 31 + automanual/new/6-20.md | 15 + automanual/new/6-21.md | 19 + automanual/new/6-22-1.md | 19 + automanual/new/6-22-2.md | 29 + automanual/new/6-23.md | 21 + automanual/new/6-24.md | 43 + automanual/new/6-25.md | 15 + automanual/new/6-26.md | 88 ++ automanual/new/6-27.md | 56 ++ automanual/new/6-28-1.md | 21 + automanual/new/6-28-2.md | 91 +++ automanual/new/6-29-1.md | 25 + automanual/new/6-29-2.md | 25 + automanual/new/6-3.md | 25 + automanual/new/6-30.md | 23 + automanual/new/6-31.md | 38 + automanual/new/6-32-1.md | 71 ++ automanual/new/6-32-2.md | 19 + automanual/new/6-33-1.md | 43 + automanual/new/6-33-2.md | 51 ++ automanual/new/6-34.md | 19 + automanual/new/6-35.md | 21 + automanual/new/6-36.md | 41 + automanual/new/6-37.md | 17 + automanual/new/6-38-1.md | 33 + automanual/new/6-38-2.md | 68 ++ automanual/new/6-39-1.md | 29 + automanual/new/6-39-2.md | 23 + automanual/new/6-39-3.md | 19 + automanual/new/6-39-4.md | 17 + automanual/new/6-39-5.md | 18 + automanual/new/6-39-6.md | 21 + automanual/new/6-39-7.md | 17 + automanual/new/6-4-1.md | 21 + automanual/new/6-4-2.md | 32 + automanual/new/6-4-3.md | 24 + automanual/new/6-4-4.md | 27 + automanual/new/6-4-5.md | 21 + automanual/new/6-4-6.md | 17 + automanual/new/6-4-7.md | 15 + automanual/new/6-40-1.md | 89 +++ automanual/new/6-40-2.md | 29 + automanual/new/6-41.md | 41 + automanual/new/6-42.md | 26 + automanual/new/6-43.md | 37 + automanual/new/6-44-1.md | 23 + automanual/new/6-44-2.md | 23 + automanual/new/6-44-3.md | 19 + automanual/new/6-45.md | 15 + automanual/new/6-46.md | 15 + automanual/new/6-47.md | 31 + automanual/new/6-48.md | 22 + automanual/new/6-49.md | 68 ++ automanual/new/6-5-1.md | 33 + automanual/new/6-5-2.md | 25 + automanual/new/6-5-3.md | 19 + automanual/new/6-50.md | 88 ++ automanual/new/6-6.md | 49 ++ automanual/new/6-7.md | 54 ++ automanual/new/6-8-1.md | 19 + automanual/new/6-8-2.md | 15 + automanual/new/6-9.md | 29 + automanual/new/7-1.md | 27 + automanual/new/7-2.md | 20 + automanual/new/7-3-1.md | 56 ++ automanual/new/7-3-2.md | 13 + automanual/new/7-4.md | 19 + automanual/new/8-1-1.md | 19 + automanual/new/8-1-2.md | 95 +++ automanual/new/8-1-3.md | 17 + automanual/new/8-1-4.md | 42 + automanual/new/8-1-5.md | 23 + automanual/new/8-1-6.md | 139 ++++ automanual/new/8-1-7.md | 36 + automanual/new/8-1-8.md | 31 + automanual/new/8-1-9.md | 123 +++ automanual/new/8-2-1.md | 31 + automanual/new/8-2-2.md | 29 + automanual/new/8-2-3.md | 14 + automanual/new/8-2-4.md | 31 + automanual/new/8-3-1.md | 756 ++++++++++++++++++ automanual/new/9-1.md | 58 ++ automanual/new/9-2.md | 205 +++++ automanual/new/TOC.md | 238 ++++++ automanual/new/credit.md | 36 + automanual/new_delete/1-1.md | 15 + automanual/new_delete/1-10.md | 20 + automanual/new_delete/1-2-1.md | 12 + automanual/new_delete/1-2-2.md | 6 + automanual/new_delete/1-2-3.md | 4 + automanual/new_delete/1-2-4.md | 15 + automanual/new_delete/1-2-5.md | 8 + automanual/new_delete/1-2-6.md | 8 + automanual/new_delete/1-2-7.md | 25 + automanual/new_delete/1-2-8.md | 18 + automanual/new_delete/1-3.md | 16 + automanual/new_delete/1-4.md | 26 + automanual/new_delete/1-5.md | 12 + automanual/new_delete/1-6.md | 30 + automanual/new_delete/1-7-1.md | 12 + automanual/new_delete/1-7-2.md | 34 + automanual/new_delete/1-7-3.md | 6 + automanual/new_delete/1-8.md | 17 + automanual/new_delete/1-9.md | 8 + automanual/new_delete/2-1.md | 39 + automanual/new_delete/2-2.md | 12 + automanual/new_delete/3.md | 21 + automanual/new_delete/4-1-1.md | 34 + automanual/new_delete/4-1-2.md | 16 + automanual/new_delete/4-1-3.md | 12 + automanual/new_delete/4-1-4.md | 107 +++ automanual/new_delete/4-2-1-1.md | 105 +++ automanual/new_delete/4-2-1-2.md | 22 + automanual/new_delete/4-2-1-3.md | 24 + automanual/new_delete/4-2-2.md | 15 + automanual/new_delete/5-1.md | 50 ++ automanual/new_delete/5-2.md | 19 + automanual/new_delete/5-3.md | 295 +++++++ automanual/new_delete/5-4.md | 18 + automanual/new_delete/5-5.md | 12 + automanual/new_delete/5-6.md | 98 +++ automanual/new_delete/6-1-1.md | 31 + automanual/new_delete/6-1-2.md | 47 ++ automanual/new_delete/6-1-3.md | 23 + automanual/new_delete/6-1-4-1.md | 50 ++ automanual/new_delete/6-1-4-2.md | 141 ++++ automanual/new_delete/6-1-5.md | 45 ++ automanual/new_delete/6-1-6.md | 39 + automanual/new_delete/6-1-7.md | 17 + automanual/new_delete/6-1-8-1.md | 27 + automanual/new_delete/6-1-8-2.md | 18 + automanual/new_delete/6-10.md | 10 + automanual/new_delete/6-11.md | 12 + automanual/new_delete/6-12.md | 26 + automanual/new_delete/6-13-1.md | 24 + automanual/new_delete/6-13-2.md | 14 + automanual/new_delete/6-14-1.md | 16 + automanual/new_delete/6-14-2.md | 10 + automanual/new_delete/6-14-3.md | 22 + automanual/new_delete/6-14-4.md | 16 + automanual/new_delete/6-14-5.md | 8 + automanual/new_delete/6-15-1.md | 18 + automanual/new_delete/6-15-2.md | 18 + automanual/new_delete/6-15-3.md | 18 + automanual/new_delete/6-15-4.md | 18 + automanual/new_delete/6-15-5.md | 18 + automanual/new_delete/6-16.md | 14 + automanual/new_delete/6-17.md | 52 ++ automanual/new_delete/6-18.md | 35 + automanual/new_delete/6-19.md | 16 + automanual/new_delete/6-2.md | 24 + automanual/new_delete/6-20.md | 8 + automanual/new_delete/6-21.md | 12 + automanual/new_delete/6-22-1.md | 12 + automanual/new_delete/6-22-2.md | 22 + automanual/new_delete/6-23.md | 14 + automanual/new_delete/6-24.md | 36 + automanual/new_delete/6-25.md | 8 + automanual/new_delete/6-26.md | 81 ++ automanual/new_delete/6-27.md | 49 ++ automanual/new_delete/6-28-1.md | 14 + automanual/new_delete/6-28-2.md | 84 ++ automanual/new_delete/6-29-1.md | 18 + automanual/new_delete/6-29-2.md | 18 + automanual/new_delete/6-3.md | 18 + automanual/new_delete/6-30.md | 16 + automanual/new_delete/6-31.md | 31 + automanual/new_delete/6-32-1.md | 64 ++ automanual/new_delete/6-32-2.md | 12 + automanual/new_delete/6-33-1.md | 36 + automanual/new_delete/6-33-2.md | 44 + automanual/new_delete/6-34.md | 12 + automanual/new_delete/6-35.md | 14 + automanual/new_delete/6-36.md | 34 + automanual/new_delete/6-37.md | 10 + automanual/new_delete/6-38-1.md | 26 + automanual/new_delete/6-38-2.md | 61 ++ automanual/new_delete/6-39-1.md | 22 + automanual/new_delete/6-39-2.md | 16 + automanual/new_delete/6-39-3.md | 12 + automanual/new_delete/6-39-4.md | 10 + automanual/new_delete/6-39-5.md | 11 + automanual/new_delete/6-39-6.md | 14 + automanual/new_delete/6-39-7.md | 10 + automanual/new_delete/6-4-1.md | 14 + automanual/new_delete/6-4-2.md | 25 + automanual/new_delete/6-4-3.md | 17 + automanual/new_delete/6-4-4.md | 20 + automanual/new_delete/6-4-5.md | 14 + automanual/new_delete/6-4-6.md | 10 + automanual/new_delete/6-4-7.md | 8 + automanual/new_delete/6-40-1.md | 82 ++ automanual/new_delete/6-40-2.md | 22 + automanual/new_delete/6-41.md | 34 + automanual/new_delete/6-42.md | 19 + automanual/new_delete/6-43.md | 30 + automanual/new_delete/6-44-1.md | 16 + automanual/new_delete/6-44-2.md | 16 + automanual/new_delete/6-44-3.md | 12 + automanual/new_delete/6-45.md | 8 + automanual/new_delete/6-46.md | 8 + automanual/new_delete/6-47.md | 24 + automanual/new_delete/6-48.md | 15 + automanual/new_delete/6-49.md | 61 ++ automanual/new_delete/6-5-1.md | 26 + automanual/new_delete/6-5-2.md | 18 + automanual/new_delete/6-5-3.md | 12 + automanual/new_delete/6-50.md | 81 ++ automanual/new_delete/6-6.md | 42 + automanual/new_delete/6-7.md | 47 ++ automanual/new_delete/6-8-1.md | 12 + automanual/new_delete/6-8-2.md | 8 + automanual/new_delete/6-9.md | 22 + automanual/new_delete/7-1.md | 20 + automanual/new_delete/7-2.md | 13 + automanual/new_delete/7-3-1.md | 49 ++ automanual/new_delete/7-3-2.md | 6 + automanual/new_delete/7-4.md | 12 + automanual/new_delete/8-1-1.md | 12 + automanual/new_delete/8-1-2.md | 88 ++ automanual/new_delete/8-1-3.md | 10 + automanual/new_delete/8-1-4.md | 35 + automanual/new_delete/8-1-5.md | 16 + automanual/new_delete/8-1-6.md | 132 +++ automanual/new_delete/8-1-7.md | 29 + automanual/new_delete/8-1-8.md | 24 + automanual/new_delete/8-1-9.md | 116 +++ automanual/new_delete/8-2-1.md | 24 + automanual/new_delete/8-2-2.md | 22 + automanual/new_delete/8-2-3.md | 7 + automanual/new_delete/8-2-4.md | 24 + automanual/new_delete/8-3-1.md | 749 +++++++++++++++++ automanual/new_delete/9-1.md | 51 ++ automanual/new_delete/9-2.md | 198 +++++ automanual/new_delete/TOC.md | 236 ++++++ automanual/new_delete/credit.md | 29 + automanual/old/1-1.md | 15 + automanual/old/1-10.md | 20 + automanual/old/1-2-1.md | 12 + automanual/old/1-2-2.md | 6 + automanual/old/1-2-3.md | 4 + automanual/old/1-2-4.md | 15 + automanual/old/1-2-5.md | 8 + automanual/old/1-2-6.md | 8 + automanual/old/1-2-7.md | 25 + automanual/old/1-2-8.md | 18 + automanual/old/1-3.md | 16 + automanual/old/1-4.md | 26 + automanual/old/1-5.md | 12 + automanual/old/1-6.md | 30 + automanual/old/1-7-1.md | 12 + automanual/old/1-7-2.md | 34 + automanual/old/1-7-3.md | 6 + automanual/old/1-8.md | 17 + automanual/old/1-9.md | 8 + automanual/old/2-1.md | 39 + automanual/old/2-2.md | 12 + automanual/old/3.md | 21 + automanual/old/4-1-1.md | 34 + automanual/old/4-1-2.md | 16 + automanual/old/4-1-3.md | 12 + automanual/old/4-1-4.md | 107 +++ automanual/old/4-2-1-1.md | 105 +++ automanual/old/4-2-1-2.md | 22 + automanual/old/4-2-1-3.md | 24 + automanual/old/4-2-2.md | 15 + automanual/old/5-1.md | 50 ++ automanual/old/5-2.md | 19 + automanual/old/5-3.md | 295 +++++++ automanual/old/5-4.md | 18 + automanual/old/5-5.md | 12 + automanual/old/5-6.md | 98 +++ automanual/old/6-1-1.md | 31 + automanual/old/6-1-2.md | 47 ++ automanual/old/6-1-3.md | 23 + automanual/old/6-1-4-1.md | 50 ++ automanual/old/6-1-4-2.md | 141 ++++ automanual/old/6-1-5.md | 45 ++ automanual/old/6-1-6.md | 39 + automanual/old/6-1-7.md | 17 + automanual/old/6-1-8-1.md | 27 + automanual/old/6-1-8-2.md | 18 + automanual/old/6-10.md | 10 + automanual/old/6-11.md | 12 + automanual/old/6-12.md | 26 + automanual/old/6-13-1.md | 24 + automanual/old/6-13-2.md | 14 + automanual/old/6-14-1.md | 16 + automanual/old/6-14-2.md | 10 + automanual/old/6-14-3.md | 22 + automanual/old/6-14-4.md | 16 + automanual/old/6-14-5.md | 8 + automanual/old/6-15-1.md | 18 + automanual/old/6-15-2.md | 18 + automanual/old/6-15-3.md | 18 + automanual/old/6-15-4.md | 18 + automanual/old/6-15-5.md | 18 + automanual/old/6-16.md | 14 + automanual/old/6-17.md | 52 ++ automanual/old/6-18.md | 35 + automanual/old/6-19.md | 16 + automanual/old/6-2.md | 24 + automanual/old/6-20.md | 8 + automanual/old/6-21.md | 12 + automanual/old/6-22-1.md | 12 + automanual/old/6-22-2.md | 22 + automanual/old/6-23.md | 14 + automanual/old/6-24.md | 36 + automanual/old/6-25.md | 8 + automanual/old/6-26.md | 81 ++ automanual/old/6-27.md | 49 ++ automanual/old/6-28-1.md | 14 + automanual/old/6-28-2.md | 84 ++ automanual/old/6-29-1.md | 18 + automanual/old/6-29-2.md | 18 + automanual/old/6-3.md | 18 + automanual/old/6-30.md | 16 + automanual/old/6-31.md | 31 + automanual/old/6-32-1.md | 64 ++ automanual/old/6-32-2.md | 12 + automanual/old/6-33-1.md | 36 + automanual/old/6-33-2.md | 44 + automanual/old/6-34.md | 12 + automanual/old/6-35.md | 14 + automanual/old/6-36.md | 34 + automanual/old/6-37.md | 10 + automanual/old/6-38-1.md | 26 + automanual/old/6-38-2.md | 61 ++ automanual/old/6-39-1.md | 22 + automanual/old/6-39-2.md | 16 + automanual/old/6-39-3.md | 12 + automanual/old/6-39-4.md | 10 + automanual/old/6-39-5.md | 12 + automanual/old/6-39-6.md | 14 + automanual/old/6-39-7.md | 10 + automanual/old/6-4-1.md | 14 + automanual/old/6-4-2.md | 25 + automanual/old/6-4-3.md | 17 + automanual/old/6-4-4.md | 20 + automanual/old/6-4-5.md | 14 + automanual/old/6-4-6.md | 10 + automanual/old/6-4-7.md | 8 + automanual/old/6-40-1.md | 82 ++ automanual/old/6-40-2.md | 22 + automanual/old/6-41.md | 34 + automanual/old/6-42.md | 19 + automanual/old/6-43.md | 30 + automanual/old/6-44-1.md | 16 + automanual/old/6-44-2.md | 16 + automanual/old/6-44-3.md | 12 + automanual/old/6-45.md | 8 + automanual/old/6-46.md | 8 + automanual/old/6-47.md | 24 + automanual/old/6-48.md | 15 + automanual/old/6-49.md | 61 ++ automanual/old/6-5-1.md | 26 + automanual/old/6-5-2.md | 18 + automanual/old/6-5-3.md | 12 + automanual/old/6-50.md | 81 ++ automanual/old/6-6.md | 42 + automanual/old/6-7.md | 47 ++ automanual/old/6-8-1.md | 12 + automanual/old/6-8-2.md | 8 + automanual/old/6-9.md | 22 + automanual/old/7-1.md | 20 + automanual/old/7-2.md | 13 + automanual/old/7-3-1.md | 49 ++ automanual/old/7-3-2.md | 6 + automanual/old/7-4.md | 12 + automanual/old/8-1-1.md | 12 + automanual/old/8-1-2.md | 88 ++ automanual/old/8-1-3.md | 10 + automanual/old/8-1-4.md | 35 + automanual/old/8-1-5.md | 16 + automanual/old/8-1-6.md | 132 +++ automanual/old/8-1-7.md | 29 + automanual/old/8-1-8.md | 24 + automanual/old/8-1-9.md | 116 +++ automanual/old/8-2-1.md | 24 + automanual/old/8-2-2.md | 22 + automanual/old/8-2-3.md | 7 + automanual/old/8-2-4.md | 24 + automanual/old/8-3-1.md | 749 +++++++++++++++++ automanual/old/9-1.md | 51 ++ automanual/old/9-2.md | 198 +++++ automanual/old/TOC.md | 234 ++++++ automanual/old/credit.md | 29 + automanual/old/list.txt | 153 ++++ automanual/old/markdown.code-workspace | 16 + automanual/old/opensourcecobol.png | Bin 0 -> 92095 bytes automanual/old_delete/1-1.md | 22 + automanual/old_delete/1-10.md | 27 + automanual/old_delete/1-2-1.md | 19 + automanual/old_delete/1-2-2.md | 13 + automanual/old_delete/1-2-3.md | 11 + automanual/old_delete/1-2-4.md | 22 + automanual/old_delete/1-2-5.md | 15 + automanual/old_delete/1-2-6.md | 15 + automanual/old_delete/1-2-7.md | 32 + automanual/old_delete/1-2-8.md | 25 + automanual/old_delete/1-3.md | 23 + automanual/old_delete/1-4.md | 33 + automanual/old_delete/1-5.md | 19 + automanual/old_delete/1-6.md | 37 + automanual/old_delete/1-7-1.md | 19 + automanual/old_delete/1-7-2.md | 41 + automanual/old_delete/1-7-3.md | 13 + automanual/old_delete/1-8.md | 24 + automanual/old_delete/1-9.md | 15 + automanual/old_delete/2-1.md | 46 ++ automanual/old_delete/2-2.md | 19 + automanual/old_delete/3.md | 28 + automanual/old_delete/4-1-1.md | 41 + automanual/old_delete/4-1-2.md | 23 + automanual/old_delete/4-1-3.md | 19 + automanual/old_delete/4-1-4.md | 114 +++ automanual/old_delete/4-2-1-1.md | 112 +++ automanual/old_delete/4-2-1-2.md | 29 + automanual/old_delete/4-2-1-3.md | 31 + automanual/old_delete/4-2-2.md | 22 + automanual/old_delete/5-1.md | 57 ++ automanual/old_delete/5-2.md | 26 + automanual/old_delete/5-3.md | 302 +++++++ automanual/old_delete/5-4.md | 25 + automanual/old_delete/5-5.md | 19 + automanual/old_delete/5-6.md | 105 +++ automanual/old_delete/6-1-1.md | 38 + automanual/old_delete/6-1-2.md | 54 ++ automanual/old_delete/6-1-3.md | 30 + automanual/old_delete/6-1-4-1.md | 57 ++ automanual/old_delete/6-1-4-2.md | 148 ++++ automanual/old_delete/6-1-5.md | 52 ++ automanual/old_delete/6-1-6.md | 47 ++ automanual/old_delete/6-1-7.md | 24 + automanual/old_delete/6-1-8-1.md | 34 + automanual/old_delete/6-1-8-2.md | 25 + automanual/old_delete/6-10.md | 17 + automanual/old_delete/6-11.md | 19 + automanual/old_delete/6-12.md | 33 + automanual/old_delete/6-13-1.md | 31 + automanual/old_delete/6-13-2.md | 21 + automanual/old_delete/6-14-1.md | 23 + automanual/old_delete/6-14-2.md | 17 + automanual/old_delete/6-14-3.md | 29 + automanual/old_delete/6-14-4.md | 23 + automanual/old_delete/6-14-5.md | 15 + automanual/old_delete/6-15-1.md | 25 + automanual/old_delete/6-15-2.md | 25 + automanual/old_delete/6-15-3.md | 25 + automanual/old_delete/6-15-4.md | 25 + automanual/old_delete/6-15-5.md | 25 + automanual/old_delete/6-16.md | 21 + automanual/old_delete/6-17.md | 59 ++ automanual/old_delete/6-18.md | 42 + automanual/old_delete/6-19.md | 23 + automanual/old_delete/6-2.md | 31 + automanual/old_delete/6-20.md | 15 + automanual/old_delete/6-21.md | 19 + automanual/old_delete/6-22-1.md | 19 + automanual/old_delete/6-22-2.md | 29 + automanual/old_delete/6-23.md | 21 + automanual/old_delete/6-24.md | 43 + automanual/old_delete/6-25.md | 15 + automanual/old_delete/6-26.md | 88 ++ automanual/old_delete/6-27.md | 56 ++ automanual/old_delete/6-28-1.md | 21 + automanual/old_delete/6-28-2.md | 91 +++ automanual/old_delete/6-29-1.md | 25 + automanual/old_delete/6-29-2.md | 25 + automanual/old_delete/6-3.md | 25 + automanual/old_delete/6-30.md | 23 + automanual/old_delete/6-31.md | 38 + automanual/old_delete/6-32-1.md | 71 ++ automanual/old_delete/6-32-2.md | 19 + automanual/old_delete/6-33-1.md | 43 + automanual/old_delete/6-33-2.md | 51 ++ automanual/old_delete/6-34.md | 19 + automanual/old_delete/6-35.md | 21 + automanual/old_delete/6-36.md | 41 + automanual/old_delete/6-37.md | 17 + automanual/old_delete/6-38-1.md | 33 + automanual/old_delete/6-38-2.md | 68 ++ automanual/old_delete/6-39-1.md | 29 + automanual/old_delete/6-39-2.md | 23 + automanual/old_delete/6-39-3.md | 19 + automanual/old_delete/6-39-4.md | 17 + automanual/old_delete/6-39-5.md | 19 + automanual/old_delete/6-39-6.md | 21 + automanual/old_delete/6-39-7.md | 17 + automanual/old_delete/6-4-1.md | 21 + automanual/old_delete/6-4-2.md | 32 + automanual/old_delete/6-4-3.md | 24 + automanual/old_delete/6-4-4.md | 27 + automanual/old_delete/6-4-5.md | 21 + automanual/old_delete/6-4-6.md | 17 + automanual/old_delete/6-4-7.md | 15 + automanual/old_delete/6-40-1.md | 89 +++ automanual/old_delete/6-40-2.md | 29 + automanual/old_delete/6-41.md | 41 + automanual/old_delete/6-42.md | 26 + automanual/old_delete/6-43.md | 37 + automanual/old_delete/6-44-1.md | 23 + automanual/old_delete/6-44-2.md | 23 + automanual/old_delete/6-44-3.md | 19 + automanual/old_delete/6-45.md | 15 + automanual/old_delete/6-46.md | 15 + automanual/old_delete/6-47.md | 31 + automanual/old_delete/6-48.md | 22 + automanual/old_delete/6-49.md | 68 ++ automanual/old_delete/6-5-1.md | 33 + automanual/old_delete/6-5-2.md | 25 + automanual/old_delete/6-5-3.md | 19 + automanual/old_delete/6-50.md | 88 ++ automanual/old_delete/6-6.md | 49 ++ automanual/old_delete/6-7.md | 54 ++ automanual/old_delete/6-8-1.md | 19 + automanual/old_delete/6-8-2.md | 15 + automanual/old_delete/6-9.md | 29 + automanual/old_delete/7-1.md | 27 + automanual/old_delete/7-2.md | 20 + automanual/old_delete/7-3-1.md | 56 ++ automanual/old_delete/7-3-2.md | 13 + automanual/old_delete/7-4.md | 19 + automanual/old_delete/8-1-1.md | 19 + automanual/old_delete/8-1-2.md | 95 +++ automanual/old_delete/8-1-3.md | 17 + automanual/old_delete/8-1-4.md | 42 + automanual/old_delete/8-1-5.md | 23 + automanual/old_delete/8-1-6.md | 139 ++++ automanual/old_delete/8-1-7.md | 36 + automanual/old_delete/8-1-8.md | 31 + automanual/old_delete/8-1-9.md | 123 +++ automanual/old_delete/8-2-1.md | 31 + automanual/old_delete/8-2-2.md | 29 + automanual/old_delete/8-2-3.md | 14 + automanual/old_delete/8-2-4.md | 31 + automanual/old_delete/8-3-1.md | 756 ++++++++++++++++++ automanual/old_delete/9-1.md | 58 ++ automanual/old_delete/9-2.md | 205 +++++ automanual/old_delete/TOC.md | 239 ++++++ automanual/old_delete/credit.md | 39 + .../opensourcecobol.github.io.code-workspace | 20 + 623 files changed, 25605 insertions(+) create mode 100644 automanual/AUTODELETE$1.class create mode 100644 automanual/AUTODELETE$2.class create mode 100644 automanual/AUTODELETE$3.class create mode 100644 automanual/AUTODELETE$4.class create mode 100644 automanual/AUTODELETE$5.class create mode 100644 automanual/AUTODELETE$6.class create mode 100644 automanual/AUTODELETE$7.class create mode 100644 automanual/AUTODELETE.cbl create mode 100644 automanual/AUTODELETE.class create mode 100644 automanual/AUTODELETE.java create mode 100644 automanual/AUTODELETE_2.cbl create mode 100644 automanual/AUTOMANUAL.cbl create mode 100644 automanual/AUTOMANUAL_original.cbl create mode 100755 automanual/cob4j_convert.bat create mode 100755 automanual/cob4j_convert2.bat create mode 100644 automanual/new/1-1.md create mode 100644 automanual/new/1-10.md create mode 100644 automanual/new/1-2-1.md create mode 100644 automanual/new/1-2-2.md create mode 100644 automanual/new/1-2-3.md create mode 100644 automanual/new/1-2-4.md create mode 100644 automanual/new/1-2-5.md create mode 100644 automanual/new/1-2-6.md create mode 100644 automanual/new/1-2-7.md create mode 100644 automanual/new/1-2-8.md create mode 100644 automanual/new/1-3.md create mode 100644 automanual/new/1-4.md create mode 100644 automanual/new/1-5.md create mode 100644 automanual/new/1-6.md create mode 100644 automanual/new/1-7-1.md create mode 100644 automanual/new/1-7-2.md create mode 100644 automanual/new/1-7-3.md create mode 100644 automanual/new/1-8.md create mode 100644 automanual/new/1-9.md create mode 100644 automanual/new/2-1.md create mode 100644 automanual/new/2-2.md create mode 100644 automanual/new/3.md create mode 100644 automanual/new/4-1-1.md create mode 100644 automanual/new/4-1-2.md create mode 100644 automanual/new/4-1-3.md create mode 100644 automanual/new/4-1-4.md create mode 100644 automanual/new/4-2-1-1.md create mode 100644 automanual/new/4-2-1-2.md create mode 100644 automanual/new/4-2-1-3.md create mode 100644 automanual/new/4-2-2.md create mode 100644 automanual/new/5-1.md create mode 100644 automanual/new/5-2.md create mode 100644 automanual/new/5-3.md create mode 100644 automanual/new/5-4.md create mode 100644 automanual/new/5-5.md create mode 100644 automanual/new/5-6.md create mode 100644 automanual/new/6-1-1.md create mode 100644 automanual/new/6-1-2.md create mode 100644 automanual/new/6-1-3.md create mode 100644 automanual/new/6-1-4-1.md create mode 100644 automanual/new/6-1-4-2.md create mode 100644 automanual/new/6-1-5.md create mode 100644 automanual/new/6-1-6.md create mode 100644 automanual/new/6-1-7.md create mode 100644 automanual/new/6-1-8-1.md create mode 100644 automanual/new/6-1-8-2.md create mode 100644 automanual/new/6-10.md create mode 100644 automanual/new/6-11.md create mode 100644 automanual/new/6-12.md create mode 100644 automanual/new/6-13-1.md create mode 100644 automanual/new/6-13-2.md create mode 100644 automanual/new/6-14-1.md create mode 100644 automanual/new/6-14-2.md create mode 100644 automanual/new/6-14-3.md create mode 100644 automanual/new/6-14-4.md create mode 100644 automanual/new/6-14-5.md create mode 100644 automanual/new/6-15-1.md create mode 100644 automanual/new/6-15-2.md create mode 100644 automanual/new/6-15-3.md create mode 100644 automanual/new/6-15-4.md create mode 100644 automanual/new/6-15-5.md create mode 100644 automanual/new/6-16.md create mode 100644 automanual/new/6-17.md create mode 100644 automanual/new/6-18.md create mode 100644 automanual/new/6-19.md create mode 100644 automanual/new/6-2.md create mode 100644 automanual/new/6-20.md create mode 100644 automanual/new/6-21.md create mode 100644 automanual/new/6-22-1.md create mode 100644 automanual/new/6-22-2.md create mode 100644 automanual/new/6-23.md create mode 100644 automanual/new/6-24.md create mode 100644 automanual/new/6-25.md create mode 100644 automanual/new/6-26.md create mode 100644 automanual/new/6-27.md create mode 100644 automanual/new/6-28-1.md create mode 100644 automanual/new/6-28-2.md create mode 100644 automanual/new/6-29-1.md create mode 100644 automanual/new/6-29-2.md create mode 100644 automanual/new/6-3.md create mode 100644 automanual/new/6-30.md create mode 100644 automanual/new/6-31.md create mode 100644 automanual/new/6-32-1.md create mode 100644 automanual/new/6-32-2.md create mode 100644 automanual/new/6-33-1.md create mode 100644 automanual/new/6-33-2.md create mode 100644 automanual/new/6-34.md create mode 100644 automanual/new/6-35.md create mode 100644 automanual/new/6-36.md create mode 100644 automanual/new/6-37.md create mode 100644 automanual/new/6-38-1.md create mode 100644 automanual/new/6-38-2.md create mode 100644 automanual/new/6-39-1.md create mode 100644 automanual/new/6-39-2.md create mode 100644 automanual/new/6-39-3.md create mode 100644 automanual/new/6-39-4.md create mode 100644 automanual/new/6-39-5.md create mode 100644 automanual/new/6-39-6.md create mode 100644 automanual/new/6-39-7.md create mode 100644 automanual/new/6-4-1.md create mode 100644 automanual/new/6-4-2.md create mode 100644 automanual/new/6-4-3.md create mode 100644 automanual/new/6-4-4.md create mode 100644 automanual/new/6-4-5.md create mode 100644 automanual/new/6-4-6.md create mode 100644 automanual/new/6-4-7.md create mode 100644 automanual/new/6-40-1.md create mode 100644 automanual/new/6-40-2.md create mode 100644 automanual/new/6-41.md create mode 100644 automanual/new/6-42.md create mode 100644 automanual/new/6-43.md create mode 100644 automanual/new/6-44-1.md create mode 100644 automanual/new/6-44-2.md create mode 100644 automanual/new/6-44-3.md create mode 100644 automanual/new/6-45.md create mode 100644 automanual/new/6-46.md create mode 100644 automanual/new/6-47.md create mode 100644 automanual/new/6-48.md create mode 100644 automanual/new/6-49.md create mode 100644 automanual/new/6-5-1.md create mode 100644 automanual/new/6-5-2.md create mode 100644 automanual/new/6-5-3.md create mode 100644 automanual/new/6-50.md create mode 100644 automanual/new/6-6.md create mode 100644 automanual/new/6-7.md create mode 100644 automanual/new/6-8-1.md create mode 100644 automanual/new/6-8-2.md create mode 100644 automanual/new/6-9.md create mode 100644 automanual/new/7-1.md create mode 100644 automanual/new/7-2.md create mode 100644 automanual/new/7-3-1.md create mode 100644 automanual/new/7-3-2.md create mode 100644 automanual/new/7-4.md create mode 100644 automanual/new/8-1-1.md create mode 100644 automanual/new/8-1-2.md create mode 100644 automanual/new/8-1-3.md create mode 100644 automanual/new/8-1-4.md create mode 100644 automanual/new/8-1-5.md create mode 100644 automanual/new/8-1-6.md create mode 100644 automanual/new/8-1-7.md create mode 100644 automanual/new/8-1-8.md create mode 100644 automanual/new/8-1-9.md create mode 100644 automanual/new/8-2-1.md create mode 100644 automanual/new/8-2-2.md create mode 100644 automanual/new/8-2-3.md create mode 100644 automanual/new/8-2-4.md create mode 100644 automanual/new/8-3-1.md create mode 100644 automanual/new/9-1.md create mode 100644 automanual/new/9-2.md create mode 100644 automanual/new/TOC.md create mode 100644 automanual/new/credit.md create mode 100644 automanual/new_delete/1-1.md create mode 100644 automanual/new_delete/1-10.md create mode 100644 automanual/new_delete/1-2-1.md create mode 100644 automanual/new_delete/1-2-2.md create mode 100644 automanual/new_delete/1-2-3.md create mode 100644 automanual/new_delete/1-2-4.md create mode 100644 automanual/new_delete/1-2-5.md create mode 100644 automanual/new_delete/1-2-6.md create mode 100644 automanual/new_delete/1-2-7.md create mode 100644 automanual/new_delete/1-2-8.md create mode 100644 automanual/new_delete/1-3.md create mode 100644 automanual/new_delete/1-4.md create mode 100644 automanual/new_delete/1-5.md create mode 100644 automanual/new_delete/1-6.md create mode 100644 automanual/new_delete/1-7-1.md create mode 100644 automanual/new_delete/1-7-2.md create mode 100644 automanual/new_delete/1-7-3.md create mode 100644 automanual/new_delete/1-8.md create mode 100644 automanual/new_delete/1-9.md create mode 100644 automanual/new_delete/2-1.md create mode 100644 automanual/new_delete/2-2.md create mode 100644 automanual/new_delete/3.md create mode 100644 automanual/new_delete/4-1-1.md create mode 100644 automanual/new_delete/4-1-2.md create mode 100644 automanual/new_delete/4-1-3.md create mode 100644 automanual/new_delete/4-1-4.md create mode 100644 automanual/new_delete/4-2-1-1.md create mode 100644 automanual/new_delete/4-2-1-2.md create mode 100644 automanual/new_delete/4-2-1-3.md create mode 100644 automanual/new_delete/4-2-2.md create mode 100644 automanual/new_delete/5-1.md create mode 100644 automanual/new_delete/5-2.md create mode 100644 automanual/new_delete/5-3.md create mode 100644 automanual/new_delete/5-4.md create mode 100644 automanual/new_delete/5-5.md create mode 100644 automanual/new_delete/5-6.md create mode 100644 automanual/new_delete/6-1-1.md create mode 100644 automanual/new_delete/6-1-2.md create mode 100644 automanual/new_delete/6-1-3.md create mode 100644 automanual/new_delete/6-1-4-1.md create mode 100644 automanual/new_delete/6-1-4-2.md create mode 100644 automanual/new_delete/6-1-5.md create mode 100644 automanual/new_delete/6-1-6.md create mode 100644 automanual/new_delete/6-1-7.md create mode 100644 automanual/new_delete/6-1-8-1.md create mode 100644 automanual/new_delete/6-1-8-2.md create mode 100644 automanual/new_delete/6-10.md create mode 100644 automanual/new_delete/6-11.md create mode 100644 automanual/new_delete/6-12.md create mode 100644 automanual/new_delete/6-13-1.md create mode 100644 automanual/new_delete/6-13-2.md create mode 100644 automanual/new_delete/6-14-1.md create mode 100644 automanual/new_delete/6-14-2.md create mode 100644 automanual/new_delete/6-14-3.md create mode 100644 automanual/new_delete/6-14-4.md create mode 100644 automanual/new_delete/6-14-5.md create mode 100644 automanual/new_delete/6-15-1.md create mode 100644 automanual/new_delete/6-15-2.md create mode 100644 automanual/new_delete/6-15-3.md create mode 100644 automanual/new_delete/6-15-4.md create mode 100644 automanual/new_delete/6-15-5.md create mode 100644 automanual/new_delete/6-16.md create mode 100644 automanual/new_delete/6-17.md create mode 100644 automanual/new_delete/6-18.md create mode 100644 automanual/new_delete/6-19.md create mode 100644 automanual/new_delete/6-2.md create mode 100644 automanual/new_delete/6-20.md create mode 100644 automanual/new_delete/6-21.md create mode 100644 automanual/new_delete/6-22-1.md create mode 100644 automanual/new_delete/6-22-2.md create mode 100644 automanual/new_delete/6-23.md create mode 100644 automanual/new_delete/6-24.md create mode 100644 automanual/new_delete/6-25.md create mode 100644 automanual/new_delete/6-26.md create mode 100644 automanual/new_delete/6-27.md create mode 100644 automanual/new_delete/6-28-1.md create mode 100644 automanual/new_delete/6-28-2.md create mode 100644 automanual/new_delete/6-29-1.md create mode 100644 automanual/new_delete/6-29-2.md create mode 100644 automanual/new_delete/6-3.md create mode 100644 automanual/new_delete/6-30.md create mode 100644 automanual/new_delete/6-31.md create mode 100644 automanual/new_delete/6-32-1.md create mode 100644 automanual/new_delete/6-32-2.md create mode 100644 automanual/new_delete/6-33-1.md create mode 100644 automanual/new_delete/6-33-2.md create mode 100644 automanual/new_delete/6-34.md create mode 100644 automanual/new_delete/6-35.md create mode 100644 automanual/new_delete/6-36.md create mode 100644 automanual/new_delete/6-37.md create mode 100644 automanual/new_delete/6-38-1.md create mode 100644 automanual/new_delete/6-38-2.md create mode 100644 automanual/new_delete/6-39-1.md create mode 100644 automanual/new_delete/6-39-2.md create mode 100644 automanual/new_delete/6-39-3.md create mode 100644 automanual/new_delete/6-39-4.md create mode 100644 automanual/new_delete/6-39-5.md create mode 100644 automanual/new_delete/6-39-6.md create mode 100644 automanual/new_delete/6-39-7.md create mode 100644 automanual/new_delete/6-4-1.md create mode 100644 automanual/new_delete/6-4-2.md create mode 100644 automanual/new_delete/6-4-3.md create mode 100644 automanual/new_delete/6-4-4.md create mode 100644 automanual/new_delete/6-4-5.md create mode 100644 automanual/new_delete/6-4-6.md create mode 100644 automanual/new_delete/6-4-7.md create mode 100644 automanual/new_delete/6-40-1.md create mode 100644 automanual/new_delete/6-40-2.md create mode 100644 automanual/new_delete/6-41.md create mode 100644 automanual/new_delete/6-42.md create mode 100644 automanual/new_delete/6-43.md create mode 100644 automanual/new_delete/6-44-1.md create mode 100644 automanual/new_delete/6-44-2.md create mode 100644 automanual/new_delete/6-44-3.md create mode 100644 automanual/new_delete/6-45.md create mode 100644 automanual/new_delete/6-46.md create mode 100644 automanual/new_delete/6-47.md create mode 100644 automanual/new_delete/6-48.md create mode 100644 automanual/new_delete/6-49.md create mode 100644 automanual/new_delete/6-5-1.md create mode 100644 automanual/new_delete/6-5-2.md create mode 100644 automanual/new_delete/6-5-3.md create mode 100644 automanual/new_delete/6-50.md create mode 100644 automanual/new_delete/6-6.md create mode 100644 automanual/new_delete/6-7.md create mode 100644 automanual/new_delete/6-8-1.md create mode 100644 automanual/new_delete/6-8-2.md create mode 100644 automanual/new_delete/6-9.md create mode 100644 automanual/new_delete/7-1.md create mode 100644 automanual/new_delete/7-2.md create mode 100644 automanual/new_delete/7-3-1.md create mode 100644 automanual/new_delete/7-3-2.md create mode 100644 automanual/new_delete/7-4.md create mode 100644 automanual/new_delete/8-1-1.md create mode 100644 automanual/new_delete/8-1-2.md create mode 100644 automanual/new_delete/8-1-3.md create mode 100644 automanual/new_delete/8-1-4.md create mode 100644 automanual/new_delete/8-1-5.md create mode 100644 automanual/new_delete/8-1-6.md create mode 100644 automanual/new_delete/8-1-7.md create mode 100644 automanual/new_delete/8-1-8.md create mode 100644 automanual/new_delete/8-1-9.md create mode 100644 automanual/new_delete/8-2-1.md create mode 100644 automanual/new_delete/8-2-2.md create mode 100644 automanual/new_delete/8-2-3.md create mode 100644 automanual/new_delete/8-2-4.md create mode 100644 automanual/new_delete/8-3-1.md create mode 100644 automanual/new_delete/9-1.md create mode 100644 automanual/new_delete/9-2.md create mode 100644 automanual/new_delete/TOC.md create mode 100644 automanual/new_delete/credit.md create mode 100644 automanual/old/1-1.md create mode 100644 automanual/old/1-10.md create mode 100644 automanual/old/1-2-1.md create mode 100644 automanual/old/1-2-2.md create mode 100644 automanual/old/1-2-3.md create mode 100644 automanual/old/1-2-4.md create mode 100644 automanual/old/1-2-5.md create mode 100644 automanual/old/1-2-6.md create mode 100644 automanual/old/1-2-7.md create mode 100644 automanual/old/1-2-8.md create mode 100644 automanual/old/1-3.md create mode 100644 automanual/old/1-4.md create mode 100644 automanual/old/1-5.md create mode 100644 automanual/old/1-6.md create mode 100644 automanual/old/1-7-1.md create mode 100644 automanual/old/1-7-2.md create mode 100644 automanual/old/1-7-3.md create mode 100644 automanual/old/1-8.md create mode 100644 automanual/old/1-9.md create mode 100644 automanual/old/2-1.md create mode 100644 automanual/old/2-2.md create mode 100644 automanual/old/3.md create mode 100644 automanual/old/4-1-1.md create mode 100644 automanual/old/4-1-2.md create mode 100644 automanual/old/4-1-3.md create mode 100644 automanual/old/4-1-4.md create mode 100644 automanual/old/4-2-1-1.md create mode 100644 automanual/old/4-2-1-2.md create mode 100644 automanual/old/4-2-1-3.md create mode 100644 automanual/old/4-2-2.md create mode 100644 automanual/old/5-1.md create mode 100644 automanual/old/5-2.md create mode 100644 automanual/old/5-3.md create mode 100644 automanual/old/5-4.md create mode 100644 automanual/old/5-5.md create mode 100644 automanual/old/5-6.md create mode 100644 automanual/old/6-1-1.md create mode 100644 automanual/old/6-1-2.md create mode 100644 automanual/old/6-1-3.md create mode 100644 automanual/old/6-1-4-1.md create mode 100644 automanual/old/6-1-4-2.md create mode 100644 automanual/old/6-1-5.md create mode 100644 automanual/old/6-1-6.md create mode 100644 automanual/old/6-1-7.md create mode 100644 automanual/old/6-1-8-1.md create mode 100644 automanual/old/6-1-8-2.md create mode 100644 automanual/old/6-10.md create mode 100644 automanual/old/6-11.md create mode 100644 automanual/old/6-12.md create mode 100644 automanual/old/6-13-1.md create mode 100644 automanual/old/6-13-2.md create mode 100644 automanual/old/6-14-1.md create mode 100644 automanual/old/6-14-2.md create mode 100644 automanual/old/6-14-3.md create mode 100644 automanual/old/6-14-4.md create mode 100644 automanual/old/6-14-5.md create mode 100644 automanual/old/6-15-1.md create mode 100644 automanual/old/6-15-2.md create mode 100644 automanual/old/6-15-3.md create mode 100644 automanual/old/6-15-4.md create mode 100644 automanual/old/6-15-5.md create mode 100644 automanual/old/6-16.md create mode 100644 automanual/old/6-17.md create mode 100644 automanual/old/6-18.md create mode 100644 automanual/old/6-19.md create mode 100644 automanual/old/6-2.md create mode 100644 automanual/old/6-20.md create mode 100644 automanual/old/6-21.md create mode 100644 automanual/old/6-22-1.md create mode 100644 automanual/old/6-22-2.md create mode 100644 automanual/old/6-23.md create mode 100644 automanual/old/6-24.md create mode 100644 automanual/old/6-25.md create mode 100644 automanual/old/6-26.md create mode 100644 automanual/old/6-27.md create mode 100644 automanual/old/6-28-1.md create mode 100644 automanual/old/6-28-2.md create mode 100644 automanual/old/6-29-1.md create mode 100644 automanual/old/6-29-2.md create mode 100644 automanual/old/6-3.md create mode 100644 automanual/old/6-30.md create mode 100644 automanual/old/6-31.md create mode 100644 automanual/old/6-32-1.md create mode 100644 automanual/old/6-32-2.md create mode 100644 automanual/old/6-33-1.md create mode 100644 automanual/old/6-33-2.md create mode 100644 automanual/old/6-34.md create mode 100644 automanual/old/6-35.md create mode 100644 automanual/old/6-36.md create mode 100644 automanual/old/6-37.md create mode 100644 automanual/old/6-38-1.md create mode 100644 automanual/old/6-38-2.md create mode 100644 automanual/old/6-39-1.md create mode 100644 automanual/old/6-39-2.md create mode 100644 automanual/old/6-39-3.md create mode 100644 automanual/old/6-39-4.md create mode 100644 automanual/old/6-39-5.md create mode 100644 automanual/old/6-39-6.md create mode 100644 automanual/old/6-39-7.md create mode 100644 automanual/old/6-4-1.md create mode 100644 automanual/old/6-4-2.md create mode 100644 automanual/old/6-4-3.md create mode 100644 automanual/old/6-4-4.md create mode 100644 automanual/old/6-4-5.md create mode 100644 automanual/old/6-4-6.md create mode 100644 automanual/old/6-4-7.md create mode 100644 automanual/old/6-40-1.md create mode 100644 automanual/old/6-40-2.md create mode 100644 automanual/old/6-41.md create mode 100644 automanual/old/6-42.md create mode 100644 automanual/old/6-43.md create mode 100644 automanual/old/6-44-1.md create mode 100644 automanual/old/6-44-2.md create mode 100644 automanual/old/6-44-3.md create mode 100644 automanual/old/6-45.md create mode 100644 automanual/old/6-46.md create mode 100644 automanual/old/6-47.md create mode 100644 automanual/old/6-48.md create mode 100644 automanual/old/6-49.md create mode 100644 automanual/old/6-5-1.md create mode 100644 automanual/old/6-5-2.md create mode 100644 automanual/old/6-5-3.md create mode 100644 automanual/old/6-50.md create mode 100644 automanual/old/6-6.md create mode 100644 automanual/old/6-7.md create mode 100644 automanual/old/6-8-1.md create mode 100644 automanual/old/6-8-2.md create mode 100644 automanual/old/6-9.md create mode 100644 automanual/old/7-1.md create mode 100644 automanual/old/7-2.md create mode 100644 automanual/old/7-3-1.md create mode 100644 automanual/old/7-3-2.md create mode 100644 automanual/old/7-4.md create mode 100644 automanual/old/8-1-1.md create mode 100644 automanual/old/8-1-2.md create mode 100644 automanual/old/8-1-3.md create mode 100644 automanual/old/8-1-4.md create mode 100644 automanual/old/8-1-5.md create mode 100644 automanual/old/8-1-6.md create mode 100644 automanual/old/8-1-7.md create mode 100644 automanual/old/8-1-8.md create mode 100644 automanual/old/8-1-9.md create mode 100644 automanual/old/8-2-1.md create mode 100644 automanual/old/8-2-2.md create mode 100644 automanual/old/8-2-3.md create mode 100644 automanual/old/8-2-4.md create mode 100644 automanual/old/8-3-1.md create mode 100644 automanual/old/9-1.md create mode 100644 automanual/old/9-2.md create mode 100644 automanual/old/TOC.md create mode 100644 automanual/old/credit.md create mode 100644 automanual/old/list.txt create mode 100644 automanual/old/markdown.code-workspace create mode 100644 automanual/old/opensourcecobol.png create mode 100644 automanual/old_delete/1-1.md create mode 100644 automanual/old_delete/1-10.md create mode 100644 automanual/old_delete/1-2-1.md create mode 100644 automanual/old_delete/1-2-2.md create mode 100644 automanual/old_delete/1-2-3.md create mode 100644 automanual/old_delete/1-2-4.md create mode 100644 automanual/old_delete/1-2-5.md create mode 100644 automanual/old_delete/1-2-6.md create mode 100644 automanual/old_delete/1-2-7.md create mode 100644 automanual/old_delete/1-2-8.md create mode 100644 automanual/old_delete/1-3.md create mode 100644 automanual/old_delete/1-4.md create mode 100644 automanual/old_delete/1-5.md create mode 100644 automanual/old_delete/1-6.md create mode 100644 automanual/old_delete/1-7-1.md create mode 100644 automanual/old_delete/1-7-2.md create mode 100644 automanual/old_delete/1-7-3.md create mode 100644 automanual/old_delete/1-8.md create mode 100644 automanual/old_delete/1-9.md create mode 100644 automanual/old_delete/2-1.md create mode 100644 automanual/old_delete/2-2.md create mode 100644 automanual/old_delete/3.md create mode 100644 automanual/old_delete/4-1-1.md create mode 100644 automanual/old_delete/4-1-2.md create mode 100644 automanual/old_delete/4-1-3.md create mode 100644 automanual/old_delete/4-1-4.md create mode 100644 automanual/old_delete/4-2-1-1.md create mode 100644 automanual/old_delete/4-2-1-2.md create mode 100644 automanual/old_delete/4-2-1-3.md create mode 100644 automanual/old_delete/4-2-2.md create mode 100644 automanual/old_delete/5-1.md create mode 100644 automanual/old_delete/5-2.md create mode 100644 automanual/old_delete/5-3.md create mode 100644 automanual/old_delete/5-4.md create mode 100644 automanual/old_delete/5-5.md create mode 100644 automanual/old_delete/5-6.md create mode 100644 automanual/old_delete/6-1-1.md create mode 100644 automanual/old_delete/6-1-2.md create mode 100644 automanual/old_delete/6-1-3.md create mode 100644 automanual/old_delete/6-1-4-1.md create mode 100644 automanual/old_delete/6-1-4-2.md create mode 100644 automanual/old_delete/6-1-5.md create mode 100644 automanual/old_delete/6-1-6.md create mode 100644 automanual/old_delete/6-1-7.md create mode 100644 automanual/old_delete/6-1-8-1.md create mode 100644 automanual/old_delete/6-1-8-2.md create mode 100644 automanual/old_delete/6-10.md create mode 100644 automanual/old_delete/6-11.md create mode 100644 automanual/old_delete/6-12.md create mode 100644 automanual/old_delete/6-13-1.md create mode 100644 automanual/old_delete/6-13-2.md create mode 100644 automanual/old_delete/6-14-1.md create mode 100644 automanual/old_delete/6-14-2.md create mode 100644 automanual/old_delete/6-14-3.md create mode 100644 automanual/old_delete/6-14-4.md create mode 100644 automanual/old_delete/6-14-5.md create mode 100644 automanual/old_delete/6-15-1.md create mode 100644 automanual/old_delete/6-15-2.md create mode 100644 automanual/old_delete/6-15-3.md create mode 100644 automanual/old_delete/6-15-4.md create mode 100644 automanual/old_delete/6-15-5.md create mode 100644 automanual/old_delete/6-16.md create mode 100644 automanual/old_delete/6-17.md create mode 100644 automanual/old_delete/6-18.md create mode 100644 automanual/old_delete/6-19.md create mode 100644 automanual/old_delete/6-2.md create mode 100644 automanual/old_delete/6-20.md create mode 100644 automanual/old_delete/6-21.md create mode 100644 automanual/old_delete/6-22-1.md create mode 100644 automanual/old_delete/6-22-2.md create mode 100644 automanual/old_delete/6-23.md create mode 100644 automanual/old_delete/6-24.md create mode 100644 automanual/old_delete/6-25.md create mode 100644 automanual/old_delete/6-26.md create mode 100644 automanual/old_delete/6-27.md create mode 100644 automanual/old_delete/6-28-1.md create mode 100644 automanual/old_delete/6-28-2.md create mode 100644 automanual/old_delete/6-29-1.md create mode 100644 automanual/old_delete/6-29-2.md create mode 100644 automanual/old_delete/6-3.md create mode 100644 automanual/old_delete/6-30.md create mode 100644 automanual/old_delete/6-31.md create mode 100644 automanual/old_delete/6-32-1.md create mode 100644 automanual/old_delete/6-32-2.md create mode 100644 automanual/old_delete/6-33-1.md create mode 100644 automanual/old_delete/6-33-2.md create mode 100644 automanual/old_delete/6-34.md create mode 100644 automanual/old_delete/6-35.md create mode 100644 automanual/old_delete/6-36.md create mode 100644 automanual/old_delete/6-37.md create mode 100644 automanual/old_delete/6-38-1.md create mode 100644 automanual/old_delete/6-38-2.md create mode 100644 automanual/old_delete/6-39-1.md create mode 100644 automanual/old_delete/6-39-2.md create mode 100644 automanual/old_delete/6-39-3.md create mode 100644 automanual/old_delete/6-39-4.md create mode 100644 automanual/old_delete/6-39-5.md create mode 100644 automanual/old_delete/6-39-6.md create mode 100644 automanual/old_delete/6-39-7.md create mode 100644 automanual/old_delete/6-4-1.md create mode 100644 automanual/old_delete/6-4-2.md create mode 100644 automanual/old_delete/6-4-3.md create mode 100644 automanual/old_delete/6-4-4.md create mode 100644 automanual/old_delete/6-4-5.md create mode 100644 automanual/old_delete/6-4-6.md create mode 100644 automanual/old_delete/6-4-7.md create mode 100644 automanual/old_delete/6-40-1.md create mode 100644 automanual/old_delete/6-40-2.md create mode 100644 automanual/old_delete/6-41.md create mode 100644 automanual/old_delete/6-42.md create mode 100644 automanual/old_delete/6-43.md create mode 100644 automanual/old_delete/6-44-1.md create mode 100644 automanual/old_delete/6-44-2.md create mode 100644 automanual/old_delete/6-44-3.md create mode 100644 automanual/old_delete/6-45.md create mode 100644 automanual/old_delete/6-46.md create mode 100644 automanual/old_delete/6-47.md create mode 100644 automanual/old_delete/6-48.md create mode 100644 automanual/old_delete/6-49.md create mode 100644 automanual/old_delete/6-5-1.md create mode 100644 automanual/old_delete/6-5-2.md create mode 100644 automanual/old_delete/6-5-3.md create mode 100644 automanual/old_delete/6-50.md create mode 100644 automanual/old_delete/6-6.md create mode 100644 automanual/old_delete/6-7.md create mode 100644 automanual/old_delete/6-8-1.md create mode 100644 automanual/old_delete/6-8-2.md create mode 100644 automanual/old_delete/6-9.md create mode 100644 automanual/old_delete/7-1.md create mode 100644 automanual/old_delete/7-2.md create mode 100644 automanual/old_delete/7-3-1.md create mode 100644 automanual/old_delete/7-3-2.md create mode 100644 automanual/old_delete/7-4.md create mode 100644 automanual/old_delete/8-1-1.md create mode 100644 automanual/old_delete/8-1-2.md create mode 100644 automanual/old_delete/8-1-3.md create mode 100644 automanual/old_delete/8-1-4.md create mode 100644 automanual/old_delete/8-1-5.md create mode 100644 automanual/old_delete/8-1-6.md create mode 100644 automanual/old_delete/8-1-7.md create mode 100644 automanual/old_delete/8-1-8.md create mode 100644 automanual/old_delete/8-1-9.md create mode 100644 automanual/old_delete/8-2-1.md create mode 100644 automanual/old_delete/8-2-2.md create mode 100644 automanual/old_delete/8-2-3.md create mode 100644 automanual/old_delete/8-2-4.md create mode 100644 automanual/old_delete/8-3-1.md create mode 100644 automanual/old_delete/9-1.md create mode 100644 automanual/old_delete/9-2.md create mode 100644 automanual/old_delete/TOC.md create mode 100644 automanual/old_delete/credit.md create mode 100644 automanual/opensourcecobol.github.io.code-workspace diff --git a/automanual/AUTODELETE$1.class b/automanual/AUTODELETE$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e544d5938524a8f3b6c6f190c97052a1887f0bde GIT binary patch literal 1212 zcmb_b!EVz)5Ph43I0-HZ0Sbiz1yXQQS_20VN>!DHv{W(;Y62Hdw!5SooZZOYAov(0 zJ^`d65C=Yhk3x)HDTzc6$ik96vrqG8o_A(`{r>S2z$4fOt`?EUwGs?mFM?sIgd4bN z;Ff_JLtY<>sCJLRbe_EIb)L4JcCXzed|gPPHw-K@6dl*&LGQzeQ`oMQJZuGS6!C~* z-sDj$0K(qdeA=gp| zRI2O<$@j)XkB2?i3kb=EW63aY)t!O+&b7x{1a@bng_3SSnoI5XK2MI3f!hY|7_dlv zSM;T;#~~$naUyj+rR?TLT(q0~D_i)0oJ5Ws9glqA z%D&z42He-p6Sn|MwCo10KC4vXks>ccZwY5;^~>bdkVTHH*;x6COk;8N8?s;M%uu0k zo-FW@zGqRT$e6KA8DeyWq4#Jh|u ZWOGTP#ROrPBU`1Y(MOdl=cnI6TwIcGkUV?!eMKCOva1*x- z+%`~S$m^p()$TKx&f}N8&Xcy&?zNkQZw4aJTLxAbijM2?u=ioaDQr&&9<@SODXtg} ztZCYwGZ@)YDPIa@%Mlk!#*xo`>B-Oz1CN}6?aSd%3cHnnEh%&)!`iq&v;K-9*OG@+ zs_X=U@5e)rM?KdI3CTvWU|6u~&cJ==+OZBoyED>(6mCeGOYQeQPmjvL9Rqg_Sfsui z^o6VAh!VUwmAW~j?B-Tdw446pZjcBpPwsF%kw{2e_@PvR=s)NBNFFj2_PNr}q|(Hl zgqtX!XrhF=i3U~;+%vI;b-M6LOl^bV!E86ouss`b(i(==KcwK}7MyhWAQn0p@^NPv zc4o-(RPMO`+o>e8Na<=hA~{o8cCG(3u?3oV?F30rAHAM+ni#5ok2OO^zG1MelaUWy z(YHI^fcv_6>K0&`mffJ$XO&7aQsiamE#WM!ewn-)vdED&8>?TDX)LXML-q@u87lP6 zlLbD~_Z+GenJ`u;LxRpXj*&S=Zf@f{<~|cJP5FfLgcOK!0T;1=OLWTMGL>3Py(_p% ZHkT$^N)d*6vQ>&YLxRoiMJk>?e*ko0St0-c literal 0 HcmV?d00001 diff --git a/automanual/AUTODELETE$3.class b/automanual/AUTODELETE$3.class new file mode 100644 index 0000000000000000000000000000000000000000..ff9cc21fbf309c4d48debfde1fff0c8764a2211b GIT binary patch literal 1212 zcmb_bQESss6#i~oo3>`QR-I0#PVF@9+#(8!bd0&$%|Tpct-kn_WY;b=y|?7vivA`+ z6efxf{s4cJc#=U|a1Rm;Bzy$>T!VY@=`s1>?OamBE2 z&C+(A!N`_M`BErbj<`^A9QoXro(%0U@W>h1z8nsvuv;#rDcEqOqt z%1$8o-gxNosONeiA=zjw80M|IGjQLz_E-m@-5KdX3O6LprS^NDCr4%Awt+haEK=VM z`oh)Yh!VUwk-DBzc5@>x+D-m(JBS6Ar+2s(OC+Q%{7|Yu^q+HmC=VD4dtB*fQfcB& z!%Y-WG*Lp`L<1`Z?wVM|8eRA_ruKm0VY(Y;*i1*9wuYhg4=MPh1;-uU9}67}`J^)p zTPd>a$Sv1@JCh`hl&+Q|k~5QK+xkxvTcC;8P7wF>@$0nH#8CZvtQj)$4TEJJk9_Eg zzTNQ#+}F($w*X7D>;|nqt5o8VA}>R431?{a%jDINMUJf5Sow-fV{!ExvR~-TP@!+0 zEbx)OXHlidn6XS5Vsx%?gv=3g`TO5->N5eelutNENP#HlaRKwVNT&=gQK^N*yNoMj Yb4jAb1YwvXTcxPeB-q?spyJ8%2Yn`4G5`Po literal 0 HcmV?d00001 diff --git a/automanual/AUTODELETE$4.class b/automanual/AUTODELETE$4.class new file mode 100644 index 0000000000000000000000000000000000000000..2b8f97c0fea55b32b1a95726da4d0c145a414744 GIT binary patch literal 3085 zcmb_eS#KLv6#gc5GO@XBmO>zEbqB(l({kiS5?lB&Bv+pnw^VuboN9GiK(x z3tQRB4nl$#ccuB?f5LRO-jBBwY1O+?8*o9#U?GEE+?2*tdVeCarE+cX~Dxr7?2_z-7 zPcHlAK}s&S%H_5&(ioG_co-8n5W)uBF1H8ek_jV=L-NYQaycS#cgW>V6?dsPs-R6w z8gAbv1uPvql%0qt(ur(hnDDy|%Mg21+^ry#*7DrUo~m#nOIa3oMorCixl6Z1=Ch^J zQxfiK;^a5B#gB-Az7Ycn>KN&UkN58dBkox=lAql?juubklYX zt2D;Nq+L+ZKF(dS-*yG@*2x*x;5vr2xQ{_YUWLw30B0zoq+*i6z!bwVd15k@VKLaK zFx-zkg9EO@We{>>ORg%8Gn_z);iSZ!l6(&^Jcx%F9>yaoPBT1;#~2>R6AVw{48v2B z=4pm!@GQe~c%Gpj0}L<7vlo%4P^fF$w^hOR=6tVUZ*z?GprJ%*Km?x)20!)=RxM$a z`CN=B7->SvK6`{>Zk~{4RLKatLh8(ul8pRMxfCkq#^Sm0*jR$hYZkv-Iac?5ULhV2_TD`Cn^1znmh6LFL>U$Y7_t*O*SE=3zzCOY!DiF7=d zOr;aK1F`IW1-lv+={+n?PbJekT8Y#1b~Nxj&p3;DsiYJQ(;PV^WJPR^q*9)C#l_lf zYv6+U#W5osDic%{$QJ~ps2)?YT$0&*&3t)rZW?7na4JE;hDx_9uQU;*R4h35pQHz3@`1-pjNn3w4Jg75oy}SDKc79^NF;@qzp;lnq(Ilo@5tl z(yM8%0+h~9*{}&}q5oRkNHf+=1oa_+Abr`ux_8hruxi731m2=OIhEEn`U2CmQfnnj z;!s{DdcrE|z&W&>L$HQcA8PAd)1_brvj^>g8bb6B`=^)Hz^1XRhUIg7tcDJM)47nf zYawg*f3dcc&>5^a6MFS^bo$aRZy&7TiZ=sqqsK>F84UQqRWsR5} zTz#ZYys9FfCn+dPbd8|d3jYF|&W(YLpk IV#NFX4KyZ^WdHyG literal 0 HcmV?d00001 diff --git a/automanual/AUTODELETE$5.class b/automanual/AUTODELETE$5.class new file mode 100644 index 0000000000000000000000000000000000000000..60d31aac8efcbe0e45fed6f8044028ce68c370bc GIT binary patch literal 3257 zcmb_e+jA3T6#t#1?KWX)LqsZfkcw$*3FQtgy(CQ`8j?Z+<)&eiZrUyBZrt5)6BRFb zzakI9la3GgrgEu_5573#gMWp8fHOY&fE3TS8=5k-Gnry$a=!DOJ@@aN^L>9z|MDw< zowzDtj}OnH+m8+C@qw_{k6!fo(T@Qix)2exr~re0#4sej?i1VnLLx4}i(>nd00}Sf z+pu6cAht;XQhp5Mpui3ZkQN{#z+nN72rweRQ7_hm1a?dqIxfHoKThIh39m@V5*qAr z&1&6DkP`!kGpWH?B9@7DGrdRCHM>{BDS|Jdaw5V8?YO(pyY_WJ^ zq7*hPD{tsl*eI#GWt7dlnm2MrFY~Od zn`%yIx|%Fc=2SDI97H7pH9{fBJw@s<8WG z=klua*^;10$Vtd^G-+*2SM0LM3Ww)Z)w94bx_j9Pf7*$8ND~e>S97{axXhH8o-Z1f zrjH#^?Qvt2(3n&$d%t1XEL&xl(Te9}Y{aMx6$J@nGRC1vn2>QAMH!ROWf&;Qcon7u zONNcIj59bZ;~dV*xPaGWbYhc?izvu=U4S?6ri@E4WxOSX-j?wW-j#7#P~H;^?+fe$ z0X`JlkA(h@#r6{cKE-D;KF1dlzLaqVUvW89J#O7j*s-wlC-g5&uv$3WPc^7eX9~it zze8o+)+W`NIw3?Bpk<#C;kuipWFfAkZKK5Q%+fLx`k(qKkjsvwv$5o0HZ_zTiYH=( zJ++khsA4N_o(36X2Tf&6s(YVe%Q5TA|#d*m)Gl3ZOjb~GdK{t-AwZu{2UUcISUC9CX3PM9Rokrx$b|h$G55M|3C_C2;*#4m@k}Wnzk^VzN39W}T;&#|!QoY9hEsu_dOSG#X>RF|lGc4!-6snfynWHvc) zB%V#jqM3Lq>3rm&%Pc#bge7AmStkna5XRjO;pnP#7kBEu{;a8qKD_uuF4i=m=1G-v z*Vl{NklpBivStvy5PbYmK=2p^LWpA&4+dw$(I0^*B18h*Ij*eQ}Ew}bPbyrE~%$)5Uj`tj!j|FjR&{g ztsH2$i^WrD8oBY{TbI=AE`i{ZsfR*Oxum62c$$q~!wPp_Aun^u*B^4XR7@OvgzK5P zg_l1joOJwK>I%0!3^(b7JAJrle9`;RrV_HOor#>t(a=uau@4=M|%Nl82=Y7xQ`Wlo@>a1E~>*$YCu0N zLW+XOQ47kn65r8U{6HIUliKhnb>c7T!r#Q4w1@oEL#t^o@A?=xF8aLUQJ12ARJ#*)t`SbVJZvcyUmB9d}b!2cigDKq8aUWS7H}D|F z9_n}mQ$tQeo}phIdSP~+!Kl36t!;0VDy3SfK=_I$JhiG}h9Oh29q!k@v^Z@m3&De; zZ-*fd8LDQtTe;F`SuzY=DMCxOxCmtwxZIVF^ex|W$Y@xuY&NB^iZNJ}LIu*#wi6U` zdkpEKJfKv=6;JT3sOj*aW;;G1eL*A`#?4%%VSlu(NO``s-BO+uwojb((r1?^%TU8( z4YL~Ni2aUN7q*H53h@41*OeY=7gpn>JINV0y_n!|r-pMeMM6r#^=0UZ`a7-;<$(r^ zVPK1g>a7fw0UehO7??Nk1Wz?QGw>WQ3@l*Lz!F|+ST<0=3KhN+I=jHI&|9S$)_Qa7 zToFU@0wH+&Do$^@8VTh!dHaSK)_aKZMy}iLQCE;&sO%`&B061B^iFLVHqHOk#)Hm& zwN%@!ZtWLIR}9M+X|n@c*{2oTAd9F5cAZn3EnT2m=lW8&c|z^keiRGH%#|62)L|e$ zb)7$LmJ{8z5|J#&BI!xT#B=nlG8t0x1A}Rvs@Atf-P(2<+*O5hg^X!>zB2TZv5}Ej zA7rKIH!uQ*D`aKShjfhOXTF2wCue^m^^Mk)oyLBe!Rj<##Tf03J?3deD8}-~V8`hD zf%FM3ouK~&+Sj(H9_L|47-SOH2pu5raa^Z|bAnbW+@!3x5^EB-X-?DQ3fxJMDGbv* PO1lP$`_S41c_-gLQ&*VM literal 0 HcmV?d00001 diff --git a/automanual/AUTODELETE$7.class b/automanual/AUTODELETE$7.class new file mode 100644 index 0000000000000000000000000000000000000000..2dd0f7c64b93ce842607e615afe85e6ad869d2ff GIT binary patch literal 1498 zcmb_c>rN9v6#k~IEL|3gRZ$c#Xw?OT1yN9n3e+Mb1q`kJCEM+^Y~9W@djX7z58_j( z(b)LI2k@bcXSar8X)DW$u>DvO}7<8wiFGeWFk|4@@KQZO7PY`nD9NLop8) zebaigWj6m@SMx^}kB&VBvkK-E+^1}cc1@Um;1b}=Q=yi7Oe6c0f>4W5&g*s<& znJ{G1Po+C<&|^11?;aZ-4p~D|jQ&GNgW()W8N`vG zU7MWx3N|@5{SC2C^i2h!wU2f%kJbwqp_`$_Iw6o2qn{D~f<)r|2dFLdC0bBg=x-tU zkq%>#c{+q<2N+<77-C0Avv;^ir*W_}E|Jhr;wUcDqdOKET_uBSk#wCR2YrpxdNb0D T<1FoIf=*FJ!z-hdS@io2!Of^_ literal 0 HcmV?d00001 diff --git a/automanual/AUTODELETE.cbl b/automanual/AUTODELETE.cbl new file mode 100644 index 0000000..9fe88c5 --- /dev/null +++ b/automanual/AUTODELETE.cbl @@ -0,0 +1,94 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. AUTODELETE. + AUTHOR. M SHIMADA. + DATE-WRITTEN. 2024-09-04. + ****************************************************************** + ENVIRONMENT DIVISION. + ****************************************************************** + *-------------------------------------* + INPUT-OUTPUT SECTION. + *-------------------------------------* + FILE-CONTROL. + SELECT OLDFILE ASSIGN TO DYNAMIC + OLD-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS OLD-STS. + SELECT NEWFILE ASSIGN TO DYNAMIC + NEW-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS NEW-STS. + ****************************************************************** + DATA DIVISION. + ****************************************************************** + *-------------------------------------* + FILE SECTION. + *-------------------------------------* + FD OLDFILE. + 01 OLD-REC PIC X(50000). + FD NEWFILE. + 01 NEW-REC PIC X(50000). + *-------------------------------------* + WORKING-STORAGE SECTION. + *-------------------------------------* + 77 OLD-STS PIC X(02). + 77 NEW-STS PIC X(02). + 77 OLD-FILE-PATH PIC X(256). + 77 NEW-FILE-PATH PIC X(256). + 77 MD-NAME PIC X(250). + *ファイルの終端を示すフラグ + 77 WS-END-OF-FILE PIC X VALUE 'N'. + 77 WS-IN-NAVI-SECTION PIC X VALUE 'N'. + ****************************************************************** + PROCEDURE DIVISION. + ****************************************************************** + *-------------------------------------* + MAIN-CONTROL SECTION. + *-------------------------------------* + MAIN-000. + *実行コマンドの引数からファイル名を取得する + ACCEPT MD-NAME FROM COMMAND-LINE. + *変換前後のファイルをフォルダ分けするためディレクトリを追加する + MOVE SPACE TO OLD-FILE-PATH. + STRING "old_delete/" DELIMITED BY SIZE + MD-NAME DELIMITED BY SPACE + INTO OLD-FILE-PATH. + MOVE SPACE TO NEW-FILE-PATH. + STRING "new_delete/" DELIMITED BY SIZE + MD-NAME DELIMITED BY SPACE + INTO NEW-FILE-PATH. + + IF OLD-FILE-PATH = SPACE GO TO MAIN-900. + + OPEN INPUT OLDFILE + OUTPUT NEWFILE. + MAIN-100. + PERFORM UNTIL WS-END-OF-FILE = 'Y' + *1行ずつ読み込む + READ OLDFILE INTO OLD-REC + *終わったら、ファイルの終端を示すフラグを'Y'にする + AT END + MOVE 'Y' TO WS-END-OF-FILE + NOT AT END + *からの記述を削除する + IF OLD-REC = "" + OR "" + MOVE 'Y' TO WS-IN-NAVI-SECTION + EXIT PERFORM CYCLE + END-IF + IF OLD-REC = "" + OR "" + MOVE 'N' TO WS-IN-NAVI-SECTION + EXIT PERFORM CYCLE + END-IF + *書き込み + IF WS-IN-NAVI-SECTION = 'N' + WRITE NEW-REC FROM OLD-REC + END-IF + END-READ + END-PERFORM. + + CLOSE NEWFILE. + CLOSE OLDFILE. + + MAIN-900. + STOP RUN. diff --git a/automanual/AUTODELETE.class b/automanual/AUTODELETE.class new file mode 100644 index 0000000000000000000000000000000000000000..edf9154c916173333b31a4cb37de3550a918faab GIT binary patch literal 8503 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 literal 0 HcmV?d00001 diff --git a/automanual/AUTODELETE.java b/automanual/AUTODELETE.java new file mode 100644 index 0000000..632af1d --- /dev/null +++ b/automanual/AUTODELETE.java @@ -0,0 +1,544 @@ +/* Generated by opensource COBOL 4J 1.1.2 */ +import java.io.UnsupportedEncodingException; +import jp.osscons.opensourcecobol.libcobj.*; +import jp.osscons.opensourcecobol.libcobj.common.*; +import jp.osscons.opensourcecobol.libcobj.data.*; +import jp.osscons.opensourcecobol.libcobj.exceptions.*; +import jp.osscons.opensourcecobol.libcobj.termio.*; +import jp.osscons.opensourcecobol.libcobj.call.*; +import jp.osscons.opensourcecobol.libcobj.file.*; +import jp.osscons.opensourcecobol.libcobj.ui.*; +import java.util.Optional; +import java.lang.NullPointerException; +import java.lang.IndexOutOfBoundsException; + +public class AUTODELETE implements CobolRunnable { + + private boolean initialized = false; + private CobolModule module; + private int entry; + + private CobolRunnable cob_unifunc; + + + @Override + public int run(CobolDataStorage... argStorages) { + return AUTODELETE_(0, argStorages); + } + + @Override + public void cancel() { + AUTODELETE_(-1); + } + + @Override + public boolean isActive() { + return false; + } + + public CobolResultSet execute () { + int returnCode = run_module(0); + return new CobolResultSet(returnCode); + } + + public int AUTODELETE_ (int entry, CobolDataStorage ...argStorages) { + this.entry = entry; + return this.run_module(entry); + } + + int run_module (int entry) { + this.module = new CobolModule(null, null, null, null, 0, '.', '$', ',', 1, 1, 1, 0, null ); + + /* Start of function code */ + + /* CANCEL callback handling */ + if (entry < 0) { + if (!this.initialized) { + CobolDecimal.cobInitNumeric(); + return 0; + } + h_OLDFILE.close (0, null); + h_NEWFILE.close (0, null); + this.initialized = false; + return 0; + } + + /* Push module stack */ + CobolModule.push (module); + + /* Initialize program */ + if (!this.initialized) { + module.setProgramId("AUTODELETE"); + + b_RETURN_CODE.set((int)0); + b_OLD_STS.fillBytes(' ', 2); + b_NEW_STS.fillBytes(' ', 2); + b_OLD_FILE_PATH.fillBytes(' ', 256); + b_NEW_FILE_PATH.fillBytes(' ', 256); + b_MD_NAME.fillBytes(' ', 250); + b_WS_END_OF_FILE.setByte(0, 'N'); b_WS_IN_NAVI_SECTION.setByte(0, 'N'); + h_OLDFILE = CobolFileFactory.makeCobolFileInstance( + /* select_name = */ "OLDFILE", + /* file_status = */ h_OLDFILE_status, + /* assign = */ f_OLD_FILE_PATH, + /* record = */ f_OLDFILE_record, + /* record_size = */ null, + /* record_min = */ 0, + /* record_max = */ 50000, + /* nkeys = */ 0, + /* keys = */ null, + /* organization = */ (char)1, + /* access_mode = */ (char)1, + /* lock_mode = */ (char)0, + /* open_mode = */ (char)0, + /* flag_optional = */ false, + /* last_open_mode = */ (char)0, + /* special = */ (char)0, + /* flag_nonexistent = */ false, + /* flag_end_of_file = */ false, + /* flag_begin_of_file = */ false, + /* flag_first_read = */ (char)0, + /* flag_read_done = */ false, + /* flag_select_features = */ (char)1, + /* flag_needs_nl = */ false, + /* flag_needs_top = */ false, + /* file_version = */ (char)0 + ); + h_NEWFILE = CobolFileFactory.makeCobolFileInstance( + /* select_name = */ "NEWFILE", + /* file_status = */ h_NEWFILE_status, + /* assign = */ f_NEW_FILE_PATH, + /* record = */ f_NEWFILE_record, + /* record_size = */ null, + /* record_min = */ 0, + /* record_max = */ 50000, + /* nkeys = */ 0, + /* keys = */ null, + /* organization = */ (char)1, + /* access_mode = */ (char)1, + /* lock_mode = */ (char)0, + /* open_mode = */ (char)0, + /* flag_optional = */ false, + /* last_open_mode = */ (char)0, + /* special = */ (char)0, + /* flag_nonexistent = */ false, + /* flag_end_of_file = */ false, + /* flag_begin_of_file = */ false, + /* flag_first_read = */ (char)0, + /* flag_read_done = */ false, + /* flag_select_features = */ (char)1, + /* flag_needs_nl = */ false, + /* flag_needs_top = */ false, + /* file_version = */ (char)0 + ); + + this.initialized = true; + } + /* PROCEDURE DIVISION */ + try{ + CobolStopRunException.dummy(); + CobolGoBackException.dummy(); + /* Entry dispatch */ + execEntry(l_AUTODELETE); + + } catch(CobolGoBackException e) { + return e.getReturnCode(); + } catch(CobolStopRunException e) { + CobolStopRunException.stopRun(); + System.exit(e.getReturnCode()); + } + /* Pop module stack */ + CobolModule.pop(); + + /* Program return */ + return b_RETURN_CODE.intValue(); + } + public CobolControl[] contList = { + new CobolControl(0, CobolControl.LabelType.label) { + public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + + return Optional.of(contList[l_AUTODELETE]); + } + }, + /* Entry AUTODELETE */ + new CobolControl(l_AUTODELETE, CobolControl.LabelType.label) { + public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + + return Optional.of(contList[l_MAIN_CONTROL]); + } + }, + /* MAIN-CONTROL SECTION */ + new CobolControl(l_MAIN_CONTROL, CobolControl.LabelType.section) { + public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + + return Optional.of(contList[l_MAIN_CONTROL__MAIN_000]); + } + }, + /* MAIN-000 */ + new CobolControl(l_MAIN_CONTROL__MAIN_000, CobolControl.LabelType.label) { + public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + /* AUTODELETE.cbl:49: ACCEPT */ + { + CobolTerminal.acceptCommandLine (f_MD_NAME); + } + /* AUTODELETE.cbl:51: MOVE */ + { + b_OLD_FILE_PATH.fillBytes (32, 256); + } + /* AUTODELETE.cbl:52: STRING */ + { + CobolString.stringInit (f_OLD_FILE_PATH, 0); + CobolString.stringDelimited (0); + CobolString.stringAppend (c_1_old_delete); + CobolString.stringDelimited (CobolConstant.space); + CobolString.stringAppend (f_MD_NAME); + CobolString.stringFinish (); + } + /* AUTODELETE.cbl:55: MOVE */ + { + b_NEW_FILE_PATH.fillBytes (32, 256); + } + /* AUTODELETE.cbl:56: STRING */ + { + CobolString.stringInit (f_NEW_FILE_PATH, 0); + CobolString.stringDelimited (0); + CobolString.stringAppend (c_2_new_delete); + CobolString.stringDelimited (CobolConstant.space); + CobolString.stringAppend (f_MD_NAME); + CobolString.stringFinish (); + } + /* AUTODELETE.cbl:60: IF */ + { + if (((long)f_OLD_FILE_PATH.compareTo (CobolConstant.space) == 0L)) + { + /* AUTODELETE.cbl:60: GO TO */ + { + if(true) return Optional.of(contList[l_MAIN_CONTROL__MAIN_900 ]); + + } + } + } + /* AUTODELETE.cbl:62: OPEN */ + { + CobolRuntimeException.code = 0; + { + h_OLDFILE.open (1, 0, f_OLD_STS); + } + if (CobolRuntimeException.code != 0) + { + /* PERFORM Default Error Handler */ + CobolControl.perform(contList, l_Default_Error_Handler).run(); + } + CobolRuntimeException.code = 0; + { + h_NEWFILE.open (2, 1, f_NEW_STS); + } + if (CobolRuntimeException.code != 0) + { + /* PERFORM Default Error Handler */ + CobolControl.perform(contList, l_Default_Error_Handler).run(); + } + } + + return Optional.of(contList[l_MAIN_CONTROL__MAIN_100]); + } + }, + /* MAIN-100 */ + new CobolControl(l_MAIN_CONTROL__MAIN_100, CobolControl.LabelType.label) { + public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + /* AUTODELETE.cbl:65: PERFORM */ + for (;;) + { + if (((long)(Byte.toUnsignedInt(b_WS_END_OF_FILE.getByte(0)) - (int)89) == 0L)) + break; + { + /* AUTODELETE.cbl:67: READ */ + CobolRuntimeException.code = 0; + { + h_OLDFILE.read (0, f_OLD_STS, 1); + } + if (CobolRuntimeException.code != 0) + { + if (CobolRuntimeException.code == 0x0501) + { + { + /* AUTODELETE.cbl:70: MOVE */ + { + b_WS_END_OF_FILE.setByte(89); + } + } + } + else + { + /* PERFORM Default Error Handler */ + CobolControl.perform(contList, l_Default_Error_Handler).run(); + } + } + else + { + b_OLD_REC.setBytes (b_OLDFILE_record, 50000); + { + /* AUTODELETE.cbl:73: IF */ + { + if ((((long)f_OLD_REC.compareTo (c_3) == 0L) || ((long)f_OLD_REC.compareTo (c_4) == 0L))) + { + /* AUTODELETE.cbl:75: MOVE */ + { + b_WS_IN_NAVI_SECTION.setByte(89); + } + /* AUTODELETE.cbl:76: EXIT */ + { + if(true) continue; + } + } + } + /* AUTODELETE.cbl:78: IF */ + { + if ((((long)f_OLD_REC.compareTo (c_5) == 0L) || ((long)f_OLD_REC.compareTo (c_6) == 0L))) + { + /* AUTODELETE.cbl:80: MOVE */ + { + b_WS_IN_NAVI_SECTION.setByte(78); + } + /* AUTODELETE.cbl:81: EXIT */ + { + if(true) continue; + } + } + } + /* AUTODELETE.cbl:84: IF */ + { + if (((long)(Byte.toUnsignedInt(b_WS_IN_NAVI_SECTION.getByte(0)) - (int)78) == 0L)) + { + /* AUTODELETE.cbl:85: WRITE */ + CobolRuntimeException.code = 0; + { + b_NEW_REC.setBytes (b_OLD_REC, 50000); + h_NEWFILE.write (f_NEW_REC, 2162689, f_NEW_STS); + } + if (CobolRuntimeException.code != 0) + { + /* PERFORM Default Error Handler */ + CobolControl.perform(contList, l_Default_Error_Handler).run(); + } + } + } + } + } + } + } + /* AUTODELETE.cbl:90: CLOSE */ + { + CobolRuntimeException.code = 0; + { + h_NEWFILE.close (0, f_NEW_STS); + } + if (CobolRuntimeException.code != 0) + { + /* PERFORM Default Error Handler */ + CobolControl.perform(contList, l_Default_Error_Handler).run(); + } + } + /* AUTODELETE.cbl:91: CLOSE */ + { + CobolRuntimeException.code = 0; + { + h_OLDFILE.close (0, f_OLD_STS); + } + if (CobolRuntimeException.code != 0) + { + /* PERFORM Default Error Handler */ + CobolControl.perform(contList, l_Default_Error_Handler).run(); + } + } + + return Optional.of(contList[l_MAIN_CONTROL__MAIN_900]); + } + }, + /* MAIN-900 */ + new CobolControl(l_MAIN_CONTROL__MAIN_900, CobolControl.LabelType.label) { + public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + /* AUTODELETE.cbl:94: STOP */ + { + CobolStopRunException.throwException (b_RETURN_CODE.intValue()); + } + + + return Optional.of(CobolControl.pure()); + } + }, + /* Default Error Handler */ + new CobolControl(l_Default_Error_Handler, CobolControl.LabelType.label) { + public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + + if ((CobolFile.errorFile.flag_select_features & CobolFile.COB_SELECT_FILE_STATUS) == 0) { + CobolFile.defaultErrorHandle (); + CobolStopRunException.stopRunAndThrow (1); + } + + return Optional.of(CobolControl.pure()); + } + }, + CobolControl.pure() + }; + public void execEntry(int start) throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { + Optional nextLabel = Optional.of(contList[start]); + while(nextLabel.isPresent()) { + CobolControl section = nextLabel.get(); + nextLabel = section.run(); + } + } + + public static void main(String[] args) + { + CobolUtil.cob_init(args, false); + CobolDecimal.cobInitNumeric(); + new AUTODELETE().AUTODELETE_(0); + CobolStopRunException.stopRun(); + } + + public AUTODELETE() + { + init(); + } + + public void init() + { + try { + /* Data storage */ + + cob_unifunc = null; + + /* PROGRAM-ID : AUTODELETE */ + b_RETURN_CODE = new CobolDataStorage(4); /* RETURN-CODE */ + b_OLDFILE_record = new CobolDataStorage(50000); /* OLDFILE_record */ + b_NEWFILE_record = new CobolDataStorage(50000); /* NEWFILE_record */ + b_OLD_STS = new CobolDataStorage(2); /* OLD-STS */ + b_NEW_STS = new CobolDataStorage(2); /* NEW-STS */ + b_OLD_FILE_PATH = new CobolDataStorage(256); /* OLD-FILE-PATH */ + b_NEW_FILE_PATH = new CobolDataStorage(256); /* NEW-FILE-PATH */ + b_MD_NAME = new CobolDataStorage(250); /* MD-NAME */ + b_WS_END_OF_FILE = new CobolDataStorage(1); /* WS-END-OF-FILE */ + b_WS_IN_NAVI_SECTION = new CobolDataStorage(1); /* WS-IN-NAVI-SECTION */ + b_NEW_REC = b_NEWFILE_record; + b_OLD_REC = b_OLDFILE_record; + + /* End of data storage */ + + + initAttr(); + + /* Fields */ + + /* PROGRAM-ID : AUTODELETE */ + f_OLD_REC = CobolFieldFactory.makeCobolField(50000, b_OLD_REC, a_1); /* OLD-REC */ + f_OLDFILE_record = CobolFieldFactory.makeCobolField(50000, b_OLDFILE_record, a_1); /* OLDFILE_record */ + f_NEW_REC = CobolFieldFactory.makeCobolField(50000, b_NEW_REC, a_1); /* NEW-REC */ + f_NEWFILE_record = CobolFieldFactory.makeCobolField(50000, b_NEWFILE_record, a_1); /* NEWFILE_record */ + f_OLD_STS = CobolFieldFactory.makeCobolField(2, b_OLD_STS, a_1); /* OLD-STS */ + f_NEW_STS = CobolFieldFactory.makeCobolField(2, b_NEW_STS, a_1); /* NEW-STS */ + f_OLD_FILE_PATH = CobolFieldFactory.makeCobolField(256, b_OLD_FILE_PATH, a_1); /* OLD-FILE-PATH */ + f_NEW_FILE_PATH = CobolFieldFactory.makeCobolField(256, b_NEW_FILE_PATH, a_1); /* NEW-FILE-PATH */ + f_MD_NAME = CobolFieldFactory.makeCobolField(250, b_MD_NAME, a_1); /* MD-NAME */ + + /* End of fields */ + + + /* Constants */ + + c_1_old_delete = CobolFieldFactory.makeCobolField(11, str_0_old_delete, a_1); + c_2_new_delete = CobolFieldFactory.makeCobolField(11, str_1_new_delete, a_1); + c_3 = CobolFieldFactory.makeCobolField(18, str_2, a_1); + c_4 = CobolFieldFactory.makeCobolField(18, str_3, a_1); + c_5 = CobolFieldFactory.makeCobolField(16, str_4, a_1); + c_6 = CobolFieldFactory.makeCobolField(16, str_5, a_1); + + } catch(NullPointerException e) { + System.out.println("Error - NullpointerException"); + } catch(IndexOutOfBoundsException e) { + System.out.println("Error - IndexOutOfBoundsException"); + } + } + + private void initAttr() { + /* Attributes */ + + a_1 = new CobolFieldAttribute (33, 0, 0, 0, null); + + } + + /* Data storage */ + + /* PROGRAM-ID : AUTODELETE */ + private CobolDataStorage b_RETURN_CODE; /* RETURN-CODE */ + private CobolDataStorage b_OLDFILE_record; /* OLDFILE_record */ + private CobolDataStorage b_NEWFILE_record; /* NEWFILE_record */ + private CobolDataStorage b_OLD_STS; /* OLD-STS */ + private CobolDataStorage b_NEW_STS; /* NEW-STS */ + private CobolDataStorage b_OLD_FILE_PATH; /* OLD-FILE-PATH */ + private CobolDataStorage b_NEW_FILE_PATH; /* NEW-FILE-PATH */ + private CobolDataStorage b_MD_NAME; /* MD-NAME */ + private CobolDataStorage b_WS_END_OF_FILE; /* WS-END-OF-FILE */ + private CobolDataStorage b_WS_IN_NAVI_SECTION; /* WS-IN-NAVI-SECTION */ + private CobolDataStorage b_NEW_REC; + private CobolDataStorage b_OLD_REC; + + /* End of data storage */ + + + /* Fields */ + + /* PROGRAM-ID : AUTODELETE */ + private AbstractCobolField f_OLD_REC; /* OLD-REC */ + private AbstractCobolField f_OLDFILE_record; /* OLDFILE_record */ + private AbstractCobolField f_NEW_REC; /* NEW-REC */ + private AbstractCobolField f_NEWFILE_record; /* NEWFILE_record */ + private AbstractCobolField f_OLD_STS; /* OLD-STS */ + private AbstractCobolField f_NEW_STS; /* NEW-STS */ + private AbstractCobolField f_OLD_FILE_PATH; /* OLD-FILE-PATH */ + private AbstractCobolField f_NEW_FILE_PATH; /* NEW-FILE-PATH */ + private AbstractCobolField f_MD_NAME; /* MD-NAME */ + + /* End of fields */ + + + private static AbstractCobolField f_native; + + /* Constants */ + + private AbstractCobolField c_6; + private AbstractCobolField c_5; + private AbstractCobolField c_4; + private AbstractCobolField c_3; + private AbstractCobolField c_2_new_delete; + private AbstractCobolField c_1_old_delete; + + /* Attributes */ + + private CobolFieldAttribute a_1; + + + + /* String literals */ + public static final byte[] str_5 = CobolUtil.stringToBytes(""); + public static final byte[] str_4 = CobolUtil.stringToBytes(""); + public static final byte[] str_3 = CobolUtil.stringToBytes(""); + public static final byte[] str_2 = CobolUtil.stringToBytes(""); + public static final byte[] str_1_new_delete = CobolUtil.stringToBytes("new_delete/"); + public static final byte[] str_0_old_delete = CobolUtil.stringToBytes("old_delete/"); + /* File OLDFILE */ + private CobolFile h_OLDFILE = null; + private byte[] h_OLDFILE_status = new byte[4]; + /* File NEWFILE */ + private CobolFile h_NEWFILE = null; + private byte[] h_NEWFILE_status = new byte[4]; + + /* Sections and Labels */ + private final static int l_AUTODELETE = 1; + private final static int l_MAIN_CONTROL = 2; + private final static int l_MAIN_CONTROL__MAIN_000 = 3; + private final static int l_MAIN_CONTROL__MAIN_100 = 4; + private final static int l_MAIN_CONTROL__MAIN_900 = 5; + private final static int l_Default_Error_Handler = 6; + +} diff --git a/automanual/AUTODELETE_2.cbl b/automanual/AUTODELETE_2.cbl new file mode 100644 index 0000000..8492150 --- /dev/null +++ b/automanual/AUTODELETE_2.cbl @@ -0,0 +1,95 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. AUTODELETE_2. + AUTHOR. M SHIMADA. + DATE-WRITTEN. 2024-09-04. + ****************************************************************** + ENVIRONMENT DIVISION. + ****************************************************************** + *-------------------------------------* + INPUT-OUTPUT SECTION. + *-------------------------------------* + FILE-CONTROL. + SELECT OLDFILE ASSIGN TO DYNAMIC + OLD-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS OLD-STS. + SELECT NEWFILE ASSIGN TO DYNAMIC + NEW-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS NEW-STS. + ****************************************************************** + DATA DIVISION. + ****************************************************************** + *-------------------------------------* + FILE SECTION. + *-------------------------------------* + FD OLDFILE. + 01 OLD-REC PIC X(50000). + FD NEWFILE. + 01 NEW-REC PIC X(50000). + *-------------------------------------* + WORKING-STORAGE SECTION. + *-------------------------------------* + 01 OLD-STS PIC X(02). + 01 NEW-STS PIC X(02). + 01 OLD-FILE-PATH PIC X(256). + 01 NEW-FILE-PATH PIC X(256). + 01 MD-NAME PIC X(250). + 01 WS-END-OF-FILE PIC X VALUE 'N'. + 01 WS-IN-NAVI-SECTION PIC X VALUE 'N'. + 01 F-SKIP PIC 9(03). + 01 END-FLG PIC 9(01). + ****************************************************************** + PROCEDURE DIVISION. + ****************************************************************** + *-------------------------------------* + MAIN-CONTROL SECTION. + *-------------------------------------* + MAIN-000. + *実行コマンドの引数からファイル名を取得する + ACCEPT MD-NAME FROM COMMAND-LINE. + *変換前後のファイルをフォルダ分けするためディレクトリを追加する + MOVE SPACE TO OLD-FILE-PATH. + STRING "old_delete/" DELIMITED BY SIZE + MD-NAME DELIMITED BY SPACE + INTO OLD-FILE-PATH. + MOVE SPACE TO NEW-FILE-PATH. + STRING "new_delete/" DELIMITED BY SIZE + MD-NAME DELIMITED BY SPACE + INTO NEW-FILE-PATH. + + IF OLD-FILE-PATH = SPACE GO TO MAIN-900. + + OPEN INPUT OLDFILE + OUTPUT NEWFILE. + MAIN-100. + *からの記述を削除する + PERFORM UNTIL WS-END-OF-FILE = 'Y' + READ OLDFILE INTO OLD-REC + AT END + MOVE 'Y' TO WS-END-OF-FILE + NOT AT END + IF OLD-REC = "" + MOVE 'Y' TO WS-IN-NAVI-SECTION + ELSE IF OLD-REC = "" + MOVE 'N' TO WS-IN-NAVI-SECTION + ELSE IF WS-IN-NAVI-SECTION = 'N' + *「ページトップへ」を削除 + IF F-SKIP = 0 + INSPECT OLD-REC TALLYING F-SKIP FOR + ALL X"E3839AE383BCE382B8E38388E38383E38397E381B8" + IF F-SKIP > 0 + MOVE 'Y' TO WS-IN-NAVI-SECTION + ELSE + WRITE NEW-REC FROM OLD-REC + END-IF + END-IF + END-IF + END-READ + END-PERFORM. + + CLOSE NEWFILE. + CLOSE OLDFILE. + + MAIN-900. + STOP RUN. diff --git a/automanual/AUTOMANUAL.cbl b/automanual/AUTOMANUAL.cbl new file mode 100644 index 0000000..555cae4 --- /dev/null +++ b/automanual/AUTOMANUAL.cbl @@ -0,0 +1,177 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. AUTOMANUAL. + AUTHOR. M YOKOGAWA. + DATE-WRITTEN. 2024-09-04. + ****************************************************************** + ENVIRONMENT DIVISION. + ****************************************************************** + *-------------------------------------* + INPUT-OUTPUT SECTION. + *-------------------------------------* + FILE-CONTROL. + SELECT OLDFILE ASSIGN TO DYNAMIC + OLD-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS OLD-STS. + SELECT NEWFILE ASSIGN TO DYNAMIC + NEW-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS NEW-STS. + ****************************************************************** + DATA DIVISION. + ****************************************************************** + *-------------------------------------* + FILE SECTION. + *-------------------------------------* + FD OLDFILE. + 01 OLD-REC PIC X(50000). + FD NEWFILE. + 01 NEW-REC PIC X(50000). + *-------------------------------------* + WORKING-STORAGE SECTION. + *-------------------------------------* + 01 OLD-STS PIC X(02). + 01 NEW-STS PIC X(02). + 01 OLD-FILE-PATH PIC X(256). + 01 NEW-FILE-PATH PIC X(256). + 01 WRK-STRING PIC X(250). + 01 MD-CURRENT PIC X(250). + 01 MD-PREVIOUS PIC X(250). + 01 MD-NEXT PIC X(250). + 01 END-FLG PIC 9(01). + ****************************************************************** + PROCEDURE DIVISION. + ****************************************************************** + *-------------------------------------* + MAIN-CONTROL SECTION. + *-------------------------------------* + MAIN-000. + *実行コマンドの引数を受け取る + *3分割してそれぞれのファイル名を取得する + ACCEPT WRK-STRING FROM COMMAND-LINE. + UNSTRING WRK-STRING DELIMITED BY SPACE + INTO MD-CURRENT + MD-PREVIOUS + MD-NEXT. + *前へ/次へに該当するファイルがない場合はスペースを代入する + *リンクは挿入しないで文字だけの表示とする + IF MD-PREVIOUS = "none" + MOVE SPACE TO MD-PREVIOUS. + IF MD-NEXT = "none" + MOVE SPACE TO MD-NEXT. + *変換前後のファイルをフォルダ分けするためディレクトリを追加する + MOVE SPACE TO OLD-FILE-PATH. + STRING "old/" DELIMITED BY SIZE + MD-CURRENT DELIMITED BY SPACE + INTO OLD-FILE-PATH. + MOVE SPACE TO NEW-FILE-PATH. + STRING "new/" DELIMITED BY SIZE + MD-CURRENT DELIMITED BY SPACE + INTO NEW-FILE-PATH. + + IF OLD-FILE-PATH = SPACE GO TO MAIN-900. + + OPEN INPUT OLDFILE + OUTPUT NEWFILE. + IF MD-CURRENT NOT = "TOC.md" + *1行目 + *を挿入する + WRITE NEW-REC FROM "" + *2行目 + *前へ/次へを挿入する※文字化け防止のため16進数で挿入 + *前後ファイルのリンクも挿入する + MOVE SPACE TO NEW-REC + *引数が三つともある場合 + IF MD-PREVIOUS NOT = SPACE AND MD-NEXT NOT = SPACE + STRING "[" DELIMITED BY SIZE + X"E5898DE381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-PREVIOUS DELIMITED BY SPACE + ")/[" DELIMITED BY SIZE + X"E79BAEE6ACA1" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + "https://opensourcecobol." + DELIMITED BY SPACE + "github.io/markdown/TOC.html" + DELIMITED BY SPACE + ")/[" DELIMITED BY SIZE + X"E6ACA1E381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-NEXT DELIMITED BY SPACE + ")" DELIMITED BY SIZE + INTO NEW-REC + WRITE NEW-REC + *「前へ」がnoneの場合 + IF MD-PREVIOUS = SPACE + STRING X"E5898DE381B8" DELIMITED BY SIZE + "/[" DELIMITED BY SIZE + X"E79BAEE6ACA1" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + "https://opensourcecobol." + DELIMITED BY SPACE + "github.io/markdown/TOC.html" + DELIMITED BY SPACE + ")/[" DELIMITED BY SIZE + X"E6ACA1E381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-NEXT DELIMITED BY SPACE + ")" DELIMITED BY SIZE + INTO NEW-REC + WRITE NEW-REC + *「次へ」がnoneの場合 + IF MD-NEXT = SPACE + STRING "[" DELIMITED BY SIZE + X"E5898DE381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-PREVIOUS DELIMITED BY SPACE + ")/[" DELIMITED BY SIZE + X"E79BAEE6ACA1" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + "https://opensourcecobol." + DELIMITED BY SPACE + "github.io/markdown/TOC.html" + DELIMITED BY SPACE + ")/" DELIMITED BY SIZE + X"E6ACA1E381B8" DELIMITED BY SIZE + INTO NEW-REC + WRITE NEW-REC + *3行目 + *を挿入する + WRITE NEW-REC FROM "" + END-IF. + *OLDFILEの内容をNEWFILEに書き込み + PERFORM UNTIL (OLD-STS NOT = ZERO) + MOVE SPACE TO OLD-REC + READ OLDFILE NEXT + AT END + CONTINUE + NOT AT END + MOVE OLD-REC TO NEW-REC + WRITE NEW-REC + END-READ + END-PERFORM. + *最後から3行目 + *を挿入する + WRITE NEW-REC FROM "". + + *最後から2行目「ページトップへ」を挿入する + MOVE SPACE TO NEW-REC + WRITE NEW-REC + MOVE SPACE TO NEW-REC + STRING "[" DELIMITED BY SIZE + X"E3839AE383BCE382B8E38388E38383E38397E381B8" + DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-CURRENT DELIMITED BY SPACE + ")" DELIMITED BY SIZE + INTO NEW-REC + WRITE NEW-REC. + *最終行 + *を挿入する + WRITE NEW-REC FROM "". + + * WRITE NEW-REC. + CLOSE NEWFILE. + CLOSE OLDFILE. + MAIN-900. + STOP RUN. diff --git a/automanual/AUTOMANUAL_original.cbl b/automanual/AUTOMANUAL_original.cbl new file mode 100644 index 0000000..d03553d --- /dev/null +++ b/automanual/AUTOMANUAL_original.cbl @@ -0,0 +1,129 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. AUTOMANUAL_original. + AUTHOR. M SHIMADA. + DATE-WRITTEN. 2024-07-26. + ****************************************************************** + ENVIRONMENT DIVISION. + ****************************************************************** + *-------------------------------------* + INPUT-OUTPUT SECTION. + *-------------------------------------* + FILE-CONTROL. + SELECT OLDFILE ASSIGN TO DYNAMIC + OLD-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS OLD-STS. + SELECT NEWFILE ASSIGN TO DYNAMIC + NEW-FILE-PATH + ORGANIZATION IS LINE SEQUENTIAL + FILE STATUS IS NEW-STS. + ****************************************************************** + DATA DIVISION. + ****************************************************************** + *-------------------------------------* + FILE SECTION. + *-------------------------------------* + FD OLDFILE. + 01 OLD-REC PIC X(50000). + FD NEWFILE. + 01 NEW-REC PIC X(50000). + *-------------------------------------* + WORKING-STORAGE SECTION. + *-------------------------------------* + 01 OLD-STS PIC X(02). + 01 NEW-STS PIC X(02). + 01 OLD-FILE-PATH PIC X(256). + 01 NEW-FILE-PATH PIC X(256). + 01 WRK-STRING PIC X(250). + 01 MD-CURRENT PIC X(250). + 01 MD-PREVIOUS PIC X(250). + 01 MD-NEXT PIC X(250). + 01 END-FLG PIC 9(01). + ****************************************************************** + PROCEDURE DIVISION. + ****************************************************************** + *-------------------------------------* + MAIN-CONTROL SECTION. + *-------------------------------------* + MAIN-000. + *実行コマンドの引数を受け取る + *3分割してそれぞれのファイル名を取得する + ACCEPT WRK-STRING FROM COMMAND-LINE. + UNSTRING WRK-STRING DELIMITED BY SPACE + INTO MD-CURRENT + MD-PREVIOUS + MD-NEXT. + *前へ/次へに該当するファイルがない場合はスペースを代入する + *リンクは挿入しないで文字だけの表示とする + IF MD-PREVIOUS = "none" + MOVE SPACE TO MD-PREVIOUS. + IF MD-NEXT = "none" + MOVE SPACE TO MD-NEXT. + *変換前後のファイルをフォルダ分けするためディレクトリを追加する + MOVE SPACE TO OLD-FILE-PATH. + STRING "old/" DELIMITED BY SIZE + MD-CURRENT DELIMITED BY SPACE + INTO OLD-FILE-PATH. + MOVE SPACE TO NEW-FILE-PATH. + STRING "new/" DELIMITED BY SIZE + MD-CURRENT DELIMITED BY SPACE + INTO NEW-FILE-PATH. + + IF OLD-FILE-PATH = space GO TO MAIN-900. + + OPEN INPUT OLDFILE + OUTPUT NEWFILE. + *1行目 + *を挿入する + WRITE NEW-REC FROM "". + *2行目 + *前へ/次へを挿入する※文字化け防止のため16進数で挿入 + *前後ファイルのリンクも挿入する + MOVE SPACE TO NEW-REC. + IF MD-PREVIOUS NOT = SPACE AND MD-NEXT NOT = SPACE + STRING "[" DELIMITED BY SIZE + X"E5898DE381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-PREVIOUS DELIMITED BY SPACE + ")/[" DELIMITED BY SIZE + X"E6ACA1E381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-NEXT DELIMITED BY SPACE + ")" DELIMITED BY SIZE + INTO NEW-REC + WRITE NEW-REC. + IF MD-PREVIOUS = SPACE + STRING X"E5898DE381B8" DELIMITED BY SIZE + "/[" DELIMITED BY SIZE + X"E6ACA1E381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-NEXT DELIMITED BY SPACE + ")" DELIMITED BY SIZE + INTO NEW-REC + WRITE NEW-REC. + IF MD-NEXT = SPACE + STRING "[" DELIMITED BY SIZE + X"E5898DE381B8" DELIMITED BY SIZE + "](" DELIMITED BY SIZE + MD-PREVIOUS DELIMITED BY SPACE + ")/" DELIMITED BY SIZE + X"E6ACA1E381B8" DELIMITED BY SIZE + INTO NEW-REC + WRITE NEW-REC. + *3行目 + *を挿入する + WRITE NEW-REC FROM "". + PERFORM UNTIL (OLD-STS NOT = ZERO) + MOVE SPACE TO OLD-REC + READ OLDFILE NEXT + AT END + CONTINUE + NOT AT END + MOVE OLD-REC TO NEW-REC + WRITE NEW-REC + END-READ + END-PERFORM. + CLOSE NEWFILE + CLOSE OLDFILE. + MAIN-900. + STOP RUN. diff --git a/automanual/cob4j_convert.bat b/automanual/cob4j_convert.bat new file mode 100755 index 0000000..27b98e1 --- /dev/null +++ b/automanual/cob4j_convert.bat @@ -0,0 +1,151 @@ +java AUTOMANUAL 1-1.md none 1-2-1.md +java AUTOMANUAL 1-2-1.md 1-1.md 1-2-2.md +java AUTOMANUAL 1-2-2.md 1-2-1.md 1-2-3.md +java AUTOMANUAL 1-2-3.md 1-2-2.md 1-2-4.md +java AUTOMANUAL 1-2-4.md 1-2-3.md 1-2-5.md +java AUTOMANUAL 1-2-5.md 1-2-4.md 1-2-6.md +java AUTOMANUAL 1-2-6.md 1-2-5.md 1-2-7.md +java AUTOMANUAL 1-2-7.md 1-2-6.md 1-2-8.md +java AUTOMANUAL 1-2-8.md 1-2-7.md 1-3.md +java AUTOMANUAL 1-3.md 1-2-8.md 1-4.md +java AUTOMANUAL 1-4.md 1-3.md 1-5.md +java AUTOMANUAL 1-5.md 1-4.md 1-6.md +java AUTOMANUAL 1-6.md 1-5.md 1-7-1.md +java AUTOMANUAL 1-7-1.md 1-6.md 1-7-2.md +java AUTOMANUAL 1-7-2.md 1-7-1.md 1-7-3.md +java AUTOMANUAL 1-7-3.md 1-7-2.md 1-8.md +java AUTOMANUAL 1-8.md 1-7-3.md 1-9.md +java AUTOMANUAL 1-9.md 1-8.md 1-10.md +java AUTOMANUAL 1-10.md 1-9.md 2-1.md +java AUTOMANUAL 2-1.md 1-10.md 2-2.md +java AUTOMANUAL 2-2.md 2-1.md 3.md +java AUTOMANUAL 3.md 2-2.md 4-1-1.md +java AUTOMANUAL 4-1-1.md 3.md 4-1-2.md +java AUTOMANUAL 4-1-2.md 4-1-1.md 4-1-3.md +java AUTOMANUAL 4-1-3.md 4-1-2.md 4-1-4.md +java AUTOMANUAL 4-1-4.md 4-1-3.md 4-2-1-1.md +java AUTOMANUAL 4-2-1-1.md 4-1-4.md 4-2-1-2.md +java AUTOMANUAL 4-2-1-2.md 4-2-1-1.md 4-2-1-3.md +java AUTOMANUAL 4-2-1-3.md 4-2-1-2.md 4-2-2.md +java AUTOMANUAL 4-2-2.md 4-2-1-3.md 5-1.md +java AUTOMANUAL 5-1.md 4-2-2.md 5-2.md +java AUTOMANUAL 5-2.md 5-1.md 5-3.md +java AUTOMANUAL 5-3.md 5-2.md 5-4.md +java AUTOMANUAL 5-4.md 5-3.md 5-5.md +java AUTOMANUAL 5-5.md 5-4.md 5-6.md +java AUTOMANUAL 5-6.md 5-5.md 6-1-1.md +java AUTOMANUAL 6-1-1.md 5-6.md 6-1-2.md +java AUTOMANUAL 6-1-2.md 6-1-1.md 6-1-3.md +java AUTOMANUAL 6-1-3.md 6-1-2.md 6-1-4-1.md +java AUTOMANUAL 6-1-4-1.md 6-1-3.md 6-1-4-2.md +java AUTOMANUAL 6-1-4-2.md 6-1-4-1.md 6-1-5.md +java AUTOMANUAL 6-1-5.md 6-1-4-2.md 6-1-6.md +java AUTOMANUAL 6-1-6.md 6-1-5.md 6-1-7.md +java AUTOMANUAL 6-1-7.md 6-1-6.md 6-1-8-1.md +java AUTOMANUAL 6-1-8-1.md 6-1-7.md 6-1-8-2.md +java AUTOMANUAL 6-1-8-2.md 6-1-8-1.md 6-2.md +java AUTOMANUAL 6-2.md 6-1-8-2.md 6-3.md +java AUTOMANUAL 6-3.md 6-2.md 6-4-1.md +java AUTOMANUAL 6-4-1.md 6-3.md 6-4-2.md +java AUTOMANUAL 6-4-2.md 6-4-1.md 6-4-3.md +java AUTOMANUAL 6-4-3.md 6-4-2.md 6-4-4.md +java AUTOMANUAL 6-4-4.md 6-4-3.md 6-4-5.md +java AUTOMANUAL 6-4-5.md 6-4-4.md 6-4-6.md +java AUTOMANUAL 6-4-6.md 6-4-5.md 6-4-7.md +java AUTOMANUAL 6-4-7.md 6-4-6.md 6-5-1.md +java AUTOMANUAL 6-5-1.md 6-4-7.md 6-5-2.md +java AUTOMANUAL 6-5-2.md 6-5-1.md 6-5-3.md +java AUTOMANUAL 6-5-3.md 6-5-2.md 6-6.md +java AUTOMANUAL 6-6.md 6-5-3.md 6-7.md +java AUTOMANUAL 6-7.md 6-6.md 6-8-1.md +java AUTOMANUAL 6-8-1.md 6-7.md 6-8-2.md +java AUTOMANUAL 6-8-2.md 6-8-1.md 6-9.md +java AUTOMANUAL 6-9.md 6-8-2.md 6-10.md +java AUTOMANUAL 6-10.md 6-9.md 6-11.md +java AUTOMANUAL 6-11.md 6-10.md 6-12.md +java AUTOMANUAL 6-12.md 6-11.md 6-13-1.md +java AUTOMANUAL 6-13-1.md 6-12.md 6-13-2.md +java AUTOMANUAL 6-13-2.md 6-13-1.md 6-14-1.md +java AUTOMANUAL 6-14-1.md 6-13-2.md 6-14-2.md +java AUTOMANUAL 6-14-2.md 6-14-1.md 6-14-3.md +java AUTOMANUAL 6-14-3.md 6-14-2.md 6-14-4.md +java AUTOMANUAL 6-14-4.md 6-14-3.md 6-14-5.md +java AUTOMANUAL 6-14-5.md 6-14-4.md 6-15-1.md +java AUTOMANUAL 6-15-1.md 6-14-5.md 6-15-2.md +java AUTOMANUAL 6-15-2.md 6-15-1.md 6-15-3.md +java AUTOMANUAL 6-15-3.md 6-15-2.md 6-15-4.md +java AUTOMANUAL 6-15-4.md 6-15-3.md 6-15-5.md +java AUTOMANUAL 6-15-5.md 6-15-4.md 6-16.md +java AUTOMANUAL 6-16.md 6-15-5.md 6-17.md +java AUTOMANUAL 6-17.md 6-16.md 6-18.md +java AUTOMANUAL 6-18.md 6-17.md 6-19.md +java AUTOMANUAL 6-19.md 6-18.md 6-20.md +java AUTOMANUAL 6-20.md 6-19.md 6-21.md +java AUTOMANUAL 6-21.md 6-20.md 6-22-1.md +java AUTOMANUAL 6-22-1.md 6-21.md 6-22-2.md +java AUTOMANUAL 6-22-2.md 6-22-1.md 6-23.md +java AUTOMANUAL 6-23.md 6-22-2.md 6-24.md +java AUTOMANUAL 6-24.md 6-23.md 6-25.md +java AUTOMANUAL 6-25.md 6-24.md 6-26.md +java AUTOMANUAL 6-26.md 6-25.md 6-27.md +java AUTOMANUAL 6-27.md 6-26.md 6-28-1.md +java AUTOMANUAL 6-28-1.md 6-27.md 6-28-2.md +java AUTOMANUAL 6-28-2.md 6-28-1.md 6-29-1.md +java AUTOMANUAL 6-29-1.md 6-28-2.md 6-29-2.md +java AUTOMANUAL 6-29-2.md 6-29-1.md 6-30.md +java AUTOMANUAL 6-30.md 6-29-2.md 6-31.md +java AUTOMANUAL 6-31.md 6-30.md 6-32-1.md +java AUTOMANUAL 6-32-1.md 6-31.md 6-32-2.md +java AUTOMANUAL 6-32-2.md 6-32-1.md 6-33-1.md +java AUTOMANUAL 6-33-1.md 6-32-2.md 6-33-2.md +java AUTOMANUAL 6-33-2.md 6-33-1.md 6-34.md +java AUTOMANUAL 6-34.md 6-33-2.md 6-35.md +java AUTOMANUAL 6-35.md 6-34.md 6-36.md +java AUTOMANUAL 6-36.md 6-35.md 6-37.md +java AUTOMANUAL 6-37.md 6-36.md 6-38-1.md +java AUTOMANUAL 6-38-1.md 6-37.md 6-38-2.md +java AUTOMANUAL 6-38-2.md 6-38-1.md 6-39-1.md +java AUTOMANUAL 6-39-1.md 6-38-2.md 6-39-2.md +java AUTOMANUAL 6-39-2.md 6-39-1.md 6-39-3.md +java AUTOMANUAL 6-39-3.md 6-39-2.md 6-39-4.md +java AUTOMANUAL 6-39-4.md 6-39-3.md 6-39-5.md +java AUTOMANUAL 6-39-5.md 6-39-4.md 6-39-6.md +java AUTOMANUAL 6-39-6.md 6-39-5.md 6-39-7.md +java AUTOMANUAL 6-39-7.md 6-39-6.md 6-40-1.md +java AUTOMANUAL 6-40-1.md 6-39-7.md 6-40-2.md +java AUTOMANUAL 6-40-2.md 6-40-1.md 6-41.md +java AUTOMANUAL 6-41.md 6-40-2.md 6-42.md +java AUTOMANUAL 6-42.md 6-41.md 6-43.md +java AUTOMANUAL 6-43.md 6-42.md 6-44-1.md +java AUTOMANUAL 6-44-1.md 6-43.md 6-44-2.md +java AUTOMANUAL 6-44-2.md 6-44-1.md 6-44-3.md +java AUTOMANUAL 6-44-3.md 6-44-2.md 6-45.md +java AUTOMANUAL 6-45.md 6-44-3.md 6-46.md +java AUTOMANUAL 6-46.md 6-45.md 6-47.md +java AUTOMANUAL 6-47.md 6-46.md 6-48.md +java AUTOMANUAL 6-48.md 6-47.md 6-49.md +java AUTOMANUAL 6-49.md 6-48.md 6-50.md +java AUTOMANUAL 6-50.md 6-49.md 7-1.md +java AUTOMANUAL 7-1.md 6-50.md 7-2.md +java AUTOMANUAL 7-2.md 7-1.md 7-3-1.md +java AUTOMANUAL 7-3-1.md 7-2.md 7-3-2.md +java AUTOMANUAL 7-3-2.md 7-3-1.md 7-4.md +java AUTOMANUAL 7-4.md 7-3-2.md 8-1-1.md +java AUTOMANUAL 8-1-1.md 7-4.md 8-1-2.md +java AUTOMANUAL 8-1-2.md 8-1-1.md 8-1-3.md +java AUTOMANUAL 8-1-3.md 8-1-2.md 8-1-4.md +java AUTOMANUAL 8-1-4.md 8-1-3.md 8-1-5.md +java AUTOMANUAL 8-1-5.md 8-1-4.md 8-1-6.md +java AUTOMANUAL 8-1-6.md 8-1-5.md 8-1-7.md +java AUTOMANUAL 8-1-7.md 8-1-6.md 8-1-8.md +java AUTOMANUAL 8-1-8.md 8-1-7.md 8-1-9.md +java AUTOMANUAL 8-1-9.md 8-1-8.md 8-2-1.md +java AUTOMANUAL 8-2-1.md 8-1-9.md 8-2-2.md +java AUTOMANUAL 8-2-2.md 8-2-1.md 8-2-3.md +java AUTOMANUAL 8-2-3.md 8-2-2.md 8-2-4.md +java AUTOMANUAL 8-2-4.md 8-2-3.md 8-3-1.md +java AUTOMANUAL 8-3-1.md 8-2-4.md 9-1.md +java AUTOMANUAL 9-1.md 8-3-1.md 9-2.md +java AUTOMANUAL 9-2.md 9-1.md credit.md +java AUTOMANUAL credit.md 9-2.md none +java AUTOMANUAL TOC.md none none diff --git a/automanual/cob4j_convert2.bat b/automanual/cob4j_convert2.bat new file mode 100755 index 0000000..dbcb856 --- /dev/null +++ b/automanual/cob4j_convert2.bat @@ -0,0 +1,151 @@ +java AUTODELETE 1-1.md +java AUTODELETE 1-2-1.md +java AUTODELETE 1-2-2.md +java AUTODELETE 1-2-3.md +java AUTODELETE 1-2-4.md +java AUTODELETE 1-2-5.md +java AUTODELETE 1-2-6.md +java AUTODELETE 1-2-7.md +java AUTODELETE 1-2-8.md +java AUTODELETE 1-3.md +java AUTODELETE 1-4.md +java AUTODELETE 1-5.md +java AUTODELETE 1-6.md +java AUTODELETE 1-7-1.md +java AUTODELETE 1-7-2.md +java AUTODELETE 1-7-3.md +java AUTODELETE 1-8.md +java AUTODELETE 1-9.md +java AUTODELETE 1-10.md +java AUTODELETE 2-1.md +java AUTODELETE 2-2.md +java AUTODELETE 3.md +java AUTODELETE 4-1-1.md +java AUTODELETE 4-1-2.md +java AUTODELETE 4-1-3.md +java AUTODELETE 4-1-4.md +java AUTODELETE 4-2-1-1.md +java AUTODELETE 4-2-1-2.md +java AUTODELETE 4-2-1-3.md +java AUTODELETE 4-2-2.md +java AUTODELETE 5-1.md +java AUTODELETE 5-2.md +java AUTODELETE 5-3.md +java AUTODELETE 5-4.md +java AUTODELETE 5-5.md +java AUTODELETE 5-6.md +java AUTODELETE 6-1-1.md +java AUTODELETE 6-1-2.md +java AUTODELETE 6-1-3.md +java AUTODELETE 6-1-4-1.md +java AUTODELETE 6-1-4-2.md +java AUTODELETE 6-1-5.md +java AUTODELETE 6-1-6.md +java AUTODELETE 6-1-7.md +java AUTODELETE 6-1-8-1.md +java AUTODELETE 6-1-8-2.md +java AUTODELETE 6-2.md +java AUTODELETE 6-3.md +java AUTODELETE 6-4-1.md +java AUTODELETE 6-4-2.md +java AUTODELETE 6-4-3.md +java AUTODELETE 6-4-4.md +java AUTODELETE 6-4-5.md +java AUTODELETE 6-4-6.md +java AUTODELETE 6-4-7.md +java AUTODELETE 6-5-1.md +java AUTODELETE 6-5-2.md +java AUTODELETE 6-5-3.md +java AUTODELETE 6-6.md +java AUTODELETE 6-7.md +java AUTODELETE 6-8-1.md +java AUTODELETE 6-8-2.md +java AUTODELETE 6-9.md +java AUTODELETE 6-10.md +java AUTODELETE 6-11.md +java AUTODELETE 6-12.md +java AUTODELETE 6-13-1.md +java AUTODELETE 6-13-2.md +java AUTODELETE 6-14-1.md +java AUTODELETE 6-14-2.md +java AUTODELETE 6-14-3.md +java AUTODELETE 6-14-4.md +java AUTODELETE 6-14-5.md +java AUTODELETE 6-15-1.md +java AUTODELETE 6-15-2.md +java AUTODELETE 6-15-3.md +java AUTODELETE 6-15-4.md +java AUTODELETE 6-15-5.md +java AUTODELETE 6-16.md +java AUTODELETE 6-17.md +java AUTODELETE 6-18.md +java AUTODELETE 6-19.md +java AUTODELETE 6-20.md +java AUTODELETE 6-21.md +java AUTODELETE 6-22-1.md +java AUTODELETE 6-22-2.md +java AUTODELETE 6-23.md +java AUTODELETE 6-24.md +java AUTODELETE 6-25.md +java AUTODELETE 6-26.md +java AUTODELETE 6-27.md +java AUTODELETE 6-28-1.md +java AUTODELETE 6-28-2.md +java AUTODELETE 6-29-1.md +java AUTODELETE 6-29-2.md +java AUTODELETE 6-30.md +java AUTODELETE 6-31.md +java AUTODELETE 6-32-1.md +java AUTODELETE 6-32-2.md +java AUTODELETE 6-33-1.md +java AUTODELETE 6-33-2.md +java AUTODELETE 6-34.md +java AUTODELETE 6-35.md +java AUTODELETE 6-36.md +java AUTODELETE 6-37.md +java AUTODELETE 6-38-1.md +java AUTODELETE 6-38-2.md +java AUTODELETE 6-39-1.md +java AUTODELETE 6-39-2.md +java AUTODELETE 6-39-3.md +java AUTODELETE 6-39-4.md +java AUTODELETE 6-39-5.md +java AUTODELETE 6-39-6.md +java AUTODELETE 6-39-7.md +java AUTODELETE 6-40-1.md +java AUTODELETE 6-40-2.md +java AUTODELETE 6-41.md +java AUTODELETE 6-42.md +java AUTODELETE 6-43.md +java AUTODELETE 6-44-1.md +java AUTODELETE 6-44-2.md +java AUTODELETE 6-44-3.md +java AUTODELETE 6-45.md +java AUTODELETE 6-46.md +java AUTODELETE 6-47.md +java AUTODELETE 6-48.md +java AUTODELETE 6-49.md +java AUTODELETE 6-50.md +java AUTODELETE 7-1.md +java AUTODELETE 7-2.md +java AUTODELETE 7-3-1.md +java AUTODELETE 7-3-2.md +java AUTODELETE 7-4.md +java AUTODELETE 8-1-1.md +java AUTODELETE 8-1-2.md +java AUTODELETE 8-1-3.md +java AUTODELETE 8-1-4.md +java AUTODELETE 8-1-5.md +java AUTODELETE 8-1-6.md +java AUTODELETE 8-1-7.md +java AUTODELETE 8-1-8.md +java AUTODELETE 8-1-9.md +java AUTODELETE 8-2-1.md +java AUTODELETE 8-2-2.md +java AUTODELETE 8-2-3.md +java AUTODELETE 8-2-4.md +java AUTODELETE 8-3-1.md +java AUTODELETE 9-1.md +java AUTODELETE 9-2.md +java AUTODELETE credit.md +java AUTODELETE TOC.md diff --git a/automanual/new/1-1.md b/automanual/new/1-1.md new file mode 100644 index 0000000..177417c --- /dev/null +++ b/automanual/new/1-1.md @@ -0,0 +1,22 @@ + +前へ/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-1.md) + +# 1. まえがき + +## 1.1. opensource COBOLとは + +このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 + +opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 + +opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 + +Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 + +--- +`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 + + + +[ページトップへ](1-1.md) + diff --git a/automanual/new/1-10.md b/automanual/new/1-10.md new file mode 100644 index 0000000..7251f33 --- /dev/null +++ b/automanual/new/1-10.md @@ -0,0 +1,27 @@ + +[前へ](1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-1.md) + + + +[ページトップへ](1-10.md) + +## 1.10. LENGTH OFの使い方 + +オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 + +``` +01 Demo-Identifier PIC X(27). *> This is a 27-character data-item +. +. +. +DISPLAY LENGTH OF “This is a LENGTH OF Example” +DISPLAY LENGTH OF Demo-Identifier +DISPLAY 27 +``` + +定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 + +1. DISPLAY文の定数の代わりとして +2. WRITE文またはRELEASE文のFROM句の一部として +3. PERFORM文のTIMES句の一部として + diff --git a/automanual/new/1-2-1.md b/automanual/new/1-2-1.md new file mode 100644 index 0000000..39fd86a --- /dev/null +++ b/automanual/new/1-2-1.md @@ -0,0 +1,19 @@ + +[前へ](1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-2.md) + +## 1.2. COBOL/opensource COBOLの重要機能 + +### 1.2.1. COBOLプログラムの構文 + +COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 + +部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 + +このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 + +4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 + + + +[ページトップへ](1-2-1.md) + diff --git a/automanual/new/1-2-2.md b/automanual/new/1-2-2.md new file mode 100644 index 0000000..c0fb905 --- /dev/null +++ b/automanual/new/1-2-2.md @@ -0,0 +1,13 @@ + +[前へ](1-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-3.md) + +### 1.2.2. コピーブック + +「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 + +現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 + + + +[ページトップへ](1-2-2.md) + diff --git a/automanual/new/1-2-3.md b/automanual/new/1-2-3.md new file mode 100644 index 0000000..814d049 --- /dev/null +++ b/automanual/new/1-2-3.md @@ -0,0 +1,11 @@ + +[前へ](1-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-4.md) + +### 1.2.3. 構造化データ + +COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 + + + +[ページトップへ](1-2-3.md) + diff --git a/automanual/new/1-2-4.md b/automanual/new/1-2-4.md new file mode 100644 index 0000000..696958e --- /dev/null +++ b/automanual/new/1-2-4.md @@ -0,0 +1,22 @@ + +[前へ](1-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-5.md) + +### 1.2.4. ファイル + +COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 + +||| +|:---|:---| +|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| +ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![!\[alt text\](Image/1-0-1.png)](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![!\[alt text\](Image/1-0-2.png)](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| + +すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 + +データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 + + + +[ページトップへ](1-2-4.md) + diff --git a/automanual/new/1-2-5.md b/automanual/new/1-2-5.md new file mode 100644 index 0000000..9fd16ba --- /dev/null +++ b/automanual/new/1-2-5.md @@ -0,0 +1,15 @@ + +[前へ](1-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-6.md) + +### 1.2.5. 表操作 + +他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 + +1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 + +2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 + + + +[ページトップへ](1-2-5.md) + diff --git a/automanual/new/1-2-6.md b/automanual/new/1-2-6.md new file mode 100644 index 0000000..0c17857 --- /dev/null +++ b/automanual/new/1-2-6.md @@ -0,0 +1,14 @@ + +[前へ](1-2-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-7.md) +### 1.2.6. データの並び替えと結合 + +COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 + +表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 + +同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 + + + +[ページトップへ](1-2-6.md) + diff --git a/automanual/new/1-2-7.md b/automanual/new/1-2-7.md new file mode 100644 index 0000000..3cfc417 --- /dev/null +++ b/automanual/new/1-2-7.md @@ -0,0 +1,31 @@ + +[前へ](1-2-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-8.md) +### 1.2.7. 文字列操作 + +テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 + +| 機能 | サポートするopensource COBOL機能 | +| :--- | :--- | +|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | +| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | +| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | +| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | +| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | +| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | +| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | +| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| +| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | +| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | +| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | +| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | + + + +[ページトップへ](1-2-7.md) + diff --git a/automanual/new/1-2-8.md b/automanual/new/1-2-8.md new file mode 100644 index 0000000..2f8ccdb --- /dev/null +++ b/automanual/new/1-2-8.md @@ -0,0 +1,25 @@ + +[前へ](1-2-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-3.md) + + + +[ページトップへ](1-2-8.md) + +### 1.2.8. テキストユーザインターフェース(TUI)機能 + +COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 + +以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 + +図1-1-TUIサンプル画面 + +![!\[alt text\](Image/1-1.png)](Image/1-1.png) + +このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 + +COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 + +--- + +`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 + diff --git a/automanual/new/1-3.md b/automanual/new/1-3.md new file mode 100644 index 0000000..d692119 --- /dev/null +++ b/automanual/new/1-3.md @@ -0,0 +1,23 @@ + +[前へ](1-2-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-4.md) + + + +[ページトップへ](1-3.md) + +## 1.3. 構文規則 + +opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 + +| | | +| :--- | :--- | +| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | +| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | +| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | +| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | +| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | +| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | +| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | +| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | +| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | + diff --git a/automanual/new/1-4.md b/automanual/new/1-4.md new file mode 100644 index 0000000..b6faa77 --- /dev/null +++ b/automanual/new/1-4.md @@ -0,0 +1,33 @@ + +[前へ](1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-5.md) + + + +[ページトップへ](1-4.md) + +## 1.4. ソースコードの形式 + +従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 + +opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 + +| | | +| :--- | :--- | +| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | +| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | +| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | +| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | + +以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 + +| | | +| :--- | :--- | +| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | +| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | +| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | +| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | +| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | +| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | + diff --git a/automanual/new/1-5.md b/automanual/new/1-5.md new file mode 100644 index 0000000..7d5c3ac --- /dev/null +++ b/automanual/new/1-5.md @@ -0,0 +1,19 @@ + +[前へ](1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-6.md) + + + +[ページトップへ](1-5.md) + +## 1.5. カンマ/セミコロンの使い方 + +空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 + +次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: + + CALL “SUBROUTINE” USING 1,2 + +DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 + +句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 + diff --git a/automanual/new/1-6.md b/automanual/new/1-6.md new file mode 100644 index 0000000..4987dcc --- /dev/null +++ b/automanual/new/1-6.md @@ -0,0 +1,37 @@ + +[前へ](1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-1.md) + + + +[ページトップへ](1-6.md) + +## 1.6. COPY文の使い方 + +図1-2-COPY構文 + +![alt text](Image/1-2.png) + +COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 + +1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 + +2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 + +3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 + +4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 + +5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 + +6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 + +7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 + +8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 + +9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 + +10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 + +11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 + diff --git a/automanual/new/1-7-1.md b/automanual/new/1-7-1.md new file mode 100644 index 0000000..28fe213 --- /dev/null +++ b/automanual/new/1-7-1.md @@ -0,0 +1,19 @@ + +[前へ](1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-2.md) + + + +[ページトップへ](1-7-1.md) + +## 1.7. 定数の使い方 + +定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 +### 1.7.1. 数字定数 +数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 + +- 1、56、2192、-54などの整数。 + +- 1.12や-2.95などの整数でない固定小数点値。 + +- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 + diff --git a/automanual/new/1-7-2.md b/automanual/new/1-7-2.md new file mode 100644 index 0000000..326546b --- /dev/null +++ b/automanual/new/1-7-2.md @@ -0,0 +1,41 @@ + +[前へ](1-7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-3.md) + + + +[ページトップへ](1-7-2.md) + +### 1.7.2. 英数字定数 + +英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 + +英数字定数は、次の形式のいずれかを取ることができる。 + +- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 + +- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + +英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 + +- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 + + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l + – “iteral that must + – “be continued.” + + +- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

+ + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & + “ long literal that must ” & + “ be continued.” + + +プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 + +数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 + diff --git a/automanual/new/1-7-3.md b/automanual/new/1-7-3.md new file mode 100644 index 0000000..ac92d5f --- /dev/null +++ b/automanual/new/1-7-3.md @@ -0,0 +1,13 @@ + +[前へ](1-7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-8.md) + + + +[ページトップへ](1-7-3.md) + +### 1.7.3. 日本語定数 + +- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 + +- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + diff --git a/automanual/new/1-8.md b/automanual/new/1-8.md new file mode 100644 index 0000000..1884c68 --- /dev/null +++ b/automanual/new/1-8.md @@ -0,0 +1,24 @@ + +[前へ](1-7-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-9.md) + + + +[ページトップへ](1-8.md) + +## 1.8. 表意定数の使い方 + +表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 + +次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 + +表1-3-表意定数 + +| 表意定数 | 定数型 | 値 | +| :--- | :--- | :--- | +| ZERO, ZEROS, ZEROES | 数字 | 0 | +| SPACE, SPACES | 英数字 | 空白 | +| QUOTE, QUOTES | 英数字 | 二重引用符 | +| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | +| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | +| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | + diff --git a/automanual/new/1-9.md b/automanual/new/1-9.md new file mode 100644 index 0000000..3b8ce43 --- /dev/null +++ b/automanual/new/1-9.md @@ -0,0 +1,15 @@ + +[前へ](1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-10.md) + + + +[ページトップへ](1-9.md) + +## 1.9. ユーザ定義名 + +opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 + +ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 + +プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 + diff --git a/automanual/new/2-1.md b/automanual/new/2-1.md new file mode 100644 index 0000000..e55079a --- /dev/null +++ b/automanual/new/2-1.md @@ -0,0 +1,46 @@ + +[前へ](1-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-2.md) + + + +[ページトップへ](2-1.md) + +# 2. opensource COBOLのプログラム形式 + +図2-1-opensource COBOLのプログラム形式 + +![alt text](Image/2-1.png) + +COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 + +すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 + +1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 + +2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 + +3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 + +4. 各区分の目的の概要は次の通りである: + +| 区分 | 目的 | +| :--- | :--- | +| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | +| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | +| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | +| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | + +## 2.1. ネストされたユーザプログラム + +図2-2-ネストされたユーザプログラム + +![alt text](Image/2-2.png) + +ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 + +1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 + +--- + +`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 + diff --git a/automanual/new/2-2.md b/automanual/new/2-2.md new file mode 100644 index 0000000..9872b07 --- /dev/null +++ b/automanual/new/2-2.md @@ -0,0 +1,19 @@ + +[前へ](2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](3.md) + + + +[ページトップへ](2-2.md) + +## 2.2. ネストされたユーザ定義関数 + +図2-3-ネストされたユーザ定義関数 + +![alt text](Image/2-3.png) + +ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 + +1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 + + name:line: Error: FUNCTION-ID is not yet implemented + diff --git a/automanual/new/3.md b/automanual/new/3.md new file mode 100644 index 0000000..c5009f8 --- /dev/null +++ b/automanual/new/3.md @@ -0,0 +1,28 @@ + +[前へ](2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-1.md) + + + +[ページトップへ](3.md) + +# 3. 見出し部 + +図3-1-見出し部構文 + +![alt text](Image/3-1.png) + +プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 +1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 + +2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 + +3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 + +4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 + +5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 + +6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 + +7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 + diff --git a/automanual/new/4-1-1.md b/automanual/new/4-1-1.md new file mode 100644 index 0000000..ad0abc3 --- /dev/null +++ b/automanual/new/4-1-1.md @@ -0,0 +1,41 @@ + +[前へ](3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-2.md) + + + +[ページトップへ](4-1-1.md) + +# 4. 環境部 + +図4-1-環境部構文 + +![alt text](Image/4-1.png) + +プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 + +1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 + +## 4.1. 構成節 + +図4-2-構成節構文 + +![alt text](Image/4-2.png) + +プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 + +1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 + +### 4.1.1. 翻訳用計算機段落 + +図4-3-翻訳用計算機段落構文 + +![alt text](Image/4-3.png) + +翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 + +1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 + +3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 + diff --git a/automanual/new/4-1-2.md b/automanual/new/4-1-2.md new file mode 100644 index 0000000..6019e06 --- /dev/null +++ b/automanual/new/4-1-2.md @@ -0,0 +1,23 @@ + +[前へ](4-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-3.md) + + + +[ページトップへ](4-1-2.md) + +### 4.1.2. 実行用計算機段落 + +図4-4-実行用計算機段落構文 + +![alt text](Image/4-4.png) + +実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 + +1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 + +3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 + +4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 + diff --git a/automanual/new/4-1-3.md b/automanual/new/4-1-3.md new file mode 100644 index 0000000..b15bae4 --- /dev/null +++ b/automanual/new/4-1-3.md @@ -0,0 +1,19 @@ + +[前へ](4-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-4.md) + + + +[ページトップへ](4-1-3.md) + +### 4.1.3. リポジトリ段落 + +図4-5-リポジトリ段落構文 + +![alt text](Image/4-5.png) + +リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 + +1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 + +2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 + diff --git a/automanual/new/4-1-4.md b/automanual/new/4-1-4.md new file mode 100644 index 0000000..bb32589 --- /dev/null +++ b/automanual/new/4-1-4.md @@ -0,0 +1,114 @@ + +[前へ](4-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-1.md) + + + +[ページトップへ](4-1-4.md) + +### 4.1.4. 特殊名段落 + +図4-6-特殊名段落構文 + +![alt text](Image/4-6-1.png) +![alt text](Image/4-6-2.png) + +特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定のニーモニック名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 + +つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 + +1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 + +2. IS ニーモニック名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 + +3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 + +4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 + +5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 + + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ + + このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 + + LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: + + 表4-7-局所名 + + | | | | | | + | :---: | :---: | :---: | :---: | :---: | + | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | + | am_ET | el_GR | fil_PH | lv_LV | sma_SE | + | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | + | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | + | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | + | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | + | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | + | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | + | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | + | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | + | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | + | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | + | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | + | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | + | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | + | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | + | ar_TN | en_ZA | he_IL | nn_NO | te_IN | + | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | + | arn_CL | es_AR | hr_BA | oc_FR | th_TH | + | as_IN | es_BO | hr_HR | or_IN | tk_TM | + | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | + | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | + | ba_R | es_CR | id_ID | ps_AF | tr_IN | + | be_BY | es_DO | ig_NG | pt_BR | tr_TR | + | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | + | bn_IN | es_ES | is_IS | qut_GT | ug_CN | + | bo_BT | es_GT | it_CH | quz_BO | uk_UA | + | bo_CN | es_HN | it_IT | quz_EC | ur_PK | + | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | + | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | + | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | + | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | + | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | + | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | + | da_DK | es_SV | kl_GL | sah_RU | yo_NG | + | de_AT | es_US | kn_IN | se_FI | zh_CN | + | de_CH | es_UY | ko_KR | se_NO | zh_HK | + | de_DE | es_VE | kok_IN | se_SE | zh_MO | + | de_LI | et_EE | ky_KG | si_LK | zh_SG | + | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | + | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | + + +7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 + +8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 + +9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 + + 表4-8-ACCEPT画面ステータスコード + + | コード | 意味 | + | :--- | :--- | + | 0000 | ENTERキー押下 | + | 1001 - 1064| F1 — F64 | + | 2001, 2002 | PgUP, PgDn4 | + | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | + | 2005 | Esc6 | + | 8000 | ACCEPT画面に利用できるデータがない | + | 9000 | 致命的なI/O画面エラー | + + +10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 + +11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 + +--- + +`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 + +`5` Windowsシステムでは検出できない。 + +`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) + diff --git a/automanual/new/4-2-1-1.md b/automanual/new/4-2-1-1.md new file mode 100644 index 0000000..89915b3 --- /dev/null +++ b/automanual/new/4-2-1-1.md @@ -0,0 +1,112 @@ + +[前へ](4-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-2.md) + + + +[ページトップへ](4-2-1-1.md) + +## 4.2. 入出力節 + +図4-9-入出力節構文 + +![alt text](Image/4-9.png) + +入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 + +1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + +### 4.2.1. ファイル管理段落 + +図4-10-ファイル管理段落構文 + +![alt text](Image/4-10.png) + +ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 + +1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 + +2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 + +3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 + + SELECT My-File ASSIGN TO DISK DISPLAY. + + 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 + + SELECT My-File ASSIGN TO DISPLAY. + + +4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 + + - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 + + この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + + 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 + + 表4-11-ステータスコード + + |ステータス値 | 意味 | + | :--- | :--- | + |00 | 成功| + |02 | 成功(重複レコードキーが検出された)| + |05 | 成功(オプションファイルが存在しない)| + |07 | 成功(ユニットが存在しない)| + |10 |ファイル終了| + |14 |キー範囲外| + |21 |キーが無効である| + |22 |キーの値の重複が検出された| + |23 |キーが存在しない| + |30 |永続的入出力エラー| + |31 |ファイル名に一貫性がない| + |34 |ファイル区域外である| + |35 |ファイルが存在しない| + |37 |アクセス権拒否| + |38 |ファイルがロックで閉じられている| + |39 |属性の矛盾が検出された| + |41 |ファイルが既に開かれている| + |42 |ファイルが開かれていない| + |43 |読み込みが行われていない| + |44 |レコードのオーバーフロー| + |46 |読み込みエラー| + |47 |OPEN INPUTが拒否された| + |48 |OPEN OUTPUTが拒否された| + |49 |OPEN I/Oが拒否された| + |51 |レコードがロックされている| + |52 |ページ終了| + |57 |LINAGE指定が無効である| + |61 |ファイル共有の失敗| + |91 |ファイルが利用できない| + +5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 + +#### 4.2.1.1. 順編成ファイル + +図4-12-順編成ファイルの指定 + +![alt text](Image/4-12.png) + +SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 + +1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 + +2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 + +3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 + +4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 + +5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 + +6. 固定長と可変長、両方のレコード形式がサポートされている。 + +7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 + +8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/new/4-2-1-2.md b/automanual/new/4-2-1-2.md new file mode 100644 index 0000000..f530104 --- /dev/null +++ b/automanual/new/4-2-1-2.md @@ -0,0 +1,29 @@ + +[前へ](4-2-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-3.md) + + + +[ページトップへ](4-2-1-2.md) + +#### 4.2.1.2. 相対編成ファイル + +図4-13-相対編成ファイルの指定 + +![alt text](Image/4-13.png) + +RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 + +1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 + +2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 + +3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 + +4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 + +7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/new/4-2-1-3.md b/automanual/new/4-2-1-3.md new file mode 100644 index 0000000..809fa28 --- /dev/null +++ b/automanual/new/4-2-1-3.md @@ -0,0 +1,31 @@ + +[前へ](4-2-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-2.md) + + + +[ページトップへ](4-2-1-3.md) + +#### 4.2.1.3. 索引編成ファイル + +図4-14-索引編成ファイルの指定 + +![alt text](Image/4-14.png) + +RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 + +例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 + +1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 + +4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 + +5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 + +6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 + +7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/new/4-2-2.md b/automanual/new/4-2-2.md new file mode 100644 index 0000000..d605a77 --- /dev/null +++ b/automanual/new/4-2-2.md @@ -0,0 +1,22 @@ + +[前へ](4-2-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-1.md) + + + +[ページトップへ](4-2-2.md) + +### 4.2.2. 入出力管理段落 + +図4-15-入出力管理段落構文 + +![alt text](Image/4-15.png) + + +入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 + +1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 + +2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 + +3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 + diff --git a/automanual/new/5-1.md b/automanual/new/5-1.md new file mode 100644 index 0000000..5431675 --- /dev/null +++ b/automanual/new/5-1.md @@ -0,0 +1,57 @@ + +[前へ](4-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-2.md) + + + +[ページトップへ](5-1.md) + +# 5. データ部 + +図5-1-データ部の形式 + +![alt text](Image/5-1.png) + +データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 + +1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 + +2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) + +3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 + +4. 局所場所はネストされたプログラムでは使用できない。 + +5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 + +6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 + +## 5.1. ファイル記述 + +図5-2-ファイル記述構文 + +![alt text](Image/5-2.png) + +プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 + +1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 + +2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 + +3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 + +4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 + +5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 + +6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 + +7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 + + 図5-3-LINAGE句指定ページ構造 + + ![alt text](Image/5-3.png) + +8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 + +9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 + diff --git a/automanual/new/5-2.md b/automanual/new/5-2.md new file mode 100644 index 0000000..ee49613 --- /dev/null +++ b/automanual/new/5-2.md @@ -0,0 +1,26 @@ + +[前へ](5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-3.md) + + + +[ページトップへ](5-2.md) + +## 5.2. 整列用記述 + +図5-4-整列用記述段落 + +![alt text](Image/5-4.png) + + +整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 + +1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 + +2. 整列用ファイルをディスクに割り当てる必要がある。 + +3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 + +4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 + +5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 + diff --git a/automanual/new/5-3.md b/automanual/new/5-3.md new file mode 100644 index 0000000..9b6f17d --- /dev/null +++ b/automanual/new/5-3.md @@ -0,0 +1,302 @@ + +[前へ](5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-4.md) + + + +[ページトップへ](5-3.md) + +## 5.3. データ記述の形式 + +図5-5-データ記述の一般形式 + +![alt text](Image/5-5.png) + +ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 + +1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 + +2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 + + + | | | + | --- | --- | + | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | + | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | + | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | + | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | + + + この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 + +3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 + +4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 + + 表5-6-データのクラス定義 PICTURE記号(9/A/X) + + | 基本記号 | 意味・使用方法 | + | :--- | :--- | + | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | + | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | + | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | + | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | + + 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: + + | | | + | --- | --- | + | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | + | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | + | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | + | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | + + + + 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 + + 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 + + 表5-7-数値形式オプションのPICTURE記号(P/S/V) + + | 数値形式のオプション記号 | 意味・使用方法 | + | :--- | :--- | + | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | + | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | + | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | + +5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 + + 表5-8-符号エンコード文字 + + | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | + | :---: | :---: |:---: | + | 0 | 0 | p | + | 1 | 1 | q | + | 2 | 2 | r | + | 3 | 3 | s | + | 4 | 4 | t | + | 5 | 5 | u | + | 6 | 6 | v | + | 7 | 7 | w | + | 8 | 8 | x | + | 9 | 9 | y | + + SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 + + +6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 + + 表5-9-数字編集PICTURE記号 + + | 編集記号 | 意味・使用方法 | + | :--- | :--- | + | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | + | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | + | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | + | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | + | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | + | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | + | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | + | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | + | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | + | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | + + 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 + +7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 + +8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 + +9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 + +10. EXTERNAL句は、77または01レベルでのみ指定できる。 + +11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 + +12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 + +13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 + +14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 + + 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. + + 以下のように割り当てられる。 + + ![alt text](Image/5-3-9.png) + + 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 + ``` + 05 X OCCURS 3 TIMES. + 10 A PIC X(1). + 10 B PIC X(1). + 10 C PIC X(1). + ``` + ![alt text](Image/5-3-10.png) + + 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 + +15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 + +16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 + +17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 + + ``` + PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 + PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” + PIC 9(3) VALUE 1 – 次の値を保持する 001 + PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 + ``` + +18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 + +19. BASED句とANY LENGTH句を併用することはできない。 + +20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 + +21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 + +22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 + +23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 + +24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある + + a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 + + b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 + + c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 + + d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 + + e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 + + f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 + +25. 次の表は、利用可能なUSAGE句をまとめたものである。 + + 表5-10-USAGE句一覧
+ + | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| + | :--- | :--- |:--- | :--- |:--- | :--- | + | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | + | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | + |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | + | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | + | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | + | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | + | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | + | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | + | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | + | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | + | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | + | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | + | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | + | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | + | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | + | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | + | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | + | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | + | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | + | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | + | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | + +26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 + + ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 + + リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 + + CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 + + 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 + + バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 + +27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 + +28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 + +29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 + + a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 + + b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 + + c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 + + 図5-11-SYNCHRONIZED句の効果 + + ![alt text](Image/5-11.png) + + 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 + + SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 + +30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 + + a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 + + b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 + ``` + 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 + + ``` + 05 SHIRT-SIZE-VALUES. + 10 PIC X(4) VALUE “S 14”. + 10 PIC X(4) VALUE “M 15”. + 10 PIC X(4) VALUE “L 16”. + 10 PIC X(4) VALUE “XL17”. + 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + + + cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) + + 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 + + ``` + 05 X OCCURS 6 TIMES. + 10 A PIC X(1) VALUE “?‟. + 10 B PIC X(1) VALUE “%‟. + 10 N PIC 9(2) VALUE 10. + ``` + + この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 + +--- +`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 + +`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 + +`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 + +`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 + diff --git a/automanual/new/5-4.md b/automanual/new/5-4.md new file mode 100644 index 0000000..224af7c --- /dev/null +++ b/automanual/new/5-4.md @@ -0,0 +1,25 @@ + +[前へ](5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-5.md) + + + +[ページトップへ](5-4.md) + +## 5.4. 条件名 + +図5-12-レベル88条件名記述構文 + +![alt text](Image/5-12.png) + +条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 + +1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 + +2. また、ストレージを占有しない。 + +3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 + +4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 + +5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 + diff --git a/automanual/new/5-5.md b/automanual/new/5-5.md new file mode 100644 index 0000000..9acd3d1 --- /dev/null +++ b/automanual/new/5-5.md @@ -0,0 +1,19 @@ + +[前へ](5-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-6.md) + + + +[ページトップへ](5-5.md) + +## 5.5. 定数記述 + +図5-13-78レベル定数記述構文 + +![alt text](Image/5-13.png) + +この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 + +1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 + +2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 + diff --git a/automanual/new/5-6.md b/automanual/new/5-6.md new file mode 100644 index 0000000..689c04d --- /dev/null +++ b/automanual/new/5-6.md @@ -0,0 +1,105 @@ + +[前へ](5-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-1.md) + + + +[ページトップへ](5-6.md) + +## 5.6. 画面記述 + +図5-14-画面節データ項目記述構文 + +![alt text](Image/5-14-1.png) +![alt text](Image/5-14-2.png) + +上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 + +1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 + +2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 + +3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 + +4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 + +5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 + +6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 + +7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` + +8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 + +9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 + +10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 + +11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 + + LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 + + もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 + + TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 + + 必要に応じてCOLUMNはCOLに省略が可能である。 + +12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 + + 表5-15-番号によって指定される画面色 + + | 整数 | 色 | + | :---: | :---: | + | 0 | 黒 | + | 1 | 青 | + | 2 | 緑 | + | 3 | 青緑 | + | 4 | 赤 | + | 5 | 赤紫 | + | 6 | 黄 | + | 7 | 白 | + +13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 + + 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
+ + + | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | + | :---: | :---: |:---: | + | 0 | 黒 | 暗灰 | + | 1 | 暗青/藍 | 明青 | + | 2 | 暗緑 | 明緑 | + | 3 | 暗青緑 | 明青緑 | + | 4 | 暗赤 | 明赤 | + | 5 | 暗赤紫 | 明赤紫 | + | 6 | 金/茶 | 黄 | + | 7 | 明灰 | 白 | + + +14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 + +15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 + + ``` + 78 Black VALUE 0. + 78 Blue VALUE 1. + 78 Green VALUE 2. + 78 White VALUE 7. + ・・・ + 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ + 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ + 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ + ``` + DEF項目の色は緑と白になる(XYZから継承される) + +16. VALUE句は変更できない固定のテキストを定義するために使用される。 + +17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 + +18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 + +19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 + +--- +`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 + diff --git a/automanual/new/6-1-1.md b/automanual/new/6-1-1.md new file mode 100644 index 0000000..b10bb5e --- /dev/null +++ b/automanual/new/6-1-1.md @@ -0,0 +1,38 @@ + +[前へ](5-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-2.md) + + + +[ページトップへ](6-1-1.md) + +# 6. 手続き部 + +## 6.1. 構成要素 + +### 6.1.1. 表の参照 + +COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 + +4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: + +``` + 01 GRID. + 05 GRID-ROW OCCURS 3 TIMES. + 10 GRID-COLUMN OCCURS 4 TIMES. + 15 GRID-CHARACTER PIC X(1). +``` + +次の図で網掛けされているGRID-CHARACTERは、 + +![alt text](Image/6-0.png) + + +次のコードで参照できる。 + + GRID-CHARACTER(2, 3) + +添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または +これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 + +算術式については[6.1.4.1](6-1-4-1.md)で説明する。 + diff --git a/automanual/new/6-1-2.md b/automanual/new/6-1-2.md new file mode 100644 index 0000000..cb79ecc --- /dev/null +++ b/automanual/new/6-1-2.md @@ -0,0 +1,54 @@ + +[前へ](6-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-3.md) + + + +[ページトップへ](6-1-2.md) + +### 6.1.2. データ名の修飾 + +COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 + +動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: + +``` + 01 EMPLOYEE. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). + 01 CUSTOMER. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). +``` + +それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: + + MOVE “Philadelphia” TO CITY. + +この問題を解決するために、CITYの参照を次のように修飾できる。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. + +残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. + +これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 + + MOVE “Philadelphia” TO CITY OF EMPLOYEE. + +テーブルへの参照を修飾する場合は次のように記述する。 + + 一意名-1 OF 一意名-2(添え字・・・) + +予約語の「IN」は「OF」の代わりとして使うことができる。 + diff --git a/automanual/new/6-1-3.md b/automanual/new/6-1-3.md new file mode 100644 index 0000000..5fdbb29 --- /dev/null +++ b/automanual/new/6-1-3.md @@ -0,0 +1,30 @@ + +[前へ](6-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-1.md) + + + +[ページトップへ](6-1-3.md) + +### 6.1.3. 部分参照 + +図6-1-部分参照構文 + +![alt text](Image/6-1.png) + +COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 + +開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 + +ここでいくつか例を挙げる。 + +| | | +| --- | --- | +| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | +| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | +| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | +| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | +| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | + + +参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 + diff --git a/automanual/new/6-1-4-1.md b/automanual/new/6-1-4-1.md new file mode 100644 index 0000000..05eee54 --- /dev/null +++ b/automanual/new/6-1-4-1.md @@ -0,0 +1,57 @@ + +[前へ](6-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-2.md) + + + +[ページトップへ](6-1-4-1.md) + +### 6.1.4. 式 + +opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 + +- 数値結果を計算する「算術式」 + +- TRUEまたはFALSE値を計算する「条件式」 + +0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 + +#### 6.1.4.1. 算術式 + +算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 + +| 優先順位 演算子 | 意味 | + | :---: | :--- | + | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| + | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | + | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | + | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | + | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | + | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | + | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | + +COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 + +1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 + +2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 + +3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 + +4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 + +5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 + +6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 + +ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 + +| 式 | 計算結果 | 解説 | +| :--- | :--- |:--- | +| 3 * 4 + 1|13|* は + よりも優先される。 | +| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | +| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | +| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | +| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | + +もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 + diff --git a/automanual/new/6-1-4-2.md b/automanual/new/6-1-4-2.md new file mode 100644 index 0000000..25523c0 --- /dev/null +++ b/automanual/new/6-1-4-2.md @@ -0,0 +1,148 @@ + +[前へ](6-1-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-5.md) + + + +[ページトップへ](6-1-4-2.md) + +#### 6.1.4.2. 条件式 + +条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 + +##### 6.1.4.2.1. 条件名(レベル88項目) + +次のコードは最も単純な条件の一例である。 + +``` + 05 SHIRT-SIZE PIC 99V9. + 88 LILLIPUTIAN VALUE 0 THRU 12.5 + 88 XS VALUE 13 THRU 13.5. + 88 S VALUE 14, 14.5. + 88 M VALUE 15, 15.5. + 88 L VALUE 16, 16.5. + 88 XL VALUE 17, 17.5. + 88 XXL VALUE 18, 18.5. + 88 HUMUNGOUS VALUE 19 THRU 99.9. +``` + +条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 + + + IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 + + +または次のように条件名「XL」を使用することもできる。 + + IF XL + +##### 6.1.4.2.2. 字類条件 + +図6-9-字類条件構文 + +![alt text](Image/6-9.png) + +字類条件は、データ項目に格納されている現在のデータ型を判別する。 + +1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 + +2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 + +3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 + +4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 + +5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 + +6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 + +7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 + + ``` + SPECIAL-NAMES. + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. + ``` + +次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 + +``` + IF Entered-Value IS Hexadecimal + PERFORM 150-Process-Hex-Value + END-IF +``` + +##### 6.1.4.2.3. 正負条件 +図6-10-正負条件構文 + +![alt text](Image/6-10.png) + +正負条件は、PIC 9データ項目の数値状態を判別する。 + +1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 + +2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 + +##### 6.1.4.2.4. スイッチ状態条件 +図6-11-スイッチ状態条件 + +![alt text](Image/6-11.png) + +特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 + +##### 6.1.4.2.5. 比較条件 +図6-12-比較条件構文 + +![alt text](Image/6-12.png) + +比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 + +1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 + +2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 + +##### 6.1.4.2.6. 組み合わせ条件 +図6-13-組み合わせ条件構文 + +![alt text](Image/6-13.png) + +組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 + +1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 + +2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 + +3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 +``` + IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 +``` +以下のように省略される。 +``` + IF ACCOUNT-STATUS = 1 OR 2 OR 7 +``` + +4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 + + ``` + FALSE OR TRUE AND TRUE 結果:TRUE + (FALSE OR FALSE) AND TRUE 結果:FALSE + FALSE OR (FALSE AND TRUE) 結果:TRUE + ``` + +##### 6.1.4.2.7. 否定条件 +図6-14-否定条件構文 + +![alt text](Image/6-14.png) + +否定条件はNOT演算子を用いて、条件を否定する。 + +1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 + +2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 +``` + NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE + 結果:FALSE + NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) + 結果:TRUE + NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) + 結果:FALSE +``` + diff --git a/automanual/new/6-1-5.md b/automanual/new/6-1-5.md new file mode 100644 index 0000000..144311f --- /dev/null +++ b/automanual/new/6-1-5.md @@ -0,0 +1,52 @@ + +[前へ](6-1-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-6.md) + + + +[ページトップへ](6-1-5.md) + +### 6.1.5. ピリオド(.) + +COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 + +``` + MOVE SPACES TO Employee-Address + ADD 1 TO Record-Counter + DISPLAY “Record-Counter=” Record-Counter +``` + +一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 + +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest + DISPLAY “Interest Amount = “ Interest +``` + +この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 + +しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: + +``` + IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 + GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 + GIVING Interest DISPLAY “Interest Amount = “ Interest +``` + +では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 + +そこで用いるのが完結文である。 + +COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest. + DISPLAY “Interest Amount = “ Interest +``` + +二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 + diff --git a/automanual/new/6-1-6.md b/automanual/new/6-1-6.md new file mode 100644 index 0000000..ad49fc3 --- /dev/null +++ b/automanual/new/6-1-6.md @@ -0,0 +1,46 @@ + +[前へ](6-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-7.md) + + + +[ページトップへ](6-1-6.md) + +### 6.1.6. 動詞/END-動詞 + +1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 + +``` + IF A = 1 + IF B = 1 + DISPLAY “A & B = 1” + ELSE + IF B = 1 + DISPLAY “A NOT = 1 BUT B = 1” + ELSE + DISPLAY “NEITHER A NOR B = 1”. +``` + +このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 + +![alt text](Image/6-16-1.png) + +NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 + +1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: + +![alt text](Image/6-16-2.png) + +しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 + +![alt text](Image/6-16-3.png) + +COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 + +COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` + +既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 + +--- +`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 + +`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? diff --git a/automanual/new/6-1-7.md b/automanual/new/6-1-7.md new file mode 100644 index 0000000..5dbf4dc --- /dev/null +++ b/automanual/new/6-1-7.md @@ -0,0 +1,24 @@ + +[前へ](6-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-1.md) + + + +[ページトップへ](6-1-7.md) + +### 6.1.7. 特殊レジスタ + +opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 + +表6-15-特殊レジスタ + +| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | +| :--- | :--- |:--- | +| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | +| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | +| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | +| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | +| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | + +--- +`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 + diff --git a/automanual/new/6-1-8-1.md b/automanual/new/6-1-8-1.md new file mode 100644 index 0000000..abf0e55 --- /dev/null +++ b/automanual/new/6-1-8-1.md @@ -0,0 +1,34 @@ + +[前へ](6-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-2.md) + + + +[ページトップへ](6-1-8-1.md) + +### 6.1.8. ファイルへの同時アクセス制御 + +データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 + +すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 + +#### 6.1.8.1. ファイル共有 + +opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 + +OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 + +ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 + +| 共有オプション |効果 | +| :--- | :--- | +| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | +| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | +| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | + +誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 + +--- +`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 + +`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 + diff --git a/automanual/new/6-1-8-2.md b/automanual/new/6-1-8-2.md new file mode 100644 index 0000000..43c5b86 --- /dev/null +++ b/automanual/new/6-1-8-2.md @@ -0,0 +1,25 @@ + +[前へ](6-1-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-2.md) + + + +[ページトップへ](6-1-8-2.md) + +#### 6.1.8.2. レコードロック + +レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 + +ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 + +レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 + +| レコードロック オプション |効果 | +| :--- | :--- | +| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | +| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | +| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | +| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | + + +使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 + diff --git a/automanual/new/6-10.md b/automanual/new/6-10.md new file mode 100644 index 0000000..b661287 --- /dev/null +++ b/automanual/new/6-10.md @@ -0,0 +1,17 @@ + +[前へ](6-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-11.md) + + + +[ページトップへ](6-10.md) + +## 6.10. COMMIT + +図6-37-COMMIT構文 + +![alt text](Image/6-37-Commit.png) + +COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 + +1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 + diff --git a/automanual/new/6-11.md b/automanual/new/6-11.md new file mode 100644 index 0000000..208b291 --- /dev/null +++ b/automanual/new/6-11.md @@ -0,0 +1,19 @@ + +[前へ](6-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-12.md) + + + +[ページトップへ](6-11.md) + +## 6.11. COMPUTE + +図6-38-COMPUTE構文 + +![alt text](Image/6-38-Compute.png) + +COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 + +1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 + +2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 + diff --git a/automanual/new/6-12.md b/automanual/new/6-12.md new file mode 100644 index 0000000..c5bc50a --- /dev/null +++ b/automanual/new/6-12.md @@ -0,0 +1,33 @@ + +[前へ](6-11.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-1.md) + + + +[ページトップへ](6-12.md) + +## 6.12. CONTINUE + +図6-39-CONTINUE構文 + +![alt text](Image/6-39-Continue.png) + +CONTINUE文は動作がないためアクションを実行しない。 + +1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 + + ![alt text](Image/6-12-1.png) + + 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 + +2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 + + ![alt text](Image/6-12-2.png) + +COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 + + IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ + +プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 + +従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 + diff --git a/automanual/new/6-13-1.md b/automanual/new/6-13-1.md new file mode 100644 index 0000000..7100207 --- /dev/null +++ b/automanual/new/6-13-1.md @@ -0,0 +1,31 @@ + +[前へ](6-12.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-2.md) + + + +[ページトップへ](6-13-1.md) + +## 6.13. DELETE + +### 6.13.1. DELETE文の書き方1 ― DELETE + +図6-40-DELETE構文(レコードの削除) + +![alt text](Image/6-40-Delete.png) + +DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 + +1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 + +2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 + +3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 + +4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 + +5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 + +6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 + +7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 + diff --git a/automanual/new/6-13-2.md b/automanual/new/6-13-2.md new file mode 100644 index 0000000..f7f14f5 --- /dev/null +++ b/automanual/new/6-13-2.md @@ -0,0 +1,21 @@ + +[前へ](6-13-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-1.md) + + + +[ページトップへ](6-13-2.md) + +### 6.13.2. DELETE文の書き方2 ― DELETE FILE + +図6-41-DELETE FILE構文(ファイルの削除) + +![alt text](Image/6-41(delete).png) + +DELETE FILE文は、ディスクファイルを削除する。 + +1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 + +2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 + +3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 + diff --git a/automanual/new/6-14-1.md b/automanual/new/6-14-1.md new file mode 100644 index 0000000..5a7b736 --- /dev/null +++ b/automanual/new/6-14-1.md @@ -0,0 +1,23 @@ + +[前へ](6-13-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-2.md) + + + +[ページトップへ](6-14-1.md) + +## 6.14. DISPLAY + +### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE + +図6-42-DISPLAY構文(UPON CONSOLE) + +![alt text](Image/6-42-Display.png) + +プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 + +1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 + +2. 指定するニーモニック名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義のニーモニック名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 + +3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 + diff --git a/automanual/new/6-14-2.md b/automanual/new/6-14-2.md new file mode 100644 index 0000000..7f6cc0f --- /dev/null +++ b/automanual/new/6-14-2.md @@ -0,0 +1,17 @@ + +[前へ](6-14-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-3.md) + + + +[ページトップへ](6-14-2.md) + +### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス + +図6-43-DISPLAY構文(コマンドライン引数へのアクセス) + +![alt text](Image/6-43-Display.png) + +後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 + +1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 + diff --git a/automanual/new/6-14-3.md b/automanual/new/6-14-3.md new file mode 100644 index 0000000..5f5acab --- /dev/null +++ b/automanual/new/6-14-3.md @@ -0,0 +1,29 @@ + +[前へ](6-14-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-4.md) + + + +[ページトップへ](6-14-3.md) + +### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 + +図6-44-DISPLAY構文(環境変数へのアクセス/設定) + +![alt text](Image/6-44-Display.png) + +環境変数を作成または変更するために使われる。 + +1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 + + DISPLAY + environment-variable-name UPON ENVIRONMENT-NAME + END-DISPLAY + DISPLAY + environment-variable-name UPON ENVIRONMENT-VALUE + END-DISPLAY + + +2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 + +3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 +  diff --git a/automanual/new/6-14-4.md b/automanual/new/6-14-4.md new file mode 100644 index 0000000..380d5b8 --- /dev/null +++ b/automanual/new/6-14-4.md @@ -0,0 +1,23 @@ + +[前へ](6-14-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-5.md) + + + +[ページトップへ](6-14-4.md) + +### 6.14.4. DISPLAY文の書き方4 ― 画面データ + +図6-45-DISPLAY構文(画面データ) + +![alt text](Image/6-45-Display.png) + +形式化された画面にデータを表示する。 + +1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 + +2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 + +4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 + diff --git a/automanual/new/6-14-5.md b/automanual/new/6-14-5.md new file mode 100644 index 0000000..2f3d7fd --- /dev/null +++ b/automanual/new/6-14-5.md @@ -0,0 +1,15 @@ + +[前へ](6-14-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-1.md) + + + +[ページトップへ](6-14-5.md) + +### 6.14.5. DISPLAY文の例外処理 + +図6-46-DISPLAY構文(例外処理) + +![alt text](Image/6-46-Display.png) + +DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 + diff --git a/automanual/new/6-15-1.md b/automanual/new/6-15-1.md new file mode 100644 index 0000000..b7b2839 --- /dev/null +++ b/automanual/new/6-15-1.md @@ -0,0 +1,25 @@ + +[前へ](6-14-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-2.md) + + + +[ページトップへ](6-15-1.md) + +## 6.15. DIVIDE + +### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO + +図6-47-DIVIDE INTO構文 + +![alt text](Image/6-47-Divide.png) + +指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new/6-15-2.md b/automanual/new/6-15-2.md new file mode 100644 index 0000000..886b376 --- /dev/null +++ b/automanual/new/6-15-2.md @@ -0,0 +1,25 @@ + +[前へ](6-15-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-3.md) + + + +[ページトップへ](6-15-2.md) + +### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING + +図6-48-DIVIDE INTO GIVING構文 + +![alt text](Image/6-48-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new/6-15-3.md b/automanual/new/6-15-3.md new file mode 100644 index 0000000..73cf718 --- /dev/null +++ b/automanual/new/6-15-3.md @@ -0,0 +1,25 @@ + +[前へ](6-15-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-4.md) + + + +[ページトップへ](6-15-3.md) + +### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING + +図6-49-DIVIDE BY GIVING構文 + +![alt text](Image/6-49-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new/6-15-4.md b/automanual/new/6-15-4.md new file mode 100644 index 0000000..e1e7465 --- /dev/null +++ b/automanual/new/6-15-4.md @@ -0,0 +1,25 @@ + +[前へ](6-15-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-5.md) + + + +[ページトップへ](6-15-4.md) + +### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER + +図6-50-DIVIDE INTO REMAINDER構文 + +![alt text](Image/6-50-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new/6-15-5.md b/automanual/new/6-15-5.md new file mode 100644 index 0000000..af16766 --- /dev/null +++ b/automanual/new/6-15-5.md @@ -0,0 +1,25 @@ + +[前へ](6-15-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-16.md) + + + +[ページトップへ](6-15-5.md) + +### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER + +図6-51-DIVIDE BY REMAINDER構文 + +![alt text](Image/6-51-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new/6-16.md b/automanual/new/6-16.md new file mode 100644 index 0000000..c4fd7f7 --- /dev/null +++ b/automanual/new/6-16.md @@ -0,0 +1,21 @@ + +[前へ](6-15-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-17.md) + + + +[ページトップへ](6-16.md) + +## 6.16. ENTRY + +図6-52-ENTRY構文 + +![alt text](Image/6-52-Entry.png) + +ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 + +1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 + +2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 + +3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 + diff --git a/automanual/new/6-17.md b/automanual/new/6-17.md new file mode 100644 index 0000000..d468d6d --- /dev/null +++ b/automanual/new/6-17.md @@ -0,0 +1,59 @@ + +[前へ](6-16.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-18.md) + + + +[ページトップへ](6-17.md) + +## 6.17. EVALUATE + +図6-53-EVALUATE構文 + +![alt text](Image/6-53-Evaluate.png) + +EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 + +1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 + +2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: + + + Legal: Not Legal: + + (3 + Years-Of-Service) THROUGH 99 0 THRU “A” + + “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is + + X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) + + 15.7 THROUGH 19.4 + +3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択サブジェクトと呼ばれ、各WHEN句の後に指定された値は選択オブジェクトと呼ばれる。 + +4. 各WHEN句には、EVALUATE文の選択サブジェクトと同じ数の選択オブジェクトが必要である。 + +5. 各EVALUATE句の選択サブジェクトは、選択オブジェクトに対応する各WHEN句と等しいかどうかテストされる。 + +6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 + +7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 + +8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 + +9. ANYの選択オブジェクトを使うと、ANYと一致する選択サブジェクトと自動的に合致する。 + +ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 + +1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 + +2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 + +3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 + +4. 上記以外の種類の口座には利子が適用されない。 + +これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 + +図6-54-EVALUATE文のデモプログラム +![alt text](Image/6-54-Evaluate.png) + diff --git a/automanual/new/6-18.md b/automanual/new/6-18.md new file mode 100644 index 0000000..43caf0d --- /dev/null +++ b/automanual/new/6-18.md @@ -0,0 +1,42 @@ + +[前へ](6-17.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-19.md) + + + +[ページトップへ](6-18.md) + +## 6.18. EXIT + +図6-55-EXIT構文 + +![alt text](Image/6-55-Exit.png) + +EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 + +1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 + + 図6-56-EXIT文
+ ![alt text](Image/6-56-Exit.png) + +2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 + +3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 + +4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 + + EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 + + 図6-57-EXIT PARAGRAPH文
+ ![alt text](Image/6-57-Exit.png) + +5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 + +6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 + +7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 + + 図6-58-EXIT PERFORM文
+ ![alt text](Image/6-58-Exit.png) + +8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 + diff --git a/automanual/new/6-19.md b/automanual/new/6-19.md new file mode 100644 index 0000000..8b6658c --- /dev/null +++ b/automanual/new/6-19.md @@ -0,0 +1,23 @@ + +[前へ](6-18.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-20.md) + + + +[ページトップへ](6-19.md) + +## 6.19. FREE + +図6-59-FREE構文 + +![alt text](Image/6-59-Free.png) + +FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 + +1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 + +2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 + +3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 + +4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 + diff --git a/automanual/new/6-2.md b/automanual/new/6-2.md new file mode 100644 index 0000000..2717ca3 --- /dev/null +++ b/automanual/new/6-2.md @@ -0,0 +1,31 @@ + +[前へ](6-1-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-3.md) + + + +[ページトップへ](6-2.md) + +## 6.2. 記述形式 + +図6-16-記述形式構文 + +![alt text](Image/6-16.png) + +手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 + +手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 + +1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 + +2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 + +3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 + +4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 + +5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 + +6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 + +7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 + diff --git a/automanual/new/6-20.md b/automanual/new/6-20.md new file mode 100644 index 0000000..7377de9 --- /dev/null +++ b/automanual/new/6-20.md @@ -0,0 +1,15 @@ + +[前へ](6-19.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-21.md) + + + +[ページトップへ](6-20.md) + +## 6.20. GENERATE + +図6-60-GENERATE構文 + +![alt text](Image/6-60-Generate.png) + +GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + diff --git a/automanual/new/6-21.md b/automanual/new/6-21.md new file mode 100644 index 0000000..f758fa0 --- /dev/null +++ b/automanual/new/6-21.md @@ -0,0 +1,19 @@ + +[前へ](6-20.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-1.md) + + + +[ページトップへ](6-21.md) + +## 6.21. GOBACK + +図6-61-GOBACK構文 + +![alt text](Image/6-61-Goback.png) + +GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 + +1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 + +2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 + diff --git a/automanual/new/6-22-1.md b/automanual/new/6-22-1.md new file mode 100644 index 0000000..4b8a015 --- /dev/null +++ b/automanual/new/6-22-1.md @@ -0,0 +1,19 @@ + +[前へ](6-21.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-2.md) + + + +[ページトップへ](6-22-1.md) + +## 6.22. GO TO + +### 6.22.1. GO TO文の書き方1 ― GO TO + +図6-62-GOTO構文 + +![alt text](Image/6-62-Goto.png) + +プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 + +1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 + diff --git a/automanual/new/6-22-2.md b/automanual/new/6-22-2.md new file mode 100644 index 0000000..f1f151e --- /dev/null +++ b/automanual/new/6-22-2.md @@ -0,0 +1,29 @@ + +[前へ](6-22-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-23.md) + + + +[ページトップへ](6-22-2.md) + +### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON + +図6-63-GOTO DEPENDING ON構文 + +![alt text](Image/6-63-Goto.png) + +文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 + +1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 + +2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 + +3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 + +4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 + + 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE + + ![alt text](Image/6-64-Goto.png) + + 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 + diff --git a/automanual/new/6-23.md b/automanual/new/6-23.md new file mode 100644 index 0000000..be4e70b --- /dev/null +++ b/automanual/new/6-23.md @@ -0,0 +1,21 @@ + +[前へ](6-22-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-24.md) + + + +[ページトップへ](6-23.md) + +## 6.23. IF + +図6-65-IF構文 + +![alt text](Image/6-65-If.png) + +IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 + +1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 + diff --git a/automanual/new/6-24.md b/automanual/new/6-24.md new file mode 100644 index 0000000..d1d4ce6 --- /dev/null +++ b/automanual/new/6-24.md @@ -0,0 +1,43 @@ + +[前へ](6-23.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-25.md) + + + +[ページトップへ](6-24.md) + +## 6.24. INITIALIZE + +図6-66-INITIALIZE構文 + +![alt text](Image/6-66-Initialize.png) + +INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 + +1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 + + - 一意名-1として指定されたすべての基本項目。 + + - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: + + - USAGE INDEX項目は除外される。 + + - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 + + 以上は受け取り項目のリストである。 + +2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 + +3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 + +4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 + +5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 + +6. 各受け取り項目の初期化は、以下のルールに従って行われる。 + + - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 + + - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 + + - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 + diff --git a/automanual/new/6-25.md b/automanual/new/6-25.md new file mode 100644 index 0000000..1b48ec5 --- /dev/null +++ b/automanual/new/6-25.md @@ -0,0 +1,15 @@ + +[前へ](6-24.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-26.md) + + + +[ページトップへ](6-25.md) + +## 6.25. INITIATE + +図6-67-INITIATE構文 + +![alt text](Image/6-67-Initiate.png) + +INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + diff --git a/automanual/new/6-26.md b/automanual/new/6-26.md new file mode 100644 index 0000000..488e7e9 --- /dev/null +++ b/automanual/new/6-26.md @@ -0,0 +1,88 @@ + +[前へ](6-25.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-27.md) + + + +[ページトップへ](6-26.md) + +## 6.26. INSPECT + +図6-68-INSPECT構文 + +![alt text](Image/6-68-Inspect.png) + +INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 + +1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 + +2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 + +3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 + +INSPECT文のルールは、指定された句によって異なる。 + +**TALLYING句の場合:** + +TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 + +1. 一意名-2は編集不可の数値項目でなければならない。 + +2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 + +3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 + + a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 + +4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 + + 図6-69-INSPECT文TALLYING句の例
+ ![alt text](Image/6-69-Inspect.png) + + 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない + +**REPLACING句の場合:** + +REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 + +1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 + +3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 + +5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +6. ターゲット文字列は次のように識別できる: + + a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + +7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 + +**CONVERTING句の場合:** + +CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 + +1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 + +3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 + +4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 + +6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 + +8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 + diff --git a/automanual/new/6-27.md b/automanual/new/6-27.md new file mode 100644 index 0000000..ea7943f --- /dev/null +++ b/automanual/new/6-27.md @@ -0,0 +1,56 @@ + +[前へ](6-26.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-1.md) + + + +[ページトップへ](6-27.md) + +## 6.27. MERGE + +図6-70-MERGE構文 + +![alt text](Image/6-70-Merge.png) + +MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 + +1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 + +2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 + +3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 + +5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 + + MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 + +6. USING句で指定されたファイルには、以下のルールが適用される。 + + a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 + + b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 + + c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 + +7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 + +8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 + +9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 + +10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 + +11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 + +12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 + +13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** + +14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 + +15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 + +--- +`21` [4.2.2](4-2-2.md)参照。 + diff --git a/automanual/new/6-28-1.md b/automanual/new/6-28-1.md new file mode 100644 index 0000000..3cfc743 --- /dev/null +++ b/automanual/new/6-28-1.md @@ -0,0 +1,21 @@ + +[前へ](6-27.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-2.md) + + + +[ページトップへ](6-28-1.md) + +## 6.28. MOVE + +### 6.28.1. MOVE文の書き方1 ― MOVE + +図6-71-MOVE構文 + +![alt text](Image/6-71-Move.png) + +特定の値を一つ以上の受け取りデータ項目に移動することができる。 + +1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 + +2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 + diff --git a/automanual/new/6-28-2.md b/automanual/new/6-28-2.md new file mode 100644 index 0000000..d191f25 --- /dev/null +++ b/automanual/new/6-28-2.md @@ -0,0 +1,91 @@ + +[前へ](6-28-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-1.md) + + + +[ページトップへ](6-28-2.md) + +### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING + +図6-72-MOVE CORRESPONDING構文 + +![alt text](Image/6-72-Move.png) + +同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 + +1. CORRESPONDINGという単語は、CORRと省略される場合がある。 + +2. 一意名-1と一意名-2の両方が集団項目でなければならない。 + +3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: + + a. どちらも同じ名前ではあるがFILLERではない。 + + b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 + + c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 + + d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 + + e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 + +4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 + +この規則は、以下の例題を使うとよく理解できる。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. corrdemo. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 X. + 05 A VALUE 'A' PIC X(1). + 05 G1. + 10 G2. + 15 B VALUE 'B' PIC X(1). + 05 C. + 10 FILLER VALUE 'C' PIC X(1). + 05 G3. + 10 G4. + 15 D VALUE 'D' PIC X(1). + 05 V1 VALUE 'E' PIC X(1). + 05 E REDEFINES V1 PIC X(1). + 05 F VALUE 'F' PIC X(1). + 05 G VALUE ALL 'G'. + 10 G2 OCCURS 4 TIMES PIC X(1). + 05 H VALUE ALL 'H' PIC X(4). + 01 Y. + 02 A PIC X(1). + 02 G1. + 03 G2. + 04 B PIC X(1). + 02 C PIC X(1). + 02 G3. + 03 G5. + 04 D PIC X(1). + 02 E PIC X(1). + 02 V2 PIC X(1). + 02 G PIC X(4). + 02 H OCCURS 4 TIMES PIC X(1). + 66 F RENAMES V2. + PROCEDURE DIVISION. + 100-Main. + MOVE ALL '-' TO Y. + DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. + DISPLAY 'Before: ' Y. + MOVE CORR X TO Y. + DISPLAY ' After: ' Y. + STOP RUN + +DISPLAY文で表示される結果は以下の通りである。 + + Names: ABCDEFGGGGHHHH + Before: -------------- + After: ABC---GGGG---- + +- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 +- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 +- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 +- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 +- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 +- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 + diff --git a/automanual/new/6-29-1.md b/automanual/new/6-29-1.md new file mode 100644 index 0000000..ddba627 --- /dev/null +++ b/automanual/new/6-29-1.md @@ -0,0 +1,25 @@ + +[前へ](6-28-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-2.md) + + + +[ページトップへ](6-29-1.md) + +## 6.29. MULTIPLY + +### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY + +図6-73-MULTIPLY BY構文 + +![alt text](Image/6-73-Multiply.png) + +算術積を実行する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. それぞれ一意名-2を掛けた一意名-1またはinteger-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + diff --git a/automanual/new/6-29-2.md b/automanual/new/6-29-2.md new file mode 100644 index 0000000..872dde0 --- /dev/null +++ b/automanual/new/6-29-2.md @@ -0,0 +1,25 @@ + +[前へ](6-29-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-30.md) + + + +[ページトップへ](6-29-2.md) + +### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING + +図6-74-MULTIPLY GIVING構文 + +![alt text](Image/6-74-Multiply.png) + +二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. 一意名-1および一意名-2の値は変更できない。 + +5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + diff --git a/automanual/new/6-3.md b/automanual/new/6-3.md new file mode 100644 index 0000000..b59c71b --- /dev/null +++ b/automanual/new/6-3.md @@ -0,0 +1,25 @@ + +[前へ](6-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-1.md) + + + +[ページトップへ](6-3.md) + +## 6.3. 宣言の記述形式 + +図6-17-宣言構文 + +![alt text](Image/6-17.png) + +プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 + +1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 + +2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 + +4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 + +5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 + diff --git a/automanual/new/6-30.md b/automanual/new/6-30.md new file mode 100644 index 0000000..3e69f06 --- /dev/null +++ b/automanual/new/6-30.md @@ -0,0 +1,23 @@ + +[前へ](6-29-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-31.md) + + + +[ページトップへ](6-30.md) + +## 6.30. NEXT SENTENCE + +図6-75-NEXT SENTENCE構文 + +![alt text](Image/6-75-Nextsentnce.png) + +NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 + +1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 + +2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 + +3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 + +4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 + diff --git a/automanual/new/6-31.md b/automanual/new/6-31.md new file mode 100644 index 0000000..5764f0d --- /dev/null +++ b/automanual/new/6-31.md @@ -0,0 +1,38 @@ + +[前へ](6-30.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-1.md) + + + +[ページトップへ](6-31.md) + +## 6.31. OPEN + +図6-76-OPEN構文 + +![alt text](Image/6-76-Open.png) + +OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 + +1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 + +2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 + +3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 + +4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 + + | オプション | 処理 | + | --- | --- | + | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | + | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | + | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + +5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 + +6. WITH NO REWIND句とWITH LOCK句は機能しない。 + + WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 + + WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 + diff --git a/automanual/new/6-32-1.md b/automanual/new/6-32-1.md new file mode 100644 index 0000000..6b86350 --- /dev/null +++ b/automanual/new/6-32-1.md @@ -0,0 +1,71 @@ + +[前へ](6-31.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-2.md) + + + +[ページトップへ](6-32-1.md) + +## 6.32. PERFORM + +### 6.32.1. PERFORM文の書き方1 ― 手続き型 + +図6-77-手続き型PERFORM構文 + +![alt text](Image/6-77-Perform.png) + +制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 + +1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 + +2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 + +3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 +4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 + +5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 + +6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 + +7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 + +8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 + +9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 + +10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 + +11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 + + + 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 + + ![alt text](Image/6-32-1-1.png) + + ``` + 01 PERFORM-DEMO. + 05 PD-ROW OCCURS 3 TIMES. + 10 PD-COL OCCURS 4 TIMES. + 15 PD PIC X(1). + 01 PD-Col-No PIC 9 COMP. + 01 PD-Row-No PIC 9 COMP. + ``` + ![alt text](Image/6-32-1-2.png) + + ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 + PERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 + AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. + ``` + ![alt text](Image/6-32-1-3.png) + + 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. + ``` + diff --git a/automanual/new/6-32-2.md b/automanual/new/6-32-2.md new file mode 100644 index 0000000..3c1501d --- /dev/null +++ b/automanual/new/6-32-2.md @@ -0,0 +1,19 @@ + +[前へ](6-32-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-1.md) + + + +[ページトップへ](6-32-2.md) + +### 6.32.2. PERFORM文の書き方2 ― インライン型 + +図6-78-インライン型PERFORM構文 + +![alt text](Image/6-78-Perform.png) + +PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 + +1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 + +2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 + diff --git a/automanual/new/6-33-1.md b/automanual/new/6-33-1.md new file mode 100644 index 0000000..b7df7fe --- /dev/null +++ b/automanual/new/6-33-1.md @@ -0,0 +1,43 @@ + +[前へ](6-32-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-2.md) + + + +[ページトップへ](6-33-1.md) + +## 6.33. READ + +### 6.33.1. READ文の書き方1 ― 順次読み取り + +図6-79-READ構文(順次読み取り) + +![alt text](Image/6-79-Read.png) + +ファイルから次の(または前の)レコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 + +5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 + +7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 + +8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 + +11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 + diff --git a/automanual/new/6-33-2.md b/automanual/new/6-33-2.md new file mode 100644 index 0000000..9be3f9a --- /dev/null +++ b/automanual/new/6-33-2.md @@ -0,0 +1,51 @@ + +[前へ](6-33-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-34.md) + + + +[ページトップへ](6-33-2.md) + +### 6.33.2. READ文の書き方2 ― ランダム読み取り + +図6-80-READ構文(ランダム読み取り) + +![alt text](Image/6-80-Read.png) + +ファイルから任意のレコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 + +5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 + + KEY句がない場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 + + KEY句が指定されている場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 + +6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 + +10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 + diff --git a/automanual/new/6-34.md b/automanual/new/6-34.md new file mode 100644 index 0000000..3d843eb --- /dev/null +++ b/automanual/new/6-34.md @@ -0,0 +1,19 @@ + +[前へ](6-33-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-35.md) + + + +[ページトップへ](6-34.md) + +## 6.34. RELEASE + +図6-81-RELEASE構文 + +![alt text](Image/6-81-Release.png) + +RELEASE文は、整列ファイルに新しいレコードを追加する。 + +1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 + +2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 + diff --git a/automanual/new/6-35.md b/automanual/new/6-35.md new file mode 100644 index 0000000..881f31c --- /dev/null +++ b/automanual/new/6-35.md @@ -0,0 +1,21 @@ + +[前へ](6-34.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-36.md) + + + +[ページトップへ](6-35.md) + +## 6.35. RETURN + +図6-82-RETURN構文 + +![alt text](Image/6-82-Return.png) + +RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 + +1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 + +2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 + +3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 + diff --git a/automanual/new/6-36.md b/automanual/new/6-36.md new file mode 100644 index 0000000..efec47a --- /dev/null +++ b/automanual/new/6-36.md @@ -0,0 +1,41 @@ + +[前へ](6-35.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-37.md) + + + +[ページトップへ](6-36.md) + +## 6.36. REWRITE + +図6-83-REWRITE構文 + +![alt text](Image/6-83-Rewrite.png) + +REWRITE文は、ディスクファイル上の論理レコードを置き換える。 + +1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 + +2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 + +3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 + +4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 + +6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: + + a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 + + b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 + +7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: + + a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 + + b. レコード名-1のサイズは更新される可能性がある。 + +8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 + +9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 + diff --git a/automanual/new/6-37.md b/automanual/new/6-37.md new file mode 100644 index 0000000..cfb32f0 --- /dev/null +++ b/automanual/new/6-37.md @@ -0,0 +1,17 @@ + +[前へ](6-36.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-1.md) + + + +[ページトップへ](6-37.md) + +## 6.37. ROLLBACK + +図6-84-ROLLBACK構文 + +![alt text](Image/6-84-Rollback.png) + +ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 + +1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 + diff --git a/automanual/new/6-38-1.md b/automanual/new/6-38-1.md new file mode 100644 index 0000000..969dacb --- /dev/null +++ b/automanual/new/6-38-1.md @@ -0,0 +1,33 @@ + +[前へ](6-37.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-2.md) + + + +[ページトップへ](6-38-1.md) + +## 6.38. SEARCH + +### 6.38.1. SEARCH文の書き方1 ― 順次探索 + +図6-85-SEARCH構文(順次探索) + +![alt text](Image/6-85-Search.png) + +SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 + +1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 + +2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 + +3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: + ``` + SET 指標名-1 TO 1 + ``` +4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 + +5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 + +6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 + +7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 +  diff --git a/automanual/new/6-38-2.md b/automanual/new/6-38-2.md new file mode 100644 index 0000000..b7ddbc3 --- /dev/null +++ b/automanual/new/6-38-2.md @@ -0,0 +1,68 @@ + +[前へ](6-38-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-1.md) + + + +[ページトップへ](6-38-2.md) + +### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) + +図6-86-SEARCH構文(二分探索) + +![alt text](Image/6-86-Search.png) + +整列されたテーブルに対して二分探索を実行する。 + +1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 + +2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 + + a. テーブルは上記1項の要件を満たしている。 + + b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` + + c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 + + aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 + +3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 + +4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 + +5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 + +6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 + +7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 + +8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` + + a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 + + b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 + + - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 + + - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 + + - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 + + c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 + + d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 + +上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 + +コンピュータ研究者は、二つの探索方法を次のように比較する: + +- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 + +- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 + +探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 + +--- +`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 + +`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 + diff --git a/automanual/new/6-39-1.md b/automanual/new/6-39-1.md new file mode 100644 index 0000000..b4e9faa --- /dev/null +++ b/automanual/new/6-39-1.md @@ -0,0 +1,29 @@ + +[前へ](6-38-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-2.md) + + + +[ページトップへ](6-39-1.md) + +## 6.39. SET + +### 6.39.1. SET文の書き方1 ― 環境設定 + +図6-87-SET構文(環境設定) + +![alt text](Image/6-87-Set.png) + +プログラム内から環境値を簡単に設定することができる。 + +1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 + +2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 + + DSIPLAY SET ENVIRONMENT “VARNAME” TO + "VALUE" + “VARNAME” UPON ENVIRONMENT-NAME + END-DISPLAY + DSIPLAY + “VALUE” UPON ENVIRONMENT-VALUE + END-DISPLAY + diff --git a/automanual/new/6-39-2.md b/automanual/new/6-39-2.md new file mode 100644 index 0000000..92f09ae --- /dev/null +++ b/automanual/new/6-39-2.md @@ -0,0 +1,23 @@ + +[前へ](6-39-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-3.md) + + + +[ページトップへ](6-39-2.md) + +### 6.39.2. SET文の書き方2 ― プログラムポインター設定 + +図6-88-SET構文(プログラムポインター設定) + +![alt text](Image/6-88-Set.png) + +手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 + +1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 + +2. program-pointer-1はプログラムポインターとして使用しなければならない。 + +3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 + +4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 + diff --git a/automanual/new/6-39-3.md b/automanual/new/6-39-3.md new file mode 100644 index 0000000..886b8b0 --- /dev/null +++ b/automanual/new/6-39-3.md @@ -0,0 +1,19 @@ + +[前へ](6-39-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-4.md) + + + +[ページトップへ](6-39-3.md) + +### 6.39.3. SET文の書き方3 ― アドレス設定 + +図6-89-SET構文(アドレス設定) + +![alt text](Image/6-89-Set.png) + +データ項目の内容ではなく、アドレスを処理するために使われる。 + +1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 + +2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 + diff --git a/automanual/new/6-39-4.md b/automanual/new/6-39-4.md new file mode 100644 index 0000000..eff9259 --- /dev/null +++ b/automanual/new/6-39-4.md @@ -0,0 +1,17 @@ + +[前へ](6-39-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-5.md) + + + +[ページトップへ](6-39-4.md) + +### 6.39.4. SET文の書き方4 ― インデックス設定 + +図6-90-SET構文(インデックス設定) + +![alt text](Image/6-90-Set.png) + +USAGE INDEXデータ項目に値を割り当てる。 + +1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 + diff --git a/automanual/new/6-39-5.md b/automanual/new/6-39-5.md new file mode 100644 index 0000000..d96d07e --- /dev/null +++ b/automanual/new/6-39-5.md @@ -0,0 +1,18 @@ + +[前へ](6-39-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-6.md) + + + +[ページトップへ](6-39-5.md) + +### 6.39.5. SET文の書き方5 ― UP/DOWN設定 + +図6-91-SET構文(UP/DOWN設定) + +![alt text](Image/6-91-Set.png) + +インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 + +1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 + +2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 diff --git a/automanual/new/6-39-6.md b/automanual/new/6-39-6.md new file mode 100644 index 0000000..63a14ad --- /dev/null +++ b/automanual/new/6-39-6.md @@ -0,0 +1,21 @@ + +[前へ](6-39-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-7.md) + + + +[ページトップへ](6-39-6.md) + +### 6.39.6. SET文の書き方6 ― 条件名設定 + +図6-92-SET構文(条件名設定) + +![alt text](Image/6-92-Set.png) + +レベル88条件名のTRUE/FALSE値を指定することができる。 + +1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 + +2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 + +3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 + diff --git a/automanual/new/6-39-7.md b/automanual/new/6-39-7.md new file mode 100644 index 0000000..0cf8058 --- /dev/null +++ b/automanual/new/6-39-7.md @@ -0,0 +1,17 @@ + +[前へ](6-39-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-1.md) + + + +[ページトップへ](6-39-7.md) + +### 6.39.7. SET文の書き方7 ― スイッチ設定 + +図6-93-SET構文(スイッチ設定) + +![alt text](Image/6-93-Set.png) + +スイッチをオンまたはオフにする。 + +1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 + diff --git a/automanual/new/6-4-1.md b/automanual/new/6-4-1.md new file mode 100644 index 0000000..ee5b837 --- /dev/null +++ b/automanual/new/6-4-1.md @@ -0,0 +1,21 @@ + +[前へ](6-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-2.md) + + + +[ページトップへ](6-4-1.md) + +## 6.4. ACCEPT + +### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り + +図6-18-ACCEPT構文(コンソールからの読み取り) + +![alt text](Image/6-18.png) + +コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 + +1. FROM句を使う場合、指定するニーモニック名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義のニーモニック名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 + +2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 + diff --git a/automanual/new/6-4-2.md b/automanual/new/6-4-2.md new file mode 100644 index 0000000..dcfe801 --- /dev/null +++ b/automanual/new/6-4-2.md @@ -0,0 +1,32 @@ + +[前へ](6-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-3.md) + + + +[ページトップへ](6-4-2.md) + +### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 + +図6-19-ACCEPT構文(コマンドライン引数) + +![alt text](Image/6-19.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 + +2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 + + - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 + + - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 + + - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 + +3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 + +4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 + diff --git a/automanual/new/6-4-3.md b/automanual/new/6-4-3.md new file mode 100644 index 0000000..57fc778 --- /dev/null +++ b/automanual/new/6-4-3.md @@ -0,0 +1,24 @@ + +[前へ](6-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-4.md) + + + +[ページトップへ](6-4-3.md) + +### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 + +図6-20-ACCEPT構文(環境変数値の取得) + +![alt text](Image/6-20.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 + +2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 + +3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 + diff --git a/automanual/new/6-4-4.md b/automanual/new/6-4-4.md new file mode 100644 index 0000000..3c6a356 --- /dev/null +++ b/automanual/new/6-4-4.md @@ -0,0 +1,27 @@ + +[前へ](6-4-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-5.md) + + + +[ページトップへ](6-4-4.md) + +### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 + +図6-21-ACCEPT構文(画面データの取得) + +![alt text](Image/6-21.png) + +画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 + +1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 + +2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 + +4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 + +5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 + +6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + diff --git a/automanual/new/6-4-5.md b/automanual/new/6-4-5.md new file mode 100644 index 0000000..ed3515a --- /dev/null +++ b/automanual/new/6-4-5.md @@ -0,0 +1,21 @@ + +[前へ](6-4-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-6.md) + + + +[ページトップへ](6-4-5.md) + +### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 + +図6-22-ACCEPT構文(日付/時刻の取得)構文 + +![alt text](Image/6-22.png) + +システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 + +1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 + + 表6-23-ACCEPTオプション(日付/時刻の取得) + + ![!\[alt text\](Image/6-23.png)](Image/6-23.png) + diff --git a/automanual/new/6-4-6.md b/automanual/new/6-4-6.md new file mode 100644 index 0000000..c56d5d9 --- /dev/null +++ b/automanual/new/6-4-6.md @@ -0,0 +1,17 @@ + +[前へ](6-4-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-7.md) + + + +[ページトップへ](6-4-6.md) + +### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 + +図6-24-ACCEPT(画面サイズデータの取得)構文 + +![alt text](Image/6-24.png) + +プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 + +1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 + diff --git a/automanual/new/6-4-7.md b/automanual/new/6-4-7.md new file mode 100644 index 0000000..d056bff --- /dev/null +++ b/automanual/new/6-4-7.md @@ -0,0 +1,15 @@ + +[前へ](6-4-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-1.md) + + + +[ページトップへ](6-4-7.md) + +### 6.4.7. ACCEPT文の例外処理 + +図6-25-ACCEPT例外処理構文 + +![alt text](Image/6-25.png) + +ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 + diff --git a/automanual/new/6-40-1.md b/automanual/new/6-40-1.md new file mode 100644 index 0000000..dcb7d37 --- /dev/null +++ b/automanual/new/6-40-1.md @@ -0,0 +1,89 @@ + +[前へ](6-39-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-2.md) + + + +[ページトップへ](6-40-1.md) + +## 6.40. SORT + +### 6.40.1. SORT文の書き方1 ― ファイルソート + +図6-94-SORT構文(ファイルソート) + +![alt text](Image/6-94-Sort.png) + +一つ以上のキー項目に従って、大量のデータを整列することができる。 + +1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 + +2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 + +3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 + +6. SORT文は次の3段階の働きがある。 + + ステージ1(入力フェーズ): + + a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 + + b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 + + c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 + + d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 + + e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 + + g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 + + h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 + + ステージ2(ソートフェーズ): + + a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + + b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 + + SORT Sort-File + ASCENDING KEY Transaction-Date + ASCENDING KEY Account-Number + DESCENDING KEY Transaction-Amount + . + . + . + + + このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 + + c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 + + ステージ3(出力フェーズ): + + a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 + + b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 + + c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 + + d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 + + e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 + + g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 + +7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 + +--- +`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 + +`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 + diff --git a/automanual/new/6-40-2.md b/automanual/new/6-40-2.md new file mode 100644 index 0000000..1fd73d1 --- /dev/null +++ b/automanual/new/6-40-2.md @@ -0,0 +1,29 @@ + +[前へ](6-40-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-41.md) + + + +[ページトップへ](6-40-2.md) + +### 6.40.2. SORT文の書き方2 ― テーブルソート + +図6-95-SORT構文(テーブルソート) + +![alt text](Image/6-95-Set.png) + +一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 + +1. テーブル名データ項目には、OCCURS句が必要である。 + +2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 + +3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 + +5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 + +6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + +7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 + diff --git a/automanual/new/6-41.md b/automanual/new/6-41.md new file mode 100644 index 0000000..8950d46 --- /dev/null +++ b/automanual/new/6-41.md @@ -0,0 +1,41 @@ + +[前へ](6-40-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-42.md) + + + +[ページトップへ](6-41.md) + +## 6.41. START + +図6-96-START構文 + +![alt text](Image/6-96-Start.png) + +START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 + +1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 + +2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 + +3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 + +4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 + +5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 + +6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 + +7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 + + a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 + + b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 + +8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 + +9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 + +10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 + +11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 + diff --git a/automanual/new/6-42.md b/automanual/new/6-42.md new file mode 100644 index 0000000..6da445a --- /dev/null +++ b/automanual/new/6-42.md @@ -0,0 +1,26 @@ + +[前へ](6-41.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-43.md) + + + +[ページトップへ](6-42.md) + +## 6.42. STOP + +図6-97-STOP構文 + +![alt text](Image/6-97-Stop.png) + +STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 + +1. RETURNING句とGIVING句は同意義のものとして利用できる。 + +2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 + +3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 + +4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: + + STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE + STOP RUN + diff --git a/automanual/new/6-43.md b/automanual/new/6-43.md new file mode 100644 index 0000000..81672e3 --- /dev/null +++ b/automanual/new/6-43.md @@ -0,0 +1,37 @@ + +[前へ](6-42.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-1.md) + + + +[ページトップへ](6-43.md) + +## 6.43. STRING + +図6-98-STRING構文 + +![alt text](Image/6-98-String.png) + +STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 + +1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 + +2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 + +3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 + +4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 + +5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 + +6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 + +7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 + +8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 + +9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 + +10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 + +11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 + diff --git a/automanual/new/6-44-1.md b/automanual/new/6-44-1.md new file mode 100644 index 0000000..1fe0ad2 --- /dev/null +++ b/automanual/new/6-44-1.md @@ -0,0 +1,23 @@ + +[前へ](6-43.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-2.md) + + + +[ページトップへ](6-44-1.md) + +## 6.44. SUBTRACT + +### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM + +図6-99-SUBSTRACT構文 + +![alt text](Image/6-99-Subtract.png) + +FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/new/6-44-2.md b/automanual/new/6-44-2.md new file mode 100644 index 0000000..448727a --- /dev/null +++ b/automanual/new/6-44-2.md @@ -0,0 +1,23 @@ + +[前へ](6-44-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-3.md) + + + +[ページトップへ](6-44-2.md) + +### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING + +図6-100-SUBSTRACT GIVING構文 + +![alt text](Image/6-100-Subtract.png) + +FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/new/6-44-3.md b/automanual/new/6-44-3.md new file mode 100644 index 0000000..a7953d2 --- /dev/null +++ b/automanual/new/6-44-3.md @@ -0,0 +1,19 @@ + +[前へ](6-44-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-45.md) + + + +[ページトップへ](6-44-3.md) + +### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING + +図6-101-SUBSTRACT CORRESPONDING構文 + +![alt text](Image/6-101-Subtract.png) + +二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 + +1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/new/6-45.md b/automanual/new/6-45.md new file mode 100644 index 0000000..d12344c --- /dev/null +++ b/automanual/new/6-45.md @@ -0,0 +1,15 @@ + +[前へ](6-44-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-46.md) + + + +[ページトップへ](6-45.md) + +## 6.45. SUPPRESS + +図6-102-SUPPRESS構文 + +![alt text](Image/6-102-Suppress.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 + diff --git a/automanual/new/6-46.md b/automanual/new/6-46.md new file mode 100644 index 0000000..8886329 --- /dev/null +++ b/automanual/new/6-46.md @@ -0,0 +1,15 @@ + +[前へ](6-45.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-47.md) + + + +[ページトップへ](6-46.md) + +## 6.46. TERMINATE + +図6-103-TERMINATE構文 + +![alt text](Image/6-103-Terminate.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 + diff --git a/automanual/new/6-47.md b/automanual/new/6-47.md new file mode 100644 index 0000000..a0ccd05 --- /dev/null +++ b/automanual/new/6-47.md @@ -0,0 +1,31 @@ + +[前へ](6-46.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-48.md) + + + +[ページトップへ](6-47.md) + +## 6.47. TRANSFORM + +図6-104-TRANSFORM構文 + +![alt text](Image/6-104-Transform.png) + +TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 + +1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 + +2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 + +3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 + +4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 + +5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 + + 図6-105-機能的なTRANSFORM文 + + ![alt text](Image/6-105-Transform.png) + diff --git a/automanual/new/6-48.md b/automanual/new/6-48.md new file mode 100644 index 0000000..e6fe49d --- /dev/null +++ b/automanual/new/6-48.md @@ -0,0 +1,22 @@ + +[前へ](6-47.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-49.md) + + + +[ページトップへ](6-48.md) + +## 6.48. UNLOCK + +図6-106-UNLOCK構文 + +![alt text](Image/6-106-Unlock.png) + +この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 + +1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 + +2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 + +--- +`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 + diff --git a/automanual/new/6-49.md b/automanual/new/6-49.md new file mode 100644 index 0000000..eff9662 --- /dev/null +++ b/automanual/new/6-49.md @@ -0,0 +1,68 @@ + +[前へ](6-48.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-50.md) + + + +[ページトップへ](6-49.md) + +## 6.49. UNSTRING + +図6-107-UNSTRING構文 + +![alt text](Image/6-107-Unstring.png) + +UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 + +1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 + +2. 定数-1および定数-2は、英数字の定数でなければならない。 + +3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 + +4. 一意名-10の値は0より大きい必要がある。 + +5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 + +6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 + +7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 + +8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 + +9. ソース文字列が部分文字列に解析される例を次に示す: + + ![alt text](Image/6-49-1.png) + + 図6-108-STRING文の例 + + ![alt text](Image/6-108-Unstring.png) + + 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 + + ![alt text](Image/6-49-2.png) + + すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 + + すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 + +10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-3.png) + +11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-4.png) + +12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 + +13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 + +14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 + +15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 + +--- +`27` 空白文字列のMOVEは、空白のMOVEと同じである。 + +`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 + diff --git a/automanual/new/6-5-1.md b/automanual/new/6-5-1.md new file mode 100644 index 0000000..3c29b70 --- /dev/null +++ b/automanual/new/6-5-1.md @@ -0,0 +1,33 @@ + +[前へ](6-4-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-2.md) + + + +[ページトップへ](6-5-1.md) + +## 6.5. ADD + +### 6.5.1. ADD文の書き方1 ― ADD TO + +図6-26-ADD TO構文 + +![alt text](Image/6-26.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 + +4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 + +5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 + + 図6-27-ON SIZE ERROR句を使用するサンプルプログラム + + ![alt text](Image/6-27.png) + +6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 + diff --git a/automanual/new/6-5-2.md b/automanual/new/6-5-2.md new file mode 100644 index 0000000..2962ecd --- /dev/null +++ b/automanual/new/6-5-2.md @@ -0,0 +1,25 @@ + +[前へ](6-5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-3.md) + + + +[ページトップへ](6-5-2.md) + +### 6.5.2. ADD文の書き方2 ― ADD GIVING + +図6-28-ADD GIVING構文 + +![alt text](Image/6-28.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. 一意名-2の内容は変更できない。 + +5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + diff --git a/automanual/new/6-5-3.md b/automanual/new/6-5-3.md new file mode 100644 index 0000000..59526e1 --- /dev/null +++ b/automanual/new/6-5-3.md @@ -0,0 +1,19 @@ + +[前へ](6-5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-6.md) + + + +[ページトップへ](6-5-3.md) + +### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING + +図6-29-ADD CORRESPONDING構文 + +![alt text](Image/6-29.png) + +二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 + +1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + diff --git a/automanual/new/6-50.md b/automanual/new/6-50.md new file mode 100644 index 0000000..cdd5347 --- /dev/null +++ b/automanual/new/6-50.md @@ -0,0 +1,88 @@ + +[前へ](6-49.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-1.md) + + + +[ページトップへ](6-50.md) + +## 6.50. WRITE + +図6-109-WRITE構文 + +![alt text](Image/6-109-Write.png) + +WRITE文は、OPENファイルに新しいレコードを書き込む。 + +1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 + +2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 + +3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 + +4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 + +5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 + +6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 + +7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 + +8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 + +9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 + +10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 + +11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 + +12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 + +13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: + + a. AFTER ADVANCINGが指定されている場合: + + - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + c. BEFORE ADVANCINGが指定されている場合: + + - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 + + - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 + +14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 + + FD Report-File + LINAGE IS 66 LINES + ........WITH FOOTER AT 57 + ........LINES AT TOP 3 + ........LINES AT BOTTOM 3 + . + . + . + OPEN OUTPUT Report-File + PERFORM Generate-Page-Header + . + . + . + WRITE Report-Rec AFTER ADVANCING 1 LINE + AT END-OF-PAGE PERFORM Generate-Page-Header + END-WRITE + . + . + . + CLOSE Report-File + +15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 + +16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 + +17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 + diff --git a/automanual/new/6-6.md b/automanual/new/6-6.md new file mode 100644 index 0000000..fbdb325 --- /dev/null +++ b/automanual/new/6-6.md @@ -0,0 +1,49 @@ + +[前へ](6-5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-7.md) + + + +[ページトップへ](6-6.md) + +## 6.6. ALLOCATE + +図6-30-ALLOCATE構文 + +![alt text](Image/6-30.png) + +ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 + +1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 + +2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 + +3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 + +4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 + +5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 +6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 + +7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 + +8. 基本的な使用法は二つあり、最も単純なものは次の例である。 + + ALLOCATE My-01-Item + + `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 + + 二つ目の使用法は以下の通りである。 + + ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. + + SET ADDRESS OF My-01-Item TO The-Pointer. + + ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 + + 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 + +9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 + +--- +`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 + diff --git a/automanual/new/6-7.md b/automanual/new/6-7.md new file mode 100644 index 0000000..3f9934d --- /dev/null +++ b/automanual/new/6-7.md @@ -0,0 +1,54 @@ + +[前へ](6-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-1.md) + + + +[ページトップへ](6-7.md) + +## 6.7. CALL + +図6-31-CALL構文 + +![alt text](Image/6-31.png) + +CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 + +1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 + +2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 + +3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 + +4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 + +5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 + +6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 + +7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 + +8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 + +9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 + +10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 + +11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 + + 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) + + ![alt text](Image/6-32.png) + +12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 + + 図6-33-CALL BY VALUE句 + + ![alt text](Image/6-33.png) + +13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 + +14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 + +--- +`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 + diff --git a/automanual/new/6-8-1.md b/automanual/new/6-8-1.md new file mode 100644 index 0000000..243b792 --- /dev/null +++ b/automanual/new/6-8-1.md @@ -0,0 +1,19 @@ + +[前へ](6-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-2.md) + + + +[ページトップへ](6-8-1.md) + +## 6.8. CANSEL + +### 6.8.1. CANCEL文の書き方1 ― CANCEL + +図6-34-CANCEL構文 + +![alt text](Image/6-34.png) + +CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 + +1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 + diff --git a/automanual/new/6-8-2.md b/automanual/new/6-8-2.md new file mode 100644 index 0000000..bad41d5 --- /dev/null +++ b/automanual/new/6-8-2.md @@ -0,0 +1,15 @@ + +[前へ](6-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-9.md) + + + +[ページトップへ](6-8-2.md) + +### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL + +図6-35-CANCEL ALL構文 + +![alt text](Image/6-35(cancel).png) + +CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 + diff --git a/automanual/new/6-9.md b/automanual/new/6-9.md new file mode 100644 index 0000000..33e46a8 --- /dev/null +++ b/automanual/new/6-9.md @@ -0,0 +1,29 @@ + +[前へ](6-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-10.md) + + + +[ページトップへ](6-9.md) + +## 6.9. CLOSE + +図6-36-CLOSE構文 + +![alt text](Image/6-36-CLOSE.png) + +CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 + +1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 + +2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 + +3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 + +4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 + +5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 + +6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 + +7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 + diff --git a/automanual/new/7-1.md b/automanual/new/7-1.md new file mode 100644 index 0000000..2aba68f --- /dev/null +++ b/automanual/new/7-1.md @@ -0,0 +1,27 @@ + +[前へ](6-50.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-2.md) + + + +[ページトップへ](7-1.md) + +# 7. 日本語の使用 + +日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 + +## 7.1. 英数字項目の日本語 + +文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 + + + 01 データ項目1 PIC X(8) VALUE"顧客code" + + 01 データ項目2 PIC X(10) VALUE"顧客コード" + +データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 + +注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 + +1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 +2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) + diff --git a/automanual/new/7-2.md b/automanual/new/7-2.md new file mode 100644 index 0000000..5bd25bc --- /dev/null +++ b/automanual/new/7-2.md @@ -0,0 +1,20 @@ + +[前へ](7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-1.md) + + + +[ページトップへ](7-2.md) + +## 7.2. 日本語項目と表意定数 + +日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 + +表7-1-日本語項目と表意定数の値 + +| 表意定数 | シフトJISコード | +| --- | :--- | +| SPACE(S) | 日本語空白文字 X"8140" | +| HIGH-VALUE(S) | X"FFFF" | +| LOW-VALUE(S) | X"0000" | +| ALL 定数 | 定数の値に依存する | + diff --git a/automanual/new/7-3-1.md b/automanual/new/7-3-1.md new file mode 100644 index 0000000..abd66fb --- /dev/null +++ b/automanual/new/7-3-1.md @@ -0,0 +1,56 @@ + +[前へ](7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-2.md) + + + +[ページトップへ](7-3-1.md) + +## 7.3. 各命令文と日本語の取扱い + +### 7.3.1. MOVE文 + +MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 + +表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 + +表7-2-転記の処理方法 + +| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | +| :--- | :--- | :--- | +| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | +| 非整数 | 日本語,日本語編集 | コンパイルエラー | +| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 日本語,日本語編集 | 英字 | そのまま転記 | +| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | +| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | +| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | + +データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 + +文字には半角カタカナも含まれる。 + +ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 + +受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 + +表7-3-送出し側データ項目の内容に対する処理方法 + +| 送出し側データ項目の内容 | 処理方式 | +| --- | --- | +| 正しい文字 | 全角文字へコード変換 | +| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | +| 正しい日本語文字 | そのまま転記 | +| 不正な日本語文字(≠文字) | そのまま転記 | +| X”00” | X”0000”29 | +| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | +| X”FF” | X”FFFF” | +| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | + +ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 + +--- +`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 + diff --git a/automanual/new/7-3-2.md b/automanual/new/7-3-2.md new file mode 100644 index 0000000..265162b --- /dev/null +++ b/automanual/new/7-3-2.md @@ -0,0 +1,13 @@ + +[前へ](7-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-4.md) + + + +[ページトップへ](7-3-2.md) + +### 7.3.2. ACCEPT/DISPLAY文 + +ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 + +日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 + diff --git a/automanual/new/7-4.md b/automanual/new/7-4.md new file mode 100644 index 0000000..1255f6e --- /dev/null +++ b/automanual/new/7-4.md @@ -0,0 +1,19 @@ + +[前へ](7-3-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-1.md) + + + +[ページトップへ](7-4.md) + +## 7.4. UTF-8の使用 + +opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 + +1. PICTURE句において、「N」1つは3バイトと見なす。 + +2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 + +3. 空白詰めは半角空白で行われる。 + +4. STRING文において、項目の種類が混在した時のチェックを抑止する。 + diff --git a/automanual/new/8-1-1.md b/automanual/new/8-1-1.md new file mode 100644 index 0000000..e4fafe6 --- /dev/null +++ b/automanual/new/8-1-1.md @@ -0,0 +1,19 @@ + +[前へ](7-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-2.md) + + + +[ページトップへ](8-1-1.md) + +# 8. opensource COBOLシステムインターフェース + +## 8.1. opensource COBOLコンパイラの使い方(cobc) + +### 8.1.1. 解説 + +プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 +プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 +空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 +opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 +opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 + diff --git a/automanual/new/8-1-2.md b/automanual/new/8-1-2.md new file mode 100644 index 0000000..6c9638f --- /dev/null +++ b/automanual/new/8-1-2.md @@ -0,0 +1,95 @@ + +[前へ](8-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-3.md) + + + +[ページトップへ](8-1-2.md) + +### 8.1.2. コンパイルオプション + +次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 + + 使い方: cobc [options] file... + オプション: + --help このメッセージを表示します + --version, -V コンパイラのバージョンを表示します + -v コンパイラが起動したプログラムを表示します + -x 実行可能プログラムをビルドします + -m 動的ロード可能モジュールをビルドします(デフォルト) + -std=<方言> 指定した方言に基づいて警告/機能します : + cobol2002 Cobol 2002 + cobol85 Cobol 85 + ibm IBM互換 + mvs MVS互換 + bs2000 BS2000互換 + mf Micro Focus互換 + default 指定しない + config/default.conf および config/*.conf を参照してください + -free 自由形式を使用します + -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します + -fixed 固定形式を使用します(デフォルト) + -O, -O2, -Os 最適化を有功にします + -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします + -debug すべての実行時エラーチェックを有功にします + -o <ファイル> 出力先を <ファイル> にします + -b すべての入力ファイルをひとつに結合します + 動的ロード可能モジュール + -E 前処理のみ; コンパイルやリンクを行いません + -C トランスレートのみ; COBOL から C へ変換します + -S コンパイルのみ; アセンブリファイルを出力します + -c コンパイルとアセンブルを行い、リンクを行いません + -t <ファイル> プログラムリストを <ファイル> に生成します + -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます + -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます + -l ライブラリ をリンクします + -B Cコンパイルフェーズに を追加します + -Q Cリンクフェーズに を追加します + -D Cコンパイラに を渡します + -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください + --list-reserved 予約語の一覧を表示します + --list-intrinsics 組み込み関数の一覧を表示します + --list-mnemonics 作成者語の一覧を表示します + -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) + -MT 依存関係リストで使用される対象ファイルを指定します + -MF <ファイル> 依存関係リストを <ファイル> に生成します + -ext 既定のファイル拡張子を追加します + -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします + -reference_check 実行時の参照チェックを有効にします + -constant(=) $IF 文で評価する定数名 に 値 を設定します + + -W すべての警告を有功にする + -Wall 以下を除くすべての警告を有功にする + -Wobsolete 廃要素が使われていれば警告する + -Warchaic 古い仕様が使われていれば警告する + -Wredefinition データ項目の再定義を警告する + -Wconstant 不適切な定数を警告する + -Wparentheses OR と AND が括弧なしで並んでいれば警告する + -Wstrict-typing タイプの不適合を厳密に警告する + -Wimplicit-define データ項目の再定義を警告する + -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する + (-Wall指定時は適用されません) + -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) + -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) + -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) + -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) + -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) + -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) + + -ftrace トレースコードの生成(実行された節/段落の追跡) + -ftraceall トレースコードの生成(実行された節/段落/文の追跡) + -fsyntax-only 文法チェックのみ。何も出力しない + -fdebugging-line デバッグ行(標識領域に'D')を有効にする + -fsource-location ソース行情報の生成(-debugか-gで有効) + -fimplicit-init Cobolラインタイム初期化の自動実行 + -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) + -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) + -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) + -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) + -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) + -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない + -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す + -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) + -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す + +[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 + diff --git a/automanual/new/8-1-3.md b/automanual/new/8-1-3.md new file mode 100644 index 0000000..5104825 --- /dev/null +++ b/automanual/new/8-1-3.md @@ -0,0 +1,17 @@ + +[前へ](8-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-4.md) + + + +[ページトップへ](8-1-3.md) + +### 8.1.3. 実行可能プログラムのコンパイル + +最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 + + cobc –x prog1.cbl prog2.cbl prog3.cbl + +メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 + +これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 + diff --git a/automanual/new/8-1-4.md b/automanual/new/8-1-4.md new file mode 100644 index 0000000..a958219 --- /dev/null +++ b/automanual/new/8-1-4.md @@ -0,0 +1,42 @@ + +[前へ](8-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-5.md) + + + +[ページトップへ](8-1-4.md) + +### 8.1.4. 動的にロード可能なサブプログラム + +実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 + + cobc –m sprog1.cbl +または + + cobc –m sprog1.cbl sprog2.cbl sprog3.cbl + +上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 + +次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 + +1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 + +2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 + +3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 + +4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき + + a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 + + b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 + + c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 + + - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 + + - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 + +5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 + +「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 + diff --git a/automanual/new/8-1-5.md b/automanual/new/8-1-5.md new file mode 100644 index 0000000..1fa0bdf --- /dev/null +++ b/automanual/new/8-1-5.md @@ -0,0 +1,23 @@ + +[前へ](8-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-6.md) + + + +[ページトップへ](8-1-5.md) + +### 8.1.5. 静的サブルーチン + +opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 + + cobc –S sprog1.cbl + +(注:「**-S**」は大文字で表記する) + +これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 + +メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 + + cobc –x mainprog.cbl sprog1.s + +複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 + diff --git a/automanual/new/8-1-6.md b/automanual/new/8-1-6.md new file mode 100644 index 0000000..9af3ced --- /dev/null +++ b/automanual/new/8-1-6.md @@ -0,0 +1,139 @@ + +[前へ](8-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-7.md) + + + +[ページトップへ](8-1-6.md) + +### 8.1.6. COBOLとCプログラムの結合 + +opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 + +#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 + +COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 + +#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い + +どちらの言語も、文字列を固定長の連続した文字順序として格納する。 + +COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: + + 01 LastName PIC X(15). + +USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 + +実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: + + char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ + +Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 + +#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 + +これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 + +表8-1-Cまたはopensource COBOLのデータ型の一致 + +| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | +| :--- | :--- | :--- | :--- | +|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | +| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | +| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | +| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| +| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | +| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | +| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | +| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | +|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | +|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | +|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | +| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | + + + + +同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 + +様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 + +#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し + +CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 + +図8-2-opensource COBOLのC呼び出し + +![alt text](Image/8-2.png) + +考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 + +COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 + +Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` + +これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + $ cc –c subc.c + $ cobc -x maincob.cbl subc.o + $ maincob + Starting cobmain + Starting subc + Arg1=Arg1 + Arg2=Arg2 + Arg3=123456789 + Back + Arg1=Arg1 + Arg2=Yrg2 + Arg3=+0987654321 + Returned value=+000000002 + $ + + + +null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 + +[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 + +#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し + +ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 + +図8-3-Cのopensource COBOL呼び出し + +![alt text](Image/8-3.png) + +Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 + +「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 + +Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 + +コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl + C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob + C:\Users\Gary\Documents\Programs> mainc.exe + Starting mainc... + Starting cobsub.cbl + Arg1=Arg1 + Arg2=Arg2 + Arg3=+0123456789 + Back + Arg1=Xrg1 + Arg2=Xrg2 + Arg3=987654321 + Returned value=2 + C:\Users\Gary\Documents\Programs> + + +第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 + +ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 + +--- +`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 + +`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 + +`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 + diff --git a/automanual/new/8-1-7.md b/automanual/new/8-1-7.md new file mode 100644 index 0000000..b2ed12a --- /dev/null +++ b/automanual/new/8-1-7.md @@ -0,0 +1,36 @@ + +[前へ](8-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-8.md) + + + +[ページトップへ](8-1-7.md) + +### 8.1.7. 重要な環境変数 + +次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 + +表8-4-環境変数コンパイラ + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | +| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | +| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | +| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | +|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | +| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | +| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | +| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | +| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | +| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | +| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | +|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | +|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | + +--- +`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 + diff --git a/automanual/new/8-1-8.md b/automanual/new/8-1-8.md new file mode 100644 index 0000000..87e655e --- /dev/null +++ b/automanual/new/8-1-8.md @@ -0,0 +1,31 @@ + +[前へ](8-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-9.md) + + + +[ページトップへ](8-1-8.md) + +### 8.1.8. コンパイル時のコピーブックの検索 + +opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 + +- コンパイルされるプログラムが存在するフォルダ。 +- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 +- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 +- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 + +上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 + +- XXXXXXXX.CPY +- XXXXXXXX.CBL +- XXXXXXXX.COB +- XXXXXXXX.cpy +- XXXXXXXX.cbl +- XXXXXXXX.cob +- XXXXXXXX + +UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 + +--- +`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 + diff --git a/automanual/new/8-1-9.md b/automanual/new/8-1-9.md new file mode 100644 index 0000000..9a6c305 --- /dev/null +++ b/automanual/new/8-1-9.md @@ -0,0 +1,123 @@ + +[前へ](8-1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-1.md) + + + +[ページトップへ](8-1-9.md) + +### 8.1.9. コンパイラ構成ファイルの使い方 + +opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 + +以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 + +``` +# COBOL compiler configuration -*- sh -*- + +# Value: any string +name: "opensource COBOL" + +# Value: int +tab-width: 8 +text-column: 72 + +# Value: 'cobol2002', 'mf', 'ibm' +# +assign-clause: mf + +# If yes, file names are resolved at run time using environment variables. +# For example, given ASSIGN TO "DATAFILE", the actual file name will be +# 1. the value of environment variable 'DD_DATAFILE' or +# 2. the value of environment variable 'dd_DATAFILE' or +# 3. the value of environment variable 'DATAFILE' or +# 4. the literal "DATAFILE" +# If no, the value of the assign clause is the file name. +# +# Value: 'yes', 'no' +filename-mapping: yes + +# Value: 'yes', 'no' +pretty-display: yes + +# Value: 'yes', 'no' +auto-initialize: yes + +# Value: 'yes', 'no' +complex-odo: no + +# Value: 'yes', 'no' +indirect-redefines: no + +# Binary byte size - defines the allocated bytes according to PIC +# Value: signed unsigned bytes +# ------ -------- ----- +# '2-4-8' 1 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1-2-4-8' 1 - 2 1 +# 3 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1--8' 1 - 2 1 - 2   1 +# 3 - 4 3 - 4 2 +# 5 - 6 5 - 7 3 +# 7 - 9 8 - 9 4 +# 10 - 11 10 - 12 5 +# 12 - 14 13 - 14 6 +# 15 - 16 15 - 16 7 +# 17 - 18 17 - 18 8 +binary-size: 1-2-4-8 + +# Value: 'yes', 'no' +binary-truncate: yes + +# Value: 'native', 'big-endian' +binary-byteorder: big-endian + +# Value: 'yes', 'no' +larger-redefines-ok: no + +# Value: 'yes', 'no' +relaxed-syntax-check: no + +# Perform type OSVS - If yes, the exit point of any currently executing perform +# is recognized if reached. +# Value: 'yes', 'no' +perform-osvs: no + +# If yes, linkage-section items remain allocated +# between invocations. +# Value: 'yes', 'no' +sticky-linkage: no + +# If yes, allow non-matching level numbers +# Value: 'yes', 'no' +relax-level-hierarchy: no + +# not-reserved: +# Value: Word to be taken out of the reserved words list +# (case independent) + +# Dialect features +# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' +author-paragraph: obsolete +memory-size-clause: obsolete +multiple-file-tape-clause: obsolete +label-records-clause: obsolete +value-of-clause: obsolete +data-records-clause: obsolete +top-level-occurs-clause: skip +synchronized-clause: ok +goto-statement-without-name: obsolete +stop-literal-statement: obsolete +debugging-line: obsolete +padding-character-clause: obsolete +next-sentence-phrase: archaic +eject-statement: skip +entry-statement: obsolete +move-noninteger-to-alphanumeric: error +odo-without-to: ok +``` + diff --git a/automanual/new/8-2-1.md b/automanual/new/8-2-1.md new file mode 100644 index 0000000..3e791ea --- /dev/null +++ b/automanual/new/8-2-1.md @@ -0,0 +1,31 @@ + +[前へ](8-1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-2.md) + + + +[ページトップへ](8-2-1.md) + +## 8.2. opensource COBOLプログラムの実行 + +### 8.2.1. プログラムの直接実行 + +「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 + +これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 + +これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 + +プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 + +プログラムの直接実行構文は次の通りである。 + + [path]program [arguments] + +例: +``` + /usr/local/printaccount ACCT=6625378 + または + C:\Users\Me\Documents\Programs\printaccount.exe + ACCT=6625378 +``` + diff --git a/automanual/new/8-2-2.md b/automanual/new/8-2-2.md new file mode 100644 index 0000000..f53d6be --- /dev/null +++ b/automanual/new/8-2-2.md @@ -0,0 +1,29 @@ + +[前へ](8-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-3.md) + + + +[ページトップへ](8-2-2.md) + +### 8.2.2. 「cobcrun」ユーティリティの使用 + +「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 + +opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 + +この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: + + [path]cobcrun program [arguments] + +プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 + +cobcrunの使用例: + + cd /usr/local + cobcrun printaccount ACCT=6625378 + または + cd C:\Users\Me\Documents\Programs + cobcrun printaccount.exe ACCT=6625378 + +cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 + diff --git a/automanual/new/8-2-3.md b/automanual/new/8-2-3.md new file mode 100644 index 0000000..9a071df --- /dev/null +++ b/automanual/new/8-2-3.md @@ -0,0 +1,14 @@ + +[前へ](8-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-4.md) + + + +[ページトップへ](8-2-3.md) + +### 8.2.3. プログラムの引数 + +プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 + +- ACCEPT ・・・ FROM COMMAND-LINE +- ACCEPT ・・・ FROM ARGUMENT-VALUE + diff --git a/automanual/new/8-2-4.md b/automanual/new/8-2-4.md new file mode 100644 index 0000000..6e78fc3 --- /dev/null +++ b/automanual/new/8-2-4.md @@ -0,0 +1,31 @@ + +[前へ](8-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-3-1.md) + + + +[ページトップへ](8-2-4.md) + +### 8.2.4. 重要な環境変数 + +次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 + +表8-5-実行時環境変数 + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| +|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | +|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | +|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| +|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| +|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| +|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| +|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| + +--- +`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 +`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 +`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 + diff --git a/automanual/new/8-3-1.md b/automanual/new/8-3-1.md new file mode 100644 index 0000000..0e9ae8b --- /dev/null +++ b/automanual/new/8-3-1.md @@ -0,0 +1,756 @@ + +[前へ](8-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-1.md) + + + +[ページトップへ](8-3-1.md) + +## 8.3. 組み込みサブルーチン + +### 8.3.1. 「名前による呼び出し」ルーチン + +opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 + +これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 + + +- 現在のディレクトリの変更 +- ファイルのコピー +- ディレクトリの作成 +- ファイルの作成、開く、閉じる、読み取り、書き込み +- ディレクトリ(フォルダ)の削除 +- ファイルの削除 +- サブルーチンに渡された引数の数の決定 +- ファイル情報の取得(サイズと最終変更日時) +- サブルーチンに渡される引数の長さ(バイト単位)の取得 +- 項目の左揃え、右揃え、または中央揃えの決定 +- ファイルの移動(破壊的な「コピー」) +- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする +- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする + + 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない +- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する + +次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 + +#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* + +このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 + +*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 + +statusは次のいずれかの値を受け取る。 + +| | | +| --- | --- | +| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | +| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | +| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | + + +#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 + +[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 + +#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +第3引数は必須ではあるが、使用されない。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 + +#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +第2引数は必須ではあるが、使用されない。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 + +#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* + +このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 File-Info. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date + 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time + +変更時刻の小数点以下2桁は常に0である。 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 + +#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” + +C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 + +- なし 「R」と同じように扱われる +- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる +- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる +- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる +- それ以外 「R」として扱われる + +#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* + +このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 + +与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 + +| | | +| --- | --- | +| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | +| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | +| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | + +``` + 01 PATTERN PIC X(5) VALUE "*". + 01 DIRECTORY PIC X(256) VALUE + "./list". + 01 FILENAME PIC X(30). + 01 MYDIR PIC 9(8) COMP-5. + PROCEDURE DIVISION. + CALL "C$LIST-DIRECTORY" USING 1, + DIRECTORY, + PATTERN + END-CALL. + MOVE RETURN-CODE TO MYDIR. + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL. + PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES + DISPLAY FUNCTION TRIM(FILENAME) + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL + END-PERFORM. + CALL "C$LIST-DIRECTORY" USING 3, MYDIR + END-CALL. +``` + +#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 + +#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* + +C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 + +メインプログラムからCALLされた場合、戻り値は常に0になる。 + +[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 + +#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* + +このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 + +サイズは、RETURN-CODE特殊レジスタに返される。 + +指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 + +#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* + +C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 + +1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 + +[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 + +#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 + +#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 + +#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「AND」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 + +操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 + +[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 + +#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* + +このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 Argument-2. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-DD PIC 9(2) COMP. *> Modification Time + 05 Mod-MO PIC 9(2) COMP. + 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date + 05 Mod-HH PIC 9(2) COMP. + 05 Mod-MM PIC 9(2) COMP. + 05 Mod-SS PIC 9(2) COMP. + 05 FILLER PIC 9(2) COMP. *> This will always be 00 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 + +#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* + +CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 + +*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 + +サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 + +#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 + +#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 + +#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* + +CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 + +引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` + +後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 + +サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 + +[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 + +#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* + +CBL_DELETE_DIRを使って空のディレクトリを削除する。 + +唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 + +指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 + +RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 + +#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* + +このルーチンは、一般的なエラー処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 + +一度に有効にできるユーザ定義のエラー手続きは1つだけである。 + +エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 + +エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoerrproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Err-Proc. + SET Err-Proc-Address TO ENTRY "999-Err" + CALL "CBL_ERROR_PROC" + USING Err-Proc-Install, Err-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not' & + 'register Error Procedure' + END-IF + . + 099-Now-Test-Err-Proc. + CALL "Tilt" END-CALL + GOBACK + . + 999-Err-Proc. + ENTRY "999-Err" + DISPLAY + '** A Runtime Error Has Occurred **' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* + +このルーチンは、一般的な終了処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 + +一度に有効にできるユーザ定義の終了手続きは1つだけである。 + +終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 + +終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoexitproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Exit-Proc. + SET Exit-Proc-Address TO ENTRY "999-Exit" + CALL "CBL_EXIT_PROC" + USING Exit-Proc-Install, Exit-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not register Exit Procedure' + END-IF + 099-Now-Test-Exit-Proc. + DISPLAY + 'Executing a STOP RUN...' + END-DISPLAY + GOBACK + . + 999-Exit-Proc. + ENTRY "999-Exit" + DISPLAY + '*** STOP RUN has been executed ***' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「EQ」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* + +このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 + +このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 + +#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* + +現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 + +第1引数は使用されないが、**BY VALUE**で指定する必要がある。 + +*length*引数は**BY VALUE**で指定する必要がある。 + +*buffer*引数は**BY REFERENCE**で指定する必要がある。 + +*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 + +*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 + +ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 + +#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「IMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 1 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NIMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* + +このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 + +項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOT」プロセスを示している。 + +| 古い引数2ビット | 新しい引数2ビット | +| :---: | :---: | +| 0 | 1 | +| 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* + +CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 + +item-1として次の集団項目を定義する。 + + 01 KEISEN. + 02 KEI-CMD PIC 9(1) COMP-X. + 02 KEI-LINE PIC 9(2) COMP-X. + 02 KEI-COL PIC 9(2) COMP-X. + 02 KEI-LNG1 PIC 9(2) COMP-X. + 02 KEI-LNG2 PIC 9(2) COMP-X. + 02 KEI-COLOR PIC 9(2) COMP-X. + 02 KEI-PRN PIC 9(2) COMP-X. + +各項目の意味を以下に示す。 + +| | | +| --- | --- | +| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| +| KEI-LINE | 開始ライン(1~24) | +| KEI-COL | 開始カラム(1~80) | +| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | +| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | +| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | +| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | + +#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* + +CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 + +*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 + +1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 + +[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 + +#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* + +このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 + +*file-path*引数は、英数字定数またはデータ項目である。 + +*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 + +- 1 = 入力 (読み取り専用) +- 2 = 出力 (書き込み専用) +- 3 = 入力または出力 + +第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 + +最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 + +RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 + +[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 + +#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「OR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 1 | + + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer + +このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 + +*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* + +このサブルーチンを使用してファイル名を変更できる。 + +*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 + +このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 + +ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 + +#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 + +#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 + +#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* + +このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 +唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「XOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.42. CALL “SYSTEM” USING *command* + +このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 + +CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 + +コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 + +Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 + +ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 + +実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 + +--- +`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
+`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
+ diff --git a/automanual/new/9-1.md b/automanual/new/9-1.md new file mode 100644 index 0000000..3a3f907 --- /dev/null +++ b/automanual/new/9-1.md @@ -0,0 +1,58 @@ + +[前へ](8-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-2.md) + + + +[ページトップへ](9-1.md) + +# 9. サンプルプログラム + +## 9.1. FileStat-Msgs.cpy – ファイル状態コード + +このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 + +コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 + +``` + COPY FileStat-Msgs + REPLACING STATUS BY Input-File-Status + MSG BY Error-Message. +``` + +以下は、コピーブック「FileStat-Msgs.cpy」である。 + +``` + EVALUATE STATUS + WHEN 00 MOVE 'SUCCESS ' TO MSG + WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG + WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG + WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG + WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG + WHEN 10 MOVE 'END OF FILE ' TO MSG + WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG + WHEN 21 MOVE 'KEY INVALID ' TO MSG + WHEN 22 MOVE 'KEY EXISTS ' TO MSG + WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG + WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG + WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG + WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG + WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG + WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG + WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG + WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG + WHEN 41 MOVE 'ALREADY OPEN ' TO MSG + WHEN 42 MOVE 'NOT OPEN ' TO MSG + WHEN 43 MOVE 'READ NOT DONE ' TO MSG + WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG + WHEN 46 MOVE 'READ ERROR ' TO MSG + WHEN 47 MOVE 'INPUT DENIED ' TO MSG + WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG + WHEN 49 MOVE 'I/O DENIED ' TO MSG + WHEN 51 MOVE 'RECORD LOCKED ' TO MSG + WHEN 52 MOVE 'END-OF-PAGE ' TO MSG + WHEN 57 MOVE 'I/O LINAGE ' TO MSG + WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG + WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG + END-EVALUATE. +``` + diff --git a/automanual/new/9-2.md b/automanual/new/9-2.md new file mode 100644 index 0000000..01d2ad6 --- /dev/null +++ b/automanual/new/9-2.md @@ -0,0 +1,205 @@ + +[前へ](9-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](credit.md) + + + +[ページトップへ](9-2.md) + +## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン + +次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 + +``` +IDENTIFICATION DIVISION. +PROGRAM-ID. COBDUMP. +***************************************************************** +** This is an OpenCOBOL subroutine that will generate a ** +** formatted Hex/Char dump of a storage area. To use this ** +** subroutine, simply CALL it as follows: ** +** ** +** CALL "COBDUMP" USING ** +** [ ] ** +** ** +** If specified, the argument specifies how many ** +** bytes of are to be dumped. If absent, all of ** +** will be dumped (i.e. LENGTH() will ** +** be assumed for ). ** +** ** +** >>> Note that the subroutine name MUST be specified in <<< ** +** >>> UPPERCASE <<< ** +** ** +** The dump is generated to STDERR, so you may pipe it to a ** +** file when you execute your program using "2> file". ** +** ** +** AUTHOR: GARY L. CUTLER ** +** CutlerGL@gmail.c ** +** ** +** NOTE: The author has a sentimental attachment to ** +** this subroutine - it's been around since 1971 ** +** and it's been converted to and run on 10 dif- ** +** ferent operating system/compiler environments ** +** ** +** DATE-WRITTEN: October 14, 1971 ** +** ** +***************************************************************** +** DATE CHANGE DESCRIPTION ** +** ====== ==================================================== ** +** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** +** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** +** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** +** SCREEN SECTION enhancements ** +** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** +** GC0983 Converted to IBM VS COBOL - COBOL '74 ** +** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** +** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** +** extensions ** +** GC0703 Converted to Unisys Universal Compiling System (UCS) ** +** COBOL (UCOB) - COBOL '85 ** +** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** +** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** +** 2002 features ** +** GC0410 Enhanced to make 2nd argument (buffer length) ** +** optional ** +***************************************************************** +ENVIRONMENT DIVISION. +CONFIGURATION SECTION. +REPOSITORY. + FUNCTION ALL INTRINSIC. +DATA DIVISION. +WORKING-STORAGE SECTION. +78 Undisplayable-Char-Symbol VALUE X'F9'. +01 Addr-Pointer USAGE POINTER. +01 Addr-Number REDEFINES Addr-Pointer + USAGE BINARY-LONG. + +01 Addr-Sub USAGE BINARY-CHAR. + +01 Addr-Value USAGE BINARY-LONG. + +01 Buffer-Length USAGE BINARY-LONG. + +01 Buffer-Sub COMP-5 PIC 9(4). + +01 Hex-Digits VALUE '0123456789ABCDEF'. +05 Hex-Digit OCCURS 16 TIMES PIC X(1). + +01 Left-Nibble COMP-5 PIC 9(1). +01 Nibble REDEFINES Left-Nibble + BINARY-CHAR. +01 Output-Detail. +05 OD-Addr. +10 OD-Addr-Hex OCCURS 8 TIMES PIC X. +05 FILLER PIC X(1). +05 OD-Byte PIC Z(3)9. +05 FILLER PIC X(1). +05 OD-Hex OCCURS 16 TIMES. +10 OD-Hex-1 PIC X. +10 OD-Hex-2 PIC X. +10 FILLER PIC X. +05 OD-ASCII OCCURS 16 TIMES + PIC X. +01 Output-Sub COMP-5 PIC 9(2). + +01 Output-Header-1. + 05 FILLER PIC X(80) VALUE + '<-Addr-> Byte ' & + '<---------------- Hexadecimal ----------------> ' & + '<---- Char ---->'. +01 Output-Header-2. + 05 FILLER PIC X(80) VALUE + '======== ==== ' & + '=============================================== ' & + '================'. +01 PIC-XX. +05 FILLER PIC X VALUE LOW-VALUES. +05 PIC-X PIC X. +01 PIC-Halfword REDEFINES PIC-XX + PIC 9(4) COMP-X. +01 PIC-X10. +05 FILLER PIC X(2). +05 PIC-X8 PIC X(8). +01 Right-Nibble COMP-5 PIC 9(1). + +LINKAGE SECTION. +01 Buffer PIC X ANY LENGTH. + +01 Buffer-Len USAGE BINARY-LONG. +PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. +000-COBDUMP. + IF NUMBER-OF-CALL-PARAMETERS = 1 + MOVE LENGTH(Buffer) TO Buffer-Length + ELSE + MOVE Buffer-Len TO Buffer-Length + END-IF + MOVE SPACES TO Output-Detail + SET Addr-Pointer TO ADDRESS OF Buffer + PERFORM 100-Generate-Address + MOVE 0 TO Output-Sub + DISPLAY + Output-Header-1 UPON SYSERR + END-DISPLAY + DISPLAY + Output-Header-2 UPON SYSERR + END-DISPLAY + PERFORM VARYING Buffer-Sub FROM 1 BY 1 + UNTIL Buffer-Sub > Buffer-Length + ADD 1 + TO Output-Sub + END-ADD + IF Output-Sub = 1 + MOVE Buffer-Sub TO OD-Byte + END-IF + MOVE Buffer (Buffer-Sub : 1) TO PIC-X + IF (PIC-X < ' ') + OR (PIC-X > '~') + MOVE Undisplayable-Char-Symbol + TO OD-ASCII (Output-Sub) + ELSE + MOVE PIC-X + TO OD-ASCII (Output-Sub) + END-IF + DIVIDE PIC-Halfword BY 16 + GIVING Left-Nibble + REMAINDER Right-Nibble + END-DIVIDE + ADD 1 TO Left-Nibble + Right-Nibble + END-ADD + MOVE Hex-Digit (Left-Nibble) + TO OD-Hex-1 (Output-Sub) + MOVE Hex-Digit (Right-Nibble) + TO OD-Hex-2 (Output-Sub) + IF Output-Sub = 16 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + MOVE SPACES TO Output-Detail + MOVE 0 TO Output-Sub + SET Addr-Pointer UP BY 16 + PERFORM 100-Generate-Address + END-IF +END-PERFORM +IF Output-Sub > 0 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + END-IF + EXIT PROGRAM + . +100-Generate-Address. + MOVE 8 TO Addr-Sub + MOVE Addr-Number TO Addr-Value + MOVE ALL '0' TO OD-Addr + PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 + DIVIDE Addr-Value BY 16 + GIVING Addr-Value + REMAINDER Nibble + END-DIVIDE + ADD 1 TO Nibble + MOVE Hex-Digit (Nibble) + TO OD-Addr-Hex (Addr-Sub) + SUBTRACT 1 FROM Addr-Sub +END-PERFORM +. +``` + diff --git a/automanual/new/TOC.md b/automanual/new/TOC.md new file mode 100644 index 0000000..353ce12 --- /dev/null +++ b/automanual/new/TOC.md @@ -0,0 +1,238 @@ +目次 +1. [まえがき](1-1.md) + - [1.1. opensource COBOL とは](1-1.md#11-opensource-cobolとは) + - [1.2. COBOL/opensource COBOL の重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) + - [1.2.1. COBOL プログラムの構文](1-2-1.md#121-cobolプログラムの構文) + - [1.2.2. コピーブック](1-2-2.md) + - [1.2.3. 構造化データ](1-2-3.md) + - [1.2.4. ファイル](1-2-4.md) + - [1.2.5. 表操作](1-2-5.md) + - [1.2.6. データの並び替えと結合](1-2-6.md) + - [1.2.7. 文字列操作](1-2-7.md) + - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) + - [1.3. 構文規則](1-3.md) + - [1.4. ソースコードの形式](1-4.md) + - [1.5. カンマ/セミコロンの使い方](1-5.md) + - [1.6. COPY 文の使い方](1-6.md) + - [1.7. 定数の使い方](1-7-1.md) + - [1.7.1. 数字定数](1-7-1.md#171-数字定数) + - [1.7.2. 英数字定数](1-7-2.md) + - [1.7.3. 日本語定数](1-7-3.md) + - [1.8. 表意定数の使い方](1-8.md) + - [1.9. ユーザ定義名](1-9.md) + - [1.10. LENGTH OF の使い方](1-10.md) +2. [opensource COBOL のプログラム形式](2-1.md) + - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) + - [2.2. ネストされたユーザ定義関数](2-2.md) +3. [見出し部](3.md) +4. [環境部](4-1-1.md) + - [4.1. 構成節](4-1-1.md#41-構成節) + - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) + - [4.1.2. 実行用計算機段落](4-1-2.md) + - [4.1.3. リポジトリ段落](4-1-3.md) + - [4.1.4. 特殊名段落](4-1-4.md) + - [4.2. 入出力節](4-2-1-1.md) + - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) + - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) + - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) + - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) + - [4.2.2. 入出力管理段落](4-2-2.md) +5. [データ部](5-1.md) + - [5.1. ファイル記述](5-1.md#51-ファイル記述) + - [5.2. 整列用記述](5-2.md) + - [5.3. データ記述の形式](5-3.md) + - [5.4. 条件名](5-4.md) + - [5.5. 定数記述](5-5.md) + - [5.6. 画面記述](5-6.md) +6. [手続き部](6-1-1.md) + - [6.1. 構成要素](6-1-1.md#61-構成要素) + - [6.1.1. 表の参照](6-1-1.md#611-表の参照) + - [6.1.2. データ名の修飾](6-1-2.md) + - [6.1.3. 部分参照](6-1-3.md) + - [6.1.4. 式](6-1-4-1.md) + - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) + - [6.1.4.2. 条件式](6-1-4-2.md) + - [6.1.5. ピリオド(.)](6-1-5.md) + - [6.1.6. 動詞/END-動詞](6-1-6.md) + - [6.1.7. 特殊レジスタ](6-1-7.md) + - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) + - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) + - [6.1.8.2. レコードロック](6-1-8-2.md) + - [6.2. 記述形式](6-2.md) + - [6.3. 宣言の記述形式](6-3.md) + - [6.4. ACCEPT](6-4-1.md) + - [6.4.1. ACCEPT 文の書き方 1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) + - [6.4.2. ACCEPT 文の書き方 2 ― コマンドライン引数の取得](6-4-2.md) + - [6.4.3. ACCEPT 文の書き方 3 ― 環境変数値の取得](6-4-3.md) + - [6.4.4. ACCEPT 文の書き方 4 ― 画面データの取得](6-4-4.md) + - [6.4.5. ACCEPT 文の書き方 5 ― 日付/時刻の取得](6-4-5.md) + - [6.4.6. ACCEPT 文の書き方 6 ― 画面サイズデータの取得](6-4-6.md) + - [6.4.7. ACCEPT 文の例外処理](6-4-7.md) + - [6.5. ADD](6-5-1.md) + - [6.5.1. ADD 文の書き方 1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) + - [6.5.2. ADD 文の書き方 2 ― ADD GIVING](6-5-2.md) + - [6.5.3. ADD 文の書き方 3 ― ADD CORRESPONDING](6-5-3.md) + - [6.6. ALLOCATE](6-6.md) + - [6.7. CALL](6-7.md) + - [6.8. CANCEL](6-8-1.md) + - [6.8.1. CANCEL 文の書き方 1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) + - [6.8.2. CANCEL 文の書き方 2 ― CANCEL ALL](6-8-2.md) + - [6.9. CLOSE](6-9.md) + - [6.10. COMMIT](6-10.md) + - [6.11. COMPUTE](6-11.md) + - [6.12. CONTINUE](6-12.md) + - [6.13. DELETE](6-13-1.md) + - [6.13.1. DELETE 文の書き方 1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) + - [6.13.2. DELETE 文の書き方 2 ― DELETE FILE](6-13-2.md) + - [6.14. DISPLAY](6-14-1.md) + - [6.14.1. DISPLAY 文の書き方 1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) + - [6.14.2. DISPLAY 文の書き方 2 ― コマンドライン引数へのアクセス](6-14-2.md) + - [6.14.3. DISPLAY 文の書き方 3 ― 環境変数へのアクセスまたは設定](6-14-3.md) + - [6.14.4. DISPLAY 文の書き方 4 ― 画面データ](6-14-4.md) + - [6.14.5. DISPLAY 文の例外処理](6-14-5.md) + - [6.15. DIVIDE](6-15-1.md) + - [6.15.1. DIVIDE 文の書き方 1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) + - [6.15.2. DIVIDE 文の書き方 2 ― DIVIDE INTO GIVING](6-15-2.md) + - [6.15.3. DIVIDE 文の書き方 3 ― DIVIDE BY GIVING](6-15-3.md) + - [6.15.4. DIVIDE 文の書き方 4 ― DIVIDE INTO REMAINDER](6-15-4.md) + - [6.15.5. DIVIDE 文の書き方 5 ― DIVIDE BY REMAINDER](6-15-5.md) + - [6.16. ENTRY](6-16.md) + - [6.17. EVALUATE](6-17.md) + - [6.18. EXIT](6-18.md) + - [6.19. FREE](6-19.md) + - [6.20. GENERATE](6-20.md) + - [6.21. GOBACK](6-21.md) + - [6.22. GO TO](6-22-1.md) + - [6.22.1. GO TO 文の書き方 1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) + - [6.22.2. GO TO 文の書き方 2 ― GO TO DEPENDING ON](6-22-2.md) + - [6.23. IF](6-23.md) + - [6.24. INITIALIZE](6-24.md) + - [6.25. INITIATE](6-25.md) + - [6.26. INSPECT](6-26.md) + - [6.27. MERGE](6-27.md) + - [6.28. MOVE](6-28-1.md) + - [6.28.1. MOVE 文の書き方 1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) + - [6.28.2. MOVE 文の書き方 2 ― MOVE CORRESPONDING](6-28-2.md) + - [6.29. MULTIPLY](6-29-1.md) + - [6.29.1. MULTIPLY 文の書き方 1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) + - [6.29.2. MULTIPLY 文の書き方 2 ― MULTIPLY GIVING](6-29-2.md) + - [6.30. NEXT SENTENCE](6-30.md) + - [6.31. OPEN](6-31.md) + - [6.32. PERFORM](6-32-1.md) + - [6.32.1. PERFORM 文の書き方 1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) + - [6.32.2. PERFORM 文の書き方 2 ― インライン型](6-32-2.md) + - [6.33. READ](6-33-1.md) + - [6.33.1. READ 文の書き方 1 ―順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) + - [6.33.2. READ 文の書き方 2 ― ランダム読み取り](6-33-2.md) + - [6.34. RELEASE](6-34.md) + - [6.35. RETURN](6-35.md) + - [6.36. REWRITE](6-36.md) + - [6.37. ROLLBACK](6-37.md) + - [6.38. SEARCH](6-38-1.md) + - [6.38.1. SEARCH 文の書き方 1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) + - [6.38.2. SEARCH 文の書き方 2 ― 二分探索(SEARCH ALL)](6-38-2.md) + - [6.39. SET](6-39-1.md) + - [6.39.1. SET 文の書き方 1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) + - [6.39.2. SET 文の書き方 2 ― プログラムポインター設定](6-39-2.md) + - [6.39.3. SET 文の書き方 3 ― アドレス設定](6-39-3.md) + - [6.39.4. SET 文の書き方 4 ― インデックス設定](6-39-4.md) + - [6.39.5. SET 文の書き方 5 ― UP/DOWN 設定](6-39-5.md) + - [6.39.6. SET 文の書き方 6 ― 条件名設定](6-39-6.md) + - [6.39.7. SET 文の書き方 7 ― スイッチ設定](6-39-7.md) + - [6.40. SORT](6-40-1.md) + - [6.40.1. SORT 文の書き方 1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) + - [6.40.2. SORT 文の書き方 2 ― テーブルソート](6-40-2.md) + - [6.41. START](6-41.md) + - [6.42. STOP](6-42.md) + - [6.43. STRING](6-43.md) + - [6.44. SUBTRACT](6-44-1.md) + - [6.44.1. SUBTRACT 文の書き方 1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) + - [6.44.2. SUBTRACT 文の書き方 2 ― SUBTRACT GIVING](6-44-2.md) + - [6.44.3. SUBTRACT 文の書き方 3 ― SUBTRACT CORRESPONDING](6-44-3.md) + - [6.45. SUPPRESS](6-45.md) + - [6.46. TERMINATE](6-46.md) + - [6.47. TRANSFORM](6-47.md) + - [6.48. UNLOCK](6-48.md) + - [6.49. UNSTRING](6-49.md) + - [6.50. WRITE](6-50.md) +7. [日本語の使用](7-1.md) + - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) + - [7.2. 日本語項目と表意定数](7-2.md) + - [7.3. 各命令文と日本語の取扱い](7-3-1.md) + - [7.3.1. MOVE 文](7-3-1.md#731-move文) + - [7.3.2. ACCEPT/DISPLAY 文](7-3-2.md) + - [7.4. UTF-8 の使用](7-4.md) +8. [opensource COBOL システムインターフェース](8-1-1.md) + - [8.1. opensource COBOL コンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) + - [8.1.1. 解説](8-1-1.md#811-解説) + - [8.1.2. コンパイルオプション](8-1-2.md) + - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) + - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) + - [8.1.5. 静的サブルーチン](8-1-5.md) + - [8.1.6. COBOL と C ブログラムの結合](8-1-6.md) + - [8.1.6.1. opensource COBOL ランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) + - [8.1.6.2. opensource COBOL と C の文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) + - [8.1.6.3. C データ型と opensource COBOL USAGE 句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) + - [8.1.6.4. opensource COBOL メインプログラムの C サブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) + - [8.1.6.5. C メインプログラムの opensource COBOL サブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) + - [8.1.7. 重要な環境変数](8-1-7.md) + - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) + - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) + - [8.2. opensource COBOL プログラムの実行](8-2-1.md) + - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) + - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) + - [8.2.3. プログラムの引数](8-2-3.md) + - [8.2.4. 重要な環境変数](8-2-4.md) + - [8.3. 組み込みサブルーチン](8-3-1.md) + - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) + - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) + - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) + - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) + - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) + - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) + - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) + - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) + - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) + - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) + - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) + - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) + - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) + - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) + - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) + - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) + - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) + - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) + - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) + - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) + - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) + - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) + - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) + - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) + - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) + - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) + - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) + - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) + - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) + - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) + - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) + - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) + - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) + - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) + - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) + - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) + - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) + - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) + - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) +9. [サンプルプログラム](9-1.md) + - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) + - [9.2. COBDUMP –16 進数/文字データダンプサブルーチン](9-2.md) + +[クレジット](credit.md) + + +[ページトップへ](TOC.md) + diff --git a/automanual/new/credit.md b/automanual/new/credit.md new file mode 100644 index 0000000..4d9dea8 --- /dev/null +++ b/automanual/new/credit.md @@ -0,0 +1,36 @@ + +[前へ](9-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/次へ + + + +[ページトップへ](credit.md) + +
+opensource COBOL Programmer's Guide + +【制作】
+OSSコンソーシアム オープンCOBOLソリューション部会 + +【原著】
+Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") + +【翻訳・執筆】
+東京システムハウス株式会社 島田桃花 + +【マークダウン化】
+東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 + +【監修】
+東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
+株式会社SIT11 飯島裕一 + +【協力】(50音順)
+OVOL ICTソリューションズ株式会社
+株式会社SIT11
+株式会社CIJ
+サン情報サービス株式会社
+ +【発行】
+OSSコンソーシアム オープンCOBOLソリューション部会
+URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) + diff --git a/automanual/new_delete/1-1.md b/automanual/new_delete/1-1.md new file mode 100644 index 0000000..9b09412 --- /dev/null +++ b/automanual/new_delete/1-1.md @@ -0,0 +1,15 @@ +# 1. まえがき + +## 1.1. opensource COBOLとは + +このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 + +opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 + +opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 + +Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 + +--- +`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 + diff --git a/automanual/new_delete/1-10.md b/automanual/new_delete/1-10.md new file mode 100644 index 0000000..18fc7fd --- /dev/null +++ b/automanual/new_delete/1-10.md @@ -0,0 +1,20 @@ +## 1.10. LENGTH OFの使い方 + +オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 + +``` +01 Demo-Identifier PIC X(27). *> This is a 27-character data-item +. +. +. +DISPLAY LENGTH OF “This is a LENGTH OF Example” +DISPLAY LENGTH OF Demo-Identifier +DISPLAY 27 +``` + +定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 + +1. DISPLAY文の定数の代わりとして +2. WRITE文またはRELEASE文のFROM句の一部として +3. PERFORM文のTIMES句の一部として + diff --git a/automanual/new_delete/1-2-1.md b/automanual/new_delete/1-2-1.md new file mode 100644 index 0000000..7f76a9b --- /dev/null +++ b/automanual/new_delete/1-2-1.md @@ -0,0 +1,12 @@ +## 1.2. COBOL/opensource COBOLの重要機能 + +### 1.2.1. COBOLプログラムの構文 + +COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 + +部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 + +このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 + +4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 + diff --git a/automanual/new_delete/1-2-2.md b/automanual/new_delete/1-2-2.md new file mode 100644 index 0000000..4be66aa --- /dev/null +++ b/automanual/new_delete/1-2-2.md @@ -0,0 +1,6 @@ +### 1.2.2. コピーブック + +「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 + +現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 + diff --git a/automanual/new_delete/1-2-3.md b/automanual/new_delete/1-2-3.md new file mode 100644 index 0000000..e8d2dae --- /dev/null +++ b/automanual/new_delete/1-2-3.md @@ -0,0 +1,4 @@ +### 1.2.3. 構造化データ + +COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 + diff --git a/automanual/new_delete/1-2-4.md b/automanual/new_delete/1-2-4.md new file mode 100644 index 0000000..a4454ac --- /dev/null +++ b/automanual/new_delete/1-2-4.md @@ -0,0 +1,15 @@ +### 1.2.4. ファイル + +COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 + +||| +|:---|:---| +|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| +ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![!\[alt text\](Image/1-0-1.png)](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![!\[alt text\](Image/1-0-2.png)](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| + +すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 + +データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 + diff --git a/automanual/new_delete/1-2-5.md b/automanual/new_delete/1-2-5.md new file mode 100644 index 0000000..942f23d --- /dev/null +++ b/automanual/new_delete/1-2-5.md @@ -0,0 +1,8 @@ +### 1.2.5. 表操作 + +他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 + +1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 + +2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 + diff --git a/automanual/new_delete/1-2-6.md b/automanual/new_delete/1-2-6.md new file mode 100644 index 0000000..9246fa5 --- /dev/null +++ b/automanual/new_delete/1-2-6.md @@ -0,0 +1,8 @@ +### 1.2.6. データの並び替えと結合 + +COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 + +表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 + +同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 + diff --git a/automanual/new_delete/1-2-7.md b/automanual/new_delete/1-2-7.md new file mode 100644 index 0000000..2f3758f --- /dev/null +++ b/automanual/new_delete/1-2-7.md @@ -0,0 +1,25 @@ +### 1.2.7. 文字列操作 + +テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 + +| 機能 | サポートするopensource COBOL機能 | +| :--- | :--- | +|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | +| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | +| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | +| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | +| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | +| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | +| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | +| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| +| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | +| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | +| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | +| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | + diff --git a/automanual/new_delete/1-2-8.md b/automanual/new_delete/1-2-8.md new file mode 100644 index 0000000..2536280 --- /dev/null +++ b/automanual/new_delete/1-2-8.md @@ -0,0 +1,18 @@ +### 1.2.8. テキストユーザインターフェース(TUI)機能 + +COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 + +以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 + +図1-1-TUIサンプル画面 + +![!\[alt text\](Image/1-1.png)](Image/1-1.png) + +このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 + +COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 + +--- + +`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 + diff --git a/automanual/new_delete/1-3.md b/automanual/new_delete/1-3.md new file mode 100644 index 0000000..2ec4693 --- /dev/null +++ b/automanual/new_delete/1-3.md @@ -0,0 +1,16 @@ +## 1.3. 構文規則 + +opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 + +| | | +| :--- | :--- | +| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | +| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | +| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | +| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | +| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | +| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | +| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | +| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | +| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | + diff --git a/automanual/new_delete/1-4.md b/automanual/new_delete/1-4.md new file mode 100644 index 0000000..6978319 --- /dev/null +++ b/automanual/new_delete/1-4.md @@ -0,0 +1,26 @@ +## 1.4. ソースコードの形式 + +従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 + +opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 + +| | | +| :--- | :--- | +| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | +| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | +| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | +| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | + +以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 + +| | | +| :--- | :--- | +| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | +| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | +| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | +| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | +| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | +| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | + diff --git a/automanual/new_delete/1-5.md b/automanual/new_delete/1-5.md new file mode 100644 index 0000000..572aff7 --- /dev/null +++ b/automanual/new_delete/1-5.md @@ -0,0 +1,12 @@ +## 1.5. カンマ/セミコロンの使い方 + +空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 + +次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: + + CALL “SUBROUTINE” USING 1,2 + +DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 + +句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 + diff --git a/automanual/new_delete/1-6.md b/automanual/new_delete/1-6.md new file mode 100644 index 0000000..ad18af4 --- /dev/null +++ b/automanual/new_delete/1-6.md @@ -0,0 +1,30 @@ +## 1.6. COPY文の使い方 + +図1-2-COPY構文 + +![alt text](Image/1-2.png) + +COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 + +1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 + +2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 + +3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 + +4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 + +5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 + +6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 + +7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 + +8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 + +9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 + +10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 + +11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 + diff --git a/automanual/new_delete/1-7-1.md b/automanual/new_delete/1-7-1.md new file mode 100644 index 0000000..6f65cde --- /dev/null +++ b/automanual/new_delete/1-7-1.md @@ -0,0 +1,12 @@ +## 1.7. 定数の使い方 + +定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 +### 1.7.1. 数字定数 +数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 + +- 1、56、2192、-54などの整数。 + +- 1.12や-2.95などの整数でない固定小数点値。 + +- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 + diff --git a/automanual/new_delete/1-7-2.md b/automanual/new_delete/1-7-2.md new file mode 100644 index 0000000..339839c --- /dev/null +++ b/automanual/new_delete/1-7-2.md @@ -0,0 +1,34 @@ +### 1.7.2. 英数字定数 + +英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 + +英数字定数は、次の形式のいずれかを取ることができる。 + +- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 + +- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + +英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 + +- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 + + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l + – “iteral that must + – “be continued.” + + +- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

+ + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & + “ long literal that must ” & + “ be continued.” + + +プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 + +数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 + diff --git a/automanual/new_delete/1-7-3.md b/automanual/new_delete/1-7-3.md new file mode 100644 index 0000000..21c4901 --- /dev/null +++ b/automanual/new_delete/1-7-3.md @@ -0,0 +1,6 @@ +### 1.7.3. 日本語定数 + +- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 + +- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + diff --git a/automanual/new_delete/1-8.md b/automanual/new_delete/1-8.md new file mode 100644 index 0000000..94415b6 --- /dev/null +++ b/automanual/new_delete/1-8.md @@ -0,0 +1,17 @@ +## 1.8. 表意定数の使い方 + +表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 + +次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 + +表1-3-表意定数 + +| 表意定数 | 定数型 | 値 | +| :--- | :--- | :--- | +| ZERO, ZEROS, ZEROES | 数字 | 0 | +| SPACE, SPACES | 英数字 | 空白 | +| QUOTE, QUOTES | 英数字 | 二重引用符 | +| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | +| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | +| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | + diff --git a/automanual/new_delete/1-9.md b/automanual/new_delete/1-9.md new file mode 100644 index 0000000..b9fb58c --- /dev/null +++ b/automanual/new_delete/1-9.md @@ -0,0 +1,8 @@ +## 1.9. ユーザ定義名 + +opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 + +ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 + +プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 + diff --git a/automanual/new_delete/2-1.md b/automanual/new_delete/2-1.md new file mode 100644 index 0000000..0db6100 --- /dev/null +++ b/automanual/new_delete/2-1.md @@ -0,0 +1,39 @@ +# 2. opensource COBOLのプログラム形式 + +図2-1-opensource COBOLのプログラム形式 + +![alt text](Image/2-1.png) + +COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 + +すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 + +1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 + +2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 + +3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 + +4. 各区分の目的の概要は次の通りである: + +| 区分 | 目的 | +| :--- | :--- | +| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | +| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | +| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | +| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | + +## 2.1. ネストされたユーザプログラム + +図2-2-ネストされたユーザプログラム + +![alt text](Image/2-2.png) + +ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 + +1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 + +--- + +`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 + diff --git a/automanual/new_delete/2-2.md b/automanual/new_delete/2-2.md new file mode 100644 index 0000000..353c33f --- /dev/null +++ b/automanual/new_delete/2-2.md @@ -0,0 +1,12 @@ +## 2.2. ネストされたユーザ定義関数 + +図2-3-ネストされたユーザ定義関数 + +![alt text](Image/2-3.png) + +ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 + +1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 + + name:line: Error: FUNCTION-ID is not yet implemented + diff --git a/automanual/new_delete/3.md b/automanual/new_delete/3.md new file mode 100644 index 0000000..634bc36 --- /dev/null +++ b/automanual/new_delete/3.md @@ -0,0 +1,21 @@ +# 3. 見出し部 + +図3-1-見出し部構文 + +![alt text](Image/3-1.png) + +プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 +1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 + +2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 + +3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 + +4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 + +5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 + +6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 + +7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 + diff --git a/automanual/new_delete/4-1-1.md b/automanual/new_delete/4-1-1.md new file mode 100644 index 0000000..1db0690 --- /dev/null +++ b/automanual/new_delete/4-1-1.md @@ -0,0 +1,34 @@ +# 4. 環境部 + +図4-1-環境部構文 + +![alt text](Image/4-1.png) + +プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 + +1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 + +## 4.1. 構成節 + +図4-2-構成節構文 + +![alt text](Image/4-2.png) + +プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 + +1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 + +### 4.1.1. 翻訳用計算機段落 + +図4-3-翻訳用計算機段落構文 + +![alt text](Image/4-3.png) + +翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 + +1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 + +3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 + diff --git a/automanual/new_delete/4-1-2.md b/automanual/new_delete/4-1-2.md new file mode 100644 index 0000000..1ecd3ae --- /dev/null +++ b/automanual/new_delete/4-1-2.md @@ -0,0 +1,16 @@ +### 4.1.2. 実行用計算機段落 + +図4-4-実行用計算機段落構文 + +![alt text](Image/4-4.png) + +実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 + +1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 + +3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 + +4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 + diff --git a/automanual/new_delete/4-1-3.md b/automanual/new_delete/4-1-3.md new file mode 100644 index 0000000..bc8acb3 --- /dev/null +++ b/automanual/new_delete/4-1-3.md @@ -0,0 +1,12 @@ +### 4.1.3. リポジトリ段落 + +図4-5-リポジトリ段落構文 + +![alt text](Image/4-5.png) + +リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 + +1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 + +2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 + diff --git a/automanual/new_delete/4-1-4.md b/automanual/new_delete/4-1-4.md new file mode 100644 index 0000000..8197007 --- /dev/null +++ b/automanual/new_delete/4-1-4.md @@ -0,0 +1,107 @@ +### 4.1.4. 特殊名段落 + +図4-6-特殊名段落構文 + +![alt text](Image/4-6-1.png) +![alt text](Image/4-6-2.png) + +特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定のニーモニック名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 + +つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 + +1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 + +2. IS ニーモニック名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 + +3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 + +4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 + +5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 + + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ + + このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 + + LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: + + 表4-7-局所名 + + | | | | | | + | :---: | :---: | :---: | :---: | :---: | + | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | + | am_ET | el_GR | fil_PH | lv_LV | sma_SE | + | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | + | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | + | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | + | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | + | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | + | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | + | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | + | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | + | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | + | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | + | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | + | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | + | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | + | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | + | ar_TN | en_ZA | he_IL | nn_NO | te_IN | + | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | + | arn_CL | es_AR | hr_BA | oc_FR | th_TH | + | as_IN | es_BO | hr_HR | or_IN | tk_TM | + | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | + | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | + | ba_R | es_CR | id_ID | ps_AF | tr_IN | + | be_BY | es_DO | ig_NG | pt_BR | tr_TR | + | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | + | bn_IN | es_ES | is_IS | qut_GT | ug_CN | + | bo_BT | es_GT | it_CH | quz_BO | uk_UA | + | bo_CN | es_HN | it_IT | quz_EC | ur_PK | + | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | + | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | + | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | + | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | + | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | + | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | + | da_DK | es_SV | kl_GL | sah_RU | yo_NG | + | de_AT | es_US | kn_IN | se_FI | zh_CN | + | de_CH | es_UY | ko_KR | se_NO | zh_HK | + | de_DE | es_VE | kok_IN | se_SE | zh_MO | + | de_LI | et_EE | ky_KG | si_LK | zh_SG | + | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | + | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | + + +7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 + +8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 + +9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 + + 表4-8-ACCEPT画面ステータスコード + + | コード | 意味 | + | :--- | :--- | + | 0000 | ENTERキー押下 | + | 1001 - 1064| F1 — F64 | + | 2001, 2002 | PgUP, PgDn4 | + | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | + | 2005 | Esc6 | + | 8000 | ACCEPT画面に利用できるデータがない | + | 9000 | 致命的なI/O画面エラー | + + +10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 + +11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 + +--- + +`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 + +`5` Windowsシステムでは検出できない。 + +`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) + diff --git a/automanual/new_delete/4-2-1-1.md b/automanual/new_delete/4-2-1-1.md new file mode 100644 index 0000000..d6cbb63 --- /dev/null +++ b/automanual/new_delete/4-2-1-1.md @@ -0,0 +1,105 @@ +## 4.2. 入出力節 + +図4-9-入出力節構文 + +![alt text](Image/4-9.png) + +入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 + +1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + +### 4.2.1. ファイル管理段落 + +図4-10-ファイル管理段落構文 + +![alt text](Image/4-10.png) + +ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 + +1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 + +2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 + +3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 + + SELECT My-File ASSIGN TO DISK DISPLAY. + + 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 + + SELECT My-File ASSIGN TO DISPLAY. + + +4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 + + - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 + + この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + + 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 + + 表4-11-ステータスコード + + |ステータス値 | 意味 | + | :--- | :--- | + |00 | 成功| + |02 | 成功(重複レコードキーが検出された)| + |05 | 成功(オプションファイルが存在しない)| + |07 | 成功(ユニットが存在しない)| + |10 |ファイル終了| + |14 |キー範囲外| + |21 |キーが無効である| + |22 |キーの値の重複が検出された| + |23 |キーが存在しない| + |30 |永続的入出力エラー| + |31 |ファイル名に一貫性がない| + |34 |ファイル区域外である| + |35 |ファイルが存在しない| + |37 |アクセス権拒否| + |38 |ファイルがロックで閉じられている| + |39 |属性の矛盾が検出された| + |41 |ファイルが既に開かれている| + |42 |ファイルが開かれていない| + |43 |読み込みが行われていない| + |44 |レコードのオーバーフロー| + |46 |読み込みエラー| + |47 |OPEN INPUTが拒否された| + |48 |OPEN OUTPUTが拒否された| + |49 |OPEN I/Oが拒否された| + |51 |レコードがロックされている| + |52 |ページ終了| + |57 |LINAGE指定が無効である| + |61 |ファイル共有の失敗| + |91 |ファイルが利用できない| + +5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 + +#### 4.2.1.1. 順編成ファイル + +図4-12-順編成ファイルの指定 + +![alt text](Image/4-12.png) + +SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 + +1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 + +2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 + +3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 + +4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 + +5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 + +6. 固定長と可変長、両方のレコード形式がサポートされている。 + +7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 + +8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/new_delete/4-2-1-2.md b/automanual/new_delete/4-2-1-2.md new file mode 100644 index 0000000..87969ca --- /dev/null +++ b/automanual/new_delete/4-2-1-2.md @@ -0,0 +1,22 @@ +#### 4.2.1.2. 相対編成ファイル + +図4-13-相対編成ファイルの指定 + +![alt text](Image/4-13.png) + +RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 + +1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 + +2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 + +3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 + +4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 + +7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/new_delete/4-2-1-3.md b/automanual/new_delete/4-2-1-3.md new file mode 100644 index 0000000..b0c2ca7 --- /dev/null +++ b/automanual/new_delete/4-2-1-3.md @@ -0,0 +1,24 @@ +#### 4.2.1.3. 索引編成ファイル + +図4-14-索引編成ファイルの指定 + +![alt text](Image/4-14.png) + +RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 + +例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 + +1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 + +4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 + +5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 + +6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 + +7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/new_delete/4-2-2.md b/automanual/new_delete/4-2-2.md new file mode 100644 index 0000000..b1a35fa --- /dev/null +++ b/automanual/new_delete/4-2-2.md @@ -0,0 +1,15 @@ +### 4.2.2. 入出力管理段落 + +図4-15-入出力管理段落構文 + +![alt text](Image/4-15.png) + + +入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 + +1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 + +2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 + +3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 + diff --git a/automanual/new_delete/5-1.md b/automanual/new_delete/5-1.md new file mode 100644 index 0000000..7bd633d --- /dev/null +++ b/automanual/new_delete/5-1.md @@ -0,0 +1,50 @@ +# 5. データ部 + +図5-1-データ部の形式 + +![alt text](Image/5-1.png) + +データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 + +1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 + +2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) + +3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 + +4. 局所場所はネストされたプログラムでは使用できない。 + +5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 + +6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 + +## 5.1. ファイル記述 + +図5-2-ファイル記述構文 + +![alt text](Image/5-2.png) + +プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 + +1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 + +2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 + +3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 + +4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 + +5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 + +6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 + +7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 + + 図5-3-LINAGE句指定ページ構造 + + ![alt text](Image/5-3.png) + +8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 + +9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 + diff --git a/automanual/new_delete/5-2.md b/automanual/new_delete/5-2.md new file mode 100644 index 0000000..0347911 --- /dev/null +++ b/automanual/new_delete/5-2.md @@ -0,0 +1,19 @@ +## 5.2. 整列用記述 + +図5-4-整列用記述段落 + +![alt text](Image/5-4.png) + + +整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 + +1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 + +2. 整列用ファイルをディスクに割り当てる必要がある。 + +3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 + +4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 + +5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 + diff --git a/automanual/new_delete/5-3.md b/automanual/new_delete/5-3.md new file mode 100644 index 0000000..161cf86 --- /dev/null +++ b/automanual/new_delete/5-3.md @@ -0,0 +1,295 @@ +## 5.3. データ記述の形式 + +図5-5-データ記述の一般形式 + +![alt text](Image/5-5.png) + +ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 + +1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 + +2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 + + + | | | + | --- | --- | + | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | + | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | + | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | + | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | + + + この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 + +3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 + +4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 + + 表5-6-データのクラス定義 PICTURE記号(9/A/X) + + | 基本記号 | 意味・使用方法 | + | :--- | :--- | + | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | + | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | + | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | + | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | + + 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: + + | | | + | --- | --- | + | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | + | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | + | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | + | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | + + + + 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 + + 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 + + 表5-7-数値形式オプションのPICTURE記号(P/S/V) + + | 数値形式のオプション記号 | 意味・使用方法 | + | :--- | :--- | + | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | + | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | + | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | + +5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 + + 表5-8-符号エンコード文字 + + | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | + | :---: | :---: |:---: | + | 0 | 0 | p | + | 1 | 1 | q | + | 2 | 2 | r | + | 3 | 3 | s | + | 4 | 4 | t | + | 5 | 5 | u | + | 6 | 6 | v | + | 7 | 7 | w | + | 8 | 8 | x | + | 9 | 9 | y | + + SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 + + +6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 + + 表5-9-数字編集PICTURE記号 + + | 編集記号 | 意味・使用方法 | + | :--- | :--- | + | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | + | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | + | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | + | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | + | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | + | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | + | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | + | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | + | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | + | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | + + 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 + +7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 + +8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 + +9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 + +10. EXTERNAL句は、77または01レベルでのみ指定できる。 + +11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 + +12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 + +13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 + +14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 + + 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. + + 以下のように割り当てられる。 + + ![alt text](Image/5-3-9.png) + + 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 + ``` + 05 X OCCURS 3 TIMES. + 10 A PIC X(1). + 10 B PIC X(1). + 10 C PIC X(1). + ``` + ![alt text](Image/5-3-10.png) + + 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 + +15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 + +16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 + +17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 + + ``` + PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 + PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” + PIC 9(3) VALUE 1 – 次の値を保持する 001 + PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 + ``` + +18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 + +19. BASED句とANY LENGTH句を併用することはできない。 + +20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 + +21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 + +22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 + +23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 + +24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある + + a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 + + b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 + + c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 + + d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 + + e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 + + f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 + +25. 次の表は、利用可能なUSAGE句をまとめたものである。 + + 表5-10-USAGE句一覧
+ + | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| + | :--- | :--- |:--- | :--- |:--- | :--- | + | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | + | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | + |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | + | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | + | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | + | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | + | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | + | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | + | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | + | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | + | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | + | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | + | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | + | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | + | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | + | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | + | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | + | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | + | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | + | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | + | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | + +26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 + + ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 + + リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 + + CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 + + 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 + + バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 + +27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 + +28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 + +29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 + + a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 + + b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 + + c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 + + 図5-11-SYNCHRONIZED句の効果 + + ![alt text](Image/5-11.png) + + 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 + + SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 + +30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 + + a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 + + b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 + ``` + 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 + + ``` + 05 SHIRT-SIZE-VALUES. + 10 PIC X(4) VALUE “S 14”. + 10 PIC X(4) VALUE “M 15”. + 10 PIC X(4) VALUE “L 16”. + 10 PIC X(4) VALUE “XL17”. + 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + + + cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) + + 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 + + ``` + 05 X OCCURS 6 TIMES. + 10 A PIC X(1) VALUE “?‟. + 10 B PIC X(1) VALUE “%‟. + 10 N PIC 9(2) VALUE 10. + ``` + + この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 + +--- +`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 + +`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 + +`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 + +`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 + diff --git a/automanual/new_delete/5-4.md b/automanual/new_delete/5-4.md new file mode 100644 index 0000000..94bdfd9 --- /dev/null +++ b/automanual/new_delete/5-4.md @@ -0,0 +1,18 @@ +## 5.4. 条件名 + +図5-12-レベル88条件名記述構文 + +![alt text](Image/5-12.png) + +条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 + +1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 + +2. また、ストレージを占有しない。 + +3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 + +4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 + +5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 + diff --git a/automanual/new_delete/5-5.md b/automanual/new_delete/5-5.md new file mode 100644 index 0000000..da8d3c9 --- /dev/null +++ b/automanual/new_delete/5-5.md @@ -0,0 +1,12 @@ +## 5.5. 定数記述 + +図5-13-78レベル定数記述構文 + +![alt text](Image/5-13.png) + +この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 + +1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 + +2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 + diff --git a/automanual/new_delete/5-6.md b/automanual/new_delete/5-6.md new file mode 100644 index 0000000..0991f14 --- /dev/null +++ b/automanual/new_delete/5-6.md @@ -0,0 +1,98 @@ +## 5.6. 画面記述 + +図5-14-画面節データ項目記述構文 + +![alt text](Image/5-14-1.png) +![alt text](Image/5-14-2.png) + +上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 + +1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 + +2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 + +3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 + +4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 + +5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 + +6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 + +7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` + +8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 + +9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 + +10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 + +11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 + + LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 + + もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 + + TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 + + 必要に応じてCOLUMNはCOLに省略が可能である。 + +12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 + + 表5-15-番号によって指定される画面色 + + | 整数 | 色 | + | :---: | :---: | + | 0 | 黒 | + | 1 | 青 | + | 2 | 緑 | + | 3 | 青緑 | + | 4 | 赤 | + | 5 | 赤紫 | + | 6 | 黄 | + | 7 | 白 | + +13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 + + 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
+ + + | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | + | :---: | :---: |:---: | + | 0 | 黒 | 暗灰 | + | 1 | 暗青/藍 | 明青 | + | 2 | 暗緑 | 明緑 | + | 3 | 暗青緑 | 明青緑 | + | 4 | 暗赤 | 明赤 | + | 5 | 暗赤紫 | 明赤紫 | + | 6 | 金/茶 | 黄 | + | 7 | 明灰 | 白 | + + +14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 + +15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 + + ``` + 78 Black VALUE 0. + 78 Blue VALUE 1. + 78 Green VALUE 2. + 78 White VALUE 7. + ・・・ + 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ + 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ + 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ + ``` + DEF項目の色は緑と白になる(XYZから継承される) + +16. VALUE句は変更できない固定のテキストを定義するために使用される。 + +17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 + +18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 + +19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 + +--- +`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 + diff --git a/automanual/new_delete/6-1-1.md b/automanual/new_delete/6-1-1.md new file mode 100644 index 0000000..3acc843 --- /dev/null +++ b/automanual/new_delete/6-1-1.md @@ -0,0 +1,31 @@ +# 6. 手続き部 + +## 6.1. 構成要素 + +### 6.1.1. 表の参照 + +COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 + +4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: + +``` + 01 GRID. + 05 GRID-ROW OCCURS 3 TIMES. + 10 GRID-COLUMN OCCURS 4 TIMES. + 15 GRID-CHARACTER PIC X(1). +``` + +次の図で網掛けされているGRID-CHARACTERは、 + +![alt text](Image/6-0.png) + + +次のコードで参照できる。 + + GRID-CHARACTER(2, 3) + +添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または +これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 + +算術式については[6.1.4.1](6-1-4-1.md)で説明する。 + diff --git a/automanual/new_delete/6-1-2.md b/automanual/new_delete/6-1-2.md new file mode 100644 index 0000000..a855435 --- /dev/null +++ b/automanual/new_delete/6-1-2.md @@ -0,0 +1,47 @@ +### 6.1.2. データ名の修飾 + +COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 + +動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: + +``` + 01 EMPLOYEE. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). + 01 CUSTOMER. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). +``` + +それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: + + MOVE “Philadelphia” TO CITY. + +この問題を解決するために、CITYの参照を次のように修飾できる。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. + +残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. + +これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 + + MOVE “Philadelphia” TO CITY OF EMPLOYEE. + +テーブルへの参照を修飾する場合は次のように記述する。 + + 一意名-1 OF 一意名-2(添え字・・・) + +予約語の「IN」は「OF」の代わりとして使うことができる。 + diff --git a/automanual/new_delete/6-1-3.md b/automanual/new_delete/6-1-3.md new file mode 100644 index 0000000..fa94d49 --- /dev/null +++ b/automanual/new_delete/6-1-3.md @@ -0,0 +1,23 @@ +### 6.1.3. 部分参照 + +図6-1-部分参照構文 + +![alt text](Image/6-1.png) + +COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 + +開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 + +ここでいくつか例を挙げる。 + +| | | +| --- | --- | +| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | +| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | +| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | +| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | +| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | + + +参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 + diff --git a/automanual/new_delete/6-1-4-1.md b/automanual/new_delete/6-1-4-1.md new file mode 100644 index 0000000..cfee90a --- /dev/null +++ b/automanual/new_delete/6-1-4-1.md @@ -0,0 +1,50 @@ +### 6.1.4. 式 + +opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 + +- 数値結果を計算する「算術式」 + +- TRUEまたはFALSE値を計算する「条件式」 + +0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 + +#### 6.1.4.1. 算術式 + +算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 + +| 優先順位 演算子 | 意味 | + | :---: | :--- | + | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| + | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | + | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | + | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | + | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | + | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | + | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | + +COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 + +1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 + +2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 + +3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 + +4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 + +5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 + +6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 + +ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 + +| 式 | 計算結果 | 解説 | +| :--- | :--- |:--- | +| 3 * 4 + 1|13|* は + よりも優先される。 | +| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | +| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | +| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | +| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | + +もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 + diff --git a/automanual/new_delete/6-1-4-2.md b/automanual/new_delete/6-1-4-2.md new file mode 100644 index 0000000..f1a85b8 --- /dev/null +++ b/automanual/new_delete/6-1-4-2.md @@ -0,0 +1,141 @@ +#### 6.1.4.2. 条件式 + +条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 + +##### 6.1.4.2.1. 条件名(レベル88項目) + +次のコードは最も単純な条件の一例である。 + +``` + 05 SHIRT-SIZE PIC 99V9. + 88 LILLIPUTIAN VALUE 0 THRU 12.5 + 88 XS VALUE 13 THRU 13.5. + 88 S VALUE 14, 14.5. + 88 M VALUE 15, 15.5. + 88 L VALUE 16, 16.5. + 88 XL VALUE 17, 17.5. + 88 XXL VALUE 18, 18.5. + 88 HUMUNGOUS VALUE 19 THRU 99.9. +``` + +条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 + + + IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 + + +または次のように条件名「XL」を使用することもできる。 + + IF XL + +##### 6.1.4.2.2. 字類条件 + +図6-9-字類条件構文 + +![alt text](Image/6-9.png) + +字類条件は、データ項目に格納されている現在のデータ型を判別する。 + +1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 + +2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 + +3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 + +4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 + +5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 + +6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 + +7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 + + ``` + SPECIAL-NAMES. + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. + ``` + +次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 + +``` + IF Entered-Value IS Hexadecimal + PERFORM 150-Process-Hex-Value + END-IF +``` + +##### 6.1.4.2.3. 正負条件 +図6-10-正負条件構文 + +![alt text](Image/6-10.png) + +正負条件は、PIC 9データ項目の数値状態を判別する。 + +1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 + +2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 + +##### 6.1.4.2.4. スイッチ状態条件 +図6-11-スイッチ状態条件 + +![alt text](Image/6-11.png) + +特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 + +##### 6.1.4.2.5. 比較条件 +図6-12-比較条件構文 + +![alt text](Image/6-12.png) + +比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 + +1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 + +2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 + +##### 6.1.4.2.6. 組み合わせ条件 +図6-13-組み合わせ条件構文 + +![alt text](Image/6-13.png) + +組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 + +1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 + +2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 + +3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 +``` + IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 +``` +以下のように省略される。 +``` + IF ACCOUNT-STATUS = 1 OR 2 OR 7 +``` + +4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 + + ``` + FALSE OR TRUE AND TRUE 結果:TRUE + (FALSE OR FALSE) AND TRUE 結果:FALSE + FALSE OR (FALSE AND TRUE) 結果:TRUE + ``` + +##### 6.1.4.2.7. 否定条件 +図6-14-否定条件構文 + +![alt text](Image/6-14.png) + +否定条件はNOT演算子を用いて、条件を否定する。 + +1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 + +2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 +``` + NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE + 結果:FALSE + NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) + 結果:TRUE + NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) + 結果:FALSE +``` + diff --git a/automanual/new_delete/6-1-5.md b/automanual/new_delete/6-1-5.md new file mode 100644 index 0000000..5ce0394 --- /dev/null +++ b/automanual/new_delete/6-1-5.md @@ -0,0 +1,45 @@ +### 6.1.5. ピリオド(.) + +COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 + +``` + MOVE SPACES TO Employee-Address + ADD 1 TO Record-Counter + DISPLAY “Record-Counter=” Record-Counter +``` + +一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 + +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest + DISPLAY “Interest Amount = “ Interest +``` + +この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 + +しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: + +``` + IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 + GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 + GIVING Interest DISPLAY “Interest Amount = “ Interest +``` + +では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 + +そこで用いるのが完結文である。 + +COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest. + DISPLAY “Interest Amount = “ Interest +``` + +二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 + diff --git a/automanual/new_delete/6-1-6.md b/automanual/new_delete/6-1-6.md new file mode 100644 index 0000000..00c1644 --- /dev/null +++ b/automanual/new_delete/6-1-6.md @@ -0,0 +1,39 @@ +### 6.1.6. 動詞/END-動詞 + +1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 + +``` + IF A = 1 + IF B = 1 + DISPLAY “A & B = 1” + ELSE + IF B = 1 + DISPLAY “A NOT = 1 BUT B = 1” + ELSE + DISPLAY “NEITHER A NOR B = 1”. +``` + +このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 + +![alt text](Image/6-16-1.png) + +NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 + +1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: + +![alt text](Image/6-16-2.png) + +しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 + +![alt text](Image/6-16-3.png) + +COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 + +COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` + +既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 + +--- +`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 + +`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? diff --git a/automanual/new_delete/6-1-7.md b/automanual/new_delete/6-1-7.md new file mode 100644 index 0000000..72515da --- /dev/null +++ b/automanual/new_delete/6-1-7.md @@ -0,0 +1,17 @@ +### 6.1.7. 特殊レジスタ + +opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 + +表6-15-特殊レジスタ + +| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | +| :--- | :--- |:--- | +| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | +| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | +| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | +| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | +| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | + +--- +`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 + diff --git a/automanual/new_delete/6-1-8-1.md b/automanual/new_delete/6-1-8-1.md new file mode 100644 index 0000000..5983e7e --- /dev/null +++ b/automanual/new_delete/6-1-8-1.md @@ -0,0 +1,27 @@ +### 6.1.8. ファイルへの同時アクセス制御 + +データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 + +すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 + +#### 6.1.8.1. ファイル共有 + +opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 + +OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 + +ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 + +| 共有オプション |効果 | +| :--- | :--- | +| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | +| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | +| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | + +誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 + +--- +`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 + +`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 + diff --git a/automanual/new_delete/6-1-8-2.md b/automanual/new_delete/6-1-8-2.md new file mode 100644 index 0000000..f985ce0 --- /dev/null +++ b/automanual/new_delete/6-1-8-2.md @@ -0,0 +1,18 @@ +#### 6.1.8.2. レコードロック + +レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 + +ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 + +レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 + +| レコードロック オプション |効果 | +| :--- | :--- | +| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | +| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | +| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | +| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | + + +使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 + diff --git a/automanual/new_delete/6-10.md b/automanual/new_delete/6-10.md new file mode 100644 index 0000000..58cb864 --- /dev/null +++ b/automanual/new_delete/6-10.md @@ -0,0 +1,10 @@ +## 6.10. COMMIT + +図6-37-COMMIT構文 + +![alt text](Image/6-37-Commit.png) + +COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 + +1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 + diff --git a/automanual/new_delete/6-11.md b/automanual/new_delete/6-11.md new file mode 100644 index 0000000..a1e99da --- /dev/null +++ b/automanual/new_delete/6-11.md @@ -0,0 +1,12 @@ +## 6.11. COMPUTE + +図6-38-COMPUTE構文 + +![alt text](Image/6-38-Compute.png) + +COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 + +1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 + +2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 + diff --git a/automanual/new_delete/6-12.md b/automanual/new_delete/6-12.md new file mode 100644 index 0000000..10cb703 --- /dev/null +++ b/automanual/new_delete/6-12.md @@ -0,0 +1,26 @@ +## 6.12. CONTINUE + +図6-39-CONTINUE構文 + +![alt text](Image/6-39-Continue.png) + +CONTINUE文は動作がないためアクションを実行しない。 + +1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 + + ![alt text](Image/6-12-1.png) + + 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 + +2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 + + ![alt text](Image/6-12-2.png) + +COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 + + IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ + +プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 + +従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 + diff --git a/automanual/new_delete/6-13-1.md b/automanual/new_delete/6-13-1.md new file mode 100644 index 0000000..c196ed7 --- /dev/null +++ b/automanual/new_delete/6-13-1.md @@ -0,0 +1,24 @@ +## 6.13. DELETE + +### 6.13.1. DELETE文の書き方1 ― DELETE + +図6-40-DELETE構文(レコードの削除) + +![alt text](Image/6-40-Delete.png) + +DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 + +1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 + +2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 + +3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 + +4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 + +5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 + +6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 + +7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 + diff --git a/automanual/new_delete/6-13-2.md b/automanual/new_delete/6-13-2.md new file mode 100644 index 0000000..f6c4455 --- /dev/null +++ b/automanual/new_delete/6-13-2.md @@ -0,0 +1,14 @@ +### 6.13.2. DELETE文の書き方2 ― DELETE FILE + +図6-41-DELETE FILE構文(ファイルの削除) + +![alt text](Image/6-41(delete).png) + +DELETE FILE文は、ディスクファイルを削除する。 + +1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 + +2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 + +3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 + diff --git a/automanual/new_delete/6-14-1.md b/automanual/new_delete/6-14-1.md new file mode 100644 index 0000000..c1221fa --- /dev/null +++ b/automanual/new_delete/6-14-1.md @@ -0,0 +1,16 @@ +## 6.14. DISPLAY + +### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE + +図6-42-DISPLAY構文(UPON CONSOLE) + +![alt text](Image/6-42-Display.png) + +プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 + +1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 + +2. 指定するニーモニック名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義のニーモニック名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 + +3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 + diff --git a/automanual/new_delete/6-14-2.md b/automanual/new_delete/6-14-2.md new file mode 100644 index 0000000..291c1f4 --- /dev/null +++ b/automanual/new_delete/6-14-2.md @@ -0,0 +1,10 @@ +### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス + +図6-43-DISPLAY構文(コマンドライン引数へのアクセス) + +![alt text](Image/6-43-Display.png) + +後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 + +1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 + diff --git a/automanual/new_delete/6-14-3.md b/automanual/new_delete/6-14-3.md new file mode 100644 index 0000000..dcb6f0a --- /dev/null +++ b/automanual/new_delete/6-14-3.md @@ -0,0 +1,22 @@ +### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 + +図6-44-DISPLAY構文(環境変数へのアクセス/設定) + +![alt text](Image/6-44-Display.png) + +環境変数を作成または変更するために使われる。 + +1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 + + DISPLAY + environment-variable-name UPON ENVIRONMENT-NAME + END-DISPLAY + DISPLAY + environment-variable-name UPON ENVIRONMENT-VALUE + END-DISPLAY + + +2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 + +3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 +  diff --git a/automanual/new_delete/6-14-4.md b/automanual/new_delete/6-14-4.md new file mode 100644 index 0000000..47d6b34 --- /dev/null +++ b/automanual/new_delete/6-14-4.md @@ -0,0 +1,16 @@ +### 6.14.4. DISPLAY文の書き方4 ― 画面データ + +図6-45-DISPLAY構文(画面データ) + +![alt text](Image/6-45-Display.png) + +形式化された画面にデータを表示する。 + +1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 + +2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 + +4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 + diff --git a/automanual/new_delete/6-14-5.md b/automanual/new_delete/6-14-5.md new file mode 100644 index 0000000..9c6955c --- /dev/null +++ b/automanual/new_delete/6-14-5.md @@ -0,0 +1,8 @@ +### 6.14.5. DISPLAY文の例外処理 + +図6-46-DISPLAY構文(例外処理) + +![alt text](Image/6-46-Display.png) + +DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 + diff --git a/automanual/new_delete/6-15-1.md b/automanual/new_delete/6-15-1.md new file mode 100644 index 0000000..e27d5e0 --- /dev/null +++ b/automanual/new_delete/6-15-1.md @@ -0,0 +1,18 @@ +## 6.15. DIVIDE + +### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO + +図6-47-DIVIDE INTO構文 + +![alt text](Image/6-47-Divide.png) + +指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new_delete/6-15-2.md b/automanual/new_delete/6-15-2.md new file mode 100644 index 0000000..89dbecc --- /dev/null +++ b/automanual/new_delete/6-15-2.md @@ -0,0 +1,18 @@ +### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING + +図6-48-DIVIDE INTO GIVING構文 + +![alt text](Image/6-48-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new_delete/6-15-3.md b/automanual/new_delete/6-15-3.md new file mode 100644 index 0000000..da155e6 --- /dev/null +++ b/automanual/new_delete/6-15-3.md @@ -0,0 +1,18 @@ +### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING + +図6-49-DIVIDE BY GIVING構文 + +![alt text](Image/6-49-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new_delete/6-15-4.md b/automanual/new_delete/6-15-4.md new file mode 100644 index 0000000..8918cde --- /dev/null +++ b/automanual/new_delete/6-15-4.md @@ -0,0 +1,18 @@ +### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER + +図6-50-DIVIDE INTO REMAINDER構文 + +![alt text](Image/6-50-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new_delete/6-15-5.md b/automanual/new_delete/6-15-5.md new file mode 100644 index 0000000..e0e7003 --- /dev/null +++ b/automanual/new_delete/6-15-5.md @@ -0,0 +1,18 @@ +### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER + +図6-51-DIVIDE BY REMAINDER構文 + +![alt text](Image/6-51-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/new_delete/6-16.md b/automanual/new_delete/6-16.md new file mode 100644 index 0000000..ff1e640 --- /dev/null +++ b/automanual/new_delete/6-16.md @@ -0,0 +1,14 @@ +## 6.16. ENTRY + +図6-52-ENTRY構文 + +![alt text](Image/6-52-Entry.png) + +ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 + +1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 + +2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 + +3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 + diff --git a/automanual/new_delete/6-17.md b/automanual/new_delete/6-17.md new file mode 100644 index 0000000..fe614e9 --- /dev/null +++ b/automanual/new_delete/6-17.md @@ -0,0 +1,52 @@ +## 6.17. EVALUATE + +図6-53-EVALUATE構文 + +![alt text](Image/6-53-Evaluate.png) + +EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 + +1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 + +2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: + + + Legal: Not Legal: + + (3 + Years-Of-Service) THROUGH 99 0 THRU “A” + + “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is + + X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) + + 15.7 THROUGH 19.4 + +3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択サブジェクトと呼ばれ、各WHEN句の後に指定された値は選択オブジェクトと呼ばれる。 + +4. 各WHEN句には、EVALUATE文の選択サブジェクトと同じ数の選択オブジェクトが必要である。 + +5. 各EVALUATE句の選択サブジェクトは、選択オブジェクトに対応する各WHEN句と等しいかどうかテストされる。 + +6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 + +7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 + +8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 + +9. ANYの選択オブジェクトを使うと、ANYと一致する選択サブジェクトと自動的に合致する。 + +ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 + +1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 + +2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 + +3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 + +4. 上記以外の種類の口座には利子が適用されない。 + +これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 + +図6-54-EVALUATE文のデモプログラム +![alt text](Image/6-54-Evaluate.png) + diff --git a/automanual/new_delete/6-18.md b/automanual/new_delete/6-18.md new file mode 100644 index 0000000..2f8d3bd --- /dev/null +++ b/automanual/new_delete/6-18.md @@ -0,0 +1,35 @@ +## 6.18. EXIT + +図6-55-EXIT構文 + +![alt text](Image/6-55-Exit.png) + +EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 + +1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 + + 図6-56-EXIT文
+ ![alt text](Image/6-56-Exit.png) + +2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 + +3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 + +4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 + + EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 + + 図6-57-EXIT PARAGRAPH文
+ ![alt text](Image/6-57-Exit.png) + +5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 + +6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 + +7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 + + 図6-58-EXIT PERFORM文
+ ![alt text](Image/6-58-Exit.png) + +8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 + diff --git a/automanual/new_delete/6-19.md b/automanual/new_delete/6-19.md new file mode 100644 index 0000000..249fae7 --- /dev/null +++ b/automanual/new_delete/6-19.md @@ -0,0 +1,16 @@ +## 6.19. FREE + +図6-59-FREE構文 + +![alt text](Image/6-59-Free.png) + +FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 + +1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 + +2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 + +3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 + +4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 + diff --git a/automanual/new_delete/6-2.md b/automanual/new_delete/6-2.md new file mode 100644 index 0000000..145e530 --- /dev/null +++ b/automanual/new_delete/6-2.md @@ -0,0 +1,24 @@ +## 6.2. 記述形式 + +図6-16-記述形式構文 + +![alt text](Image/6-16.png) + +手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 + +手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 + +1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 + +2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 + +3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 + +4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 + +5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 + +6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 + +7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 + diff --git a/automanual/new_delete/6-20.md b/automanual/new_delete/6-20.md new file mode 100644 index 0000000..b8a62b7 --- /dev/null +++ b/automanual/new_delete/6-20.md @@ -0,0 +1,8 @@ +## 6.20. GENERATE + +図6-60-GENERATE構文 + +![alt text](Image/6-60-Generate.png) + +GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + diff --git a/automanual/new_delete/6-21.md b/automanual/new_delete/6-21.md new file mode 100644 index 0000000..e6460f3 --- /dev/null +++ b/automanual/new_delete/6-21.md @@ -0,0 +1,12 @@ +## 6.21. GOBACK + +図6-61-GOBACK構文 + +![alt text](Image/6-61-Goback.png) + +GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 + +1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 + +2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 + diff --git a/automanual/new_delete/6-22-1.md b/automanual/new_delete/6-22-1.md new file mode 100644 index 0000000..5745f59 --- /dev/null +++ b/automanual/new_delete/6-22-1.md @@ -0,0 +1,12 @@ +## 6.22. GO TO + +### 6.22.1. GO TO文の書き方1 ― GO TO + +図6-62-GOTO構文 + +![alt text](Image/6-62-Goto.png) + +プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 + +1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 + diff --git a/automanual/new_delete/6-22-2.md b/automanual/new_delete/6-22-2.md new file mode 100644 index 0000000..ac064ad --- /dev/null +++ b/automanual/new_delete/6-22-2.md @@ -0,0 +1,22 @@ +### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON + +図6-63-GOTO DEPENDING ON構文 + +![alt text](Image/6-63-Goto.png) + +文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 + +1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 + +2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 + +3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 + +4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 + + 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE + + ![alt text](Image/6-64-Goto.png) + + 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 + diff --git a/automanual/new_delete/6-23.md b/automanual/new_delete/6-23.md new file mode 100644 index 0000000..a5334d9 --- /dev/null +++ b/automanual/new_delete/6-23.md @@ -0,0 +1,14 @@ +## 6.23. IF + +図6-65-IF構文 + +![alt text](Image/6-65-If.png) + +IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 + +1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 + diff --git a/automanual/new_delete/6-24.md b/automanual/new_delete/6-24.md new file mode 100644 index 0000000..ef2d1c8 --- /dev/null +++ b/automanual/new_delete/6-24.md @@ -0,0 +1,36 @@ +## 6.24. INITIALIZE + +図6-66-INITIALIZE構文 + +![alt text](Image/6-66-Initialize.png) + +INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 + +1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 + + - 一意名-1として指定されたすべての基本項目。 + + - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: + + - USAGE INDEX項目は除外される。 + + - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 + + 以上は受け取り項目のリストである。 + +2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 + +3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 + +4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 + +5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 + +6. 各受け取り項目の初期化は、以下のルールに従って行われる。 + + - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 + + - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 + + - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 + diff --git a/automanual/new_delete/6-25.md b/automanual/new_delete/6-25.md new file mode 100644 index 0000000..091d700 --- /dev/null +++ b/automanual/new_delete/6-25.md @@ -0,0 +1,8 @@ +## 6.25. INITIATE + +図6-67-INITIATE構文 + +![alt text](Image/6-67-Initiate.png) + +INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + diff --git a/automanual/new_delete/6-26.md b/automanual/new_delete/6-26.md new file mode 100644 index 0000000..c3bc80c --- /dev/null +++ b/automanual/new_delete/6-26.md @@ -0,0 +1,81 @@ +## 6.26. INSPECT + +図6-68-INSPECT構文 + +![alt text](Image/6-68-Inspect.png) + +INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 + +1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 + +2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 + +3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 + +INSPECT文のルールは、指定された句によって異なる。 + +**TALLYING句の場合:** + +TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 + +1. 一意名-2は編集不可の数値項目でなければならない。 + +2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 + +3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 + + a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 + +4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 + + 図6-69-INSPECT文TALLYING句の例
+ ![alt text](Image/6-69-Inspect.png) + + 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない + +**REPLACING句の場合:** + +REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 + +1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 + +3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 + +5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +6. ターゲット文字列は次のように識別できる: + + a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + +7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 + +**CONVERTING句の場合:** + +CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 + +1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 + +3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 + +4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 + +6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 + +8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 + diff --git a/automanual/new_delete/6-27.md b/automanual/new_delete/6-27.md new file mode 100644 index 0000000..99b472f --- /dev/null +++ b/automanual/new_delete/6-27.md @@ -0,0 +1,49 @@ +## 6.27. MERGE + +図6-70-MERGE構文 + +![alt text](Image/6-70-Merge.png) + +MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 + +1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 + +2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 + +3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 + +5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 + + MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 + +6. USING句で指定されたファイルには、以下のルールが適用される。 + + a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 + + b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 + + c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 + +7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 + +8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 + +9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 + +10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 + +11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 + +12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 + +13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** + +14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 + +15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 + +--- +`21` [4.2.2](4-2-2.md)参照。 + diff --git a/automanual/new_delete/6-28-1.md b/automanual/new_delete/6-28-1.md new file mode 100644 index 0000000..23619cf --- /dev/null +++ b/automanual/new_delete/6-28-1.md @@ -0,0 +1,14 @@ +## 6.28. MOVE + +### 6.28.1. MOVE文の書き方1 ― MOVE + +図6-71-MOVE構文 + +![alt text](Image/6-71-Move.png) + +特定の値を一つ以上の受け取りデータ項目に移動することができる。 + +1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 + +2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 + diff --git a/automanual/new_delete/6-28-2.md b/automanual/new_delete/6-28-2.md new file mode 100644 index 0000000..7b76e5d --- /dev/null +++ b/automanual/new_delete/6-28-2.md @@ -0,0 +1,84 @@ +### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING + +図6-72-MOVE CORRESPONDING構文 + +![alt text](Image/6-72-Move.png) + +同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 + +1. CORRESPONDINGという単語は、CORRと省略される場合がある。 + +2. 一意名-1と一意名-2の両方が集団項目でなければならない。 + +3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: + + a. どちらも同じ名前ではあるがFILLERではない。 + + b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 + + c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 + + d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 + + e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 + +4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 + +この規則は、以下の例題を使うとよく理解できる。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. corrdemo. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 X. + 05 A VALUE 'A' PIC X(1). + 05 G1. + 10 G2. + 15 B VALUE 'B' PIC X(1). + 05 C. + 10 FILLER VALUE 'C' PIC X(1). + 05 G3. + 10 G4. + 15 D VALUE 'D' PIC X(1). + 05 V1 VALUE 'E' PIC X(1). + 05 E REDEFINES V1 PIC X(1). + 05 F VALUE 'F' PIC X(1). + 05 G VALUE ALL 'G'. + 10 G2 OCCURS 4 TIMES PIC X(1). + 05 H VALUE ALL 'H' PIC X(4). + 01 Y. + 02 A PIC X(1). + 02 G1. + 03 G2. + 04 B PIC X(1). + 02 C PIC X(1). + 02 G3. + 03 G5. + 04 D PIC X(1). + 02 E PIC X(1). + 02 V2 PIC X(1). + 02 G PIC X(4). + 02 H OCCURS 4 TIMES PIC X(1). + 66 F RENAMES V2. + PROCEDURE DIVISION. + 100-Main. + MOVE ALL '-' TO Y. + DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. + DISPLAY 'Before: ' Y. + MOVE CORR X TO Y. + DISPLAY ' After: ' Y. + STOP RUN + +DISPLAY文で表示される結果は以下の通りである。 + + Names: ABCDEFGGGGHHHH + Before: -------------- + After: ABC---GGGG---- + +- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 +- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 +- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 +- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 +- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 +- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 + diff --git a/automanual/new_delete/6-29-1.md b/automanual/new_delete/6-29-1.md new file mode 100644 index 0000000..5c73830 --- /dev/null +++ b/automanual/new_delete/6-29-1.md @@ -0,0 +1,18 @@ +## 6.29. MULTIPLY + +### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY + +図6-73-MULTIPLY BY構文 + +![alt text](Image/6-73-Multiply.png) + +算術積を実行する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. それぞれ一意名-2を掛けた一意名-1またはinteger-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + diff --git a/automanual/new_delete/6-29-2.md b/automanual/new_delete/6-29-2.md new file mode 100644 index 0000000..9dfa607 --- /dev/null +++ b/automanual/new_delete/6-29-2.md @@ -0,0 +1,18 @@ +### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING + +図6-74-MULTIPLY GIVING構文 + +![alt text](Image/6-74-Multiply.png) + +二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. 一意名-1および一意名-2の値は変更できない。 + +5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + diff --git a/automanual/new_delete/6-3.md b/automanual/new_delete/6-3.md new file mode 100644 index 0000000..045f192 --- /dev/null +++ b/automanual/new_delete/6-3.md @@ -0,0 +1,18 @@ +## 6.3. 宣言の記述形式 + +図6-17-宣言構文 + +![alt text](Image/6-17.png) + +プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 + +1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 + +2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 + +4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 + +5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 + diff --git a/automanual/new_delete/6-30.md b/automanual/new_delete/6-30.md new file mode 100644 index 0000000..db20748 --- /dev/null +++ b/automanual/new_delete/6-30.md @@ -0,0 +1,16 @@ +## 6.30. NEXT SENTENCE + +図6-75-NEXT SENTENCE構文 + +![alt text](Image/6-75-Nextsentnce.png) + +NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 + +1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 + +2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 + +3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 + +4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 + diff --git a/automanual/new_delete/6-31.md b/automanual/new_delete/6-31.md new file mode 100644 index 0000000..6e28b8f --- /dev/null +++ b/automanual/new_delete/6-31.md @@ -0,0 +1,31 @@ +## 6.31. OPEN + +図6-76-OPEN構文 + +![alt text](Image/6-76-Open.png) + +OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 + +1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 + +2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 + +3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 + +4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 + + | オプション | 処理 | + | --- | --- | + | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | + | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | + | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + +5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 + +6. WITH NO REWIND句とWITH LOCK句は機能しない。 + + WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 + + WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 + diff --git a/automanual/new_delete/6-32-1.md b/automanual/new_delete/6-32-1.md new file mode 100644 index 0000000..42cfe04 --- /dev/null +++ b/automanual/new_delete/6-32-1.md @@ -0,0 +1,64 @@ +## 6.32. PERFORM + +### 6.32.1. PERFORM文の書き方1 ― 手続き型 + +図6-77-手続き型PERFORM構文 + +![alt text](Image/6-77-Perform.png) + +制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 + +1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 + +2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 + +3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 +4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 + +5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 + +6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 + +7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 + +8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 + +9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 + +10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 + +11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 + + + 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 + + ![alt text](Image/6-32-1-1.png) + + ``` + 01 PERFORM-DEMO. + 05 PD-ROW OCCURS 3 TIMES. + 10 PD-COL OCCURS 4 TIMES. + 15 PD PIC X(1). + 01 PD-Col-No PIC 9 COMP. + 01 PD-Row-No PIC 9 COMP. + ``` + ![alt text](Image/6-32-1-2.png) + + ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 + PERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 + AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. + ``` + ![alt text](Image/6-32-1-3.png) + + 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. + ``` + diff --git a/automanual/new_delete/6-32-2.md b/automanual/new_delete/6-32-2.md new file mode 100644 index 0000000..3936f36 --- /dev/null +++ b/automanual/new_delete/6-32-2.md @@ -0,0 +1,12 @@ +### 6.32.2. PERFORM文の書き方2 ― インライン型 + +図6-78-インライン型PERFORM構文 + +![alt text](Image/6-78-Perform.png) + +PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 + +1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 + +2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 + diff --git a/automanual/new_delete/6-33-1.md b/automanual/new_delete/6-33-1.md new file mode 100644 index 0000000..fd4efa6 --- /dev/null +++ b/automanual/new_delete/6-33-1.md @@ -0,0 +1,36 @@ +## 6.33. READ + +### 6.33.1. READ文の書き方1 ― 順次読み取り + +図6-79-READ構文(順次読み取り) + +![alt text](Image/6-79-Read.png) + +ファイルから次の(または前の)レコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 + +5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 + +7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 + +8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 + +11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 + diff --git a/automanual/new_delete/6-33-2.md b/automanual/new_delete/6-33-2.md new file mode 100644 index 0000000..3c4523c --- /dev/null +++ b/automanual/new_delete/6-33-2.md @@ -0,0 +1,44 @@ +### 6.33.2. READ文の書き方2 ― ランダム読み取り + +図6-80-READ構文(ランダム読み取り) + +![alt text](Image/6-80-Read.png) + +ファイルから任意のレコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 + +5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 + + KEY句がない場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 + + KEY句が指定されている場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 + +6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 + +10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 + diff --git a/automanual/new_delete/6-34.md b/automanual/new_delete/6-34.md new file mode 100644 index 0000000..fb7aee9 --- /dev/null +++ b/automanual/new_delete/6-34.md @@ -0,0 +1,12 @@ +## 6.34. RELEASE + +図6-81-RELEASE構文 + +![alt text](Image/6-81-Release.png) + +RELEASE文は、整列ファイルに新しいレコードを追加する。 + +1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 + +2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 + diff --git a/automanual/new_delete/6-35.md b/automanual/new_delete/6-35.md new file mode 100644 index 0000000..2a02c3c --- /dev/null +++ b/automanual/new_delete/6-35.md @@ -0,0 +1,14 @@ +## 6.35. RETURN + +図6-82-RETURN構文 + +![alt text](Image/6-82-Return.png) + +RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 + +1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 + +2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 + +3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 + diff --git a/automanual/new_delete/6-36.md b/automanual/new_delete/6-36.md new file mode 100644 index 0000000..5fc3275 --- /dev/null +++ b/automanual/new_delete/6-36.md @@ -0,0 +1,34 @@ +## 6.36. REWRITE + +図6-83-REWRITE構文 + +![alt text](Image/6-83-Rewrite.png) + +REWRITE文は、ディスクファイル上の論理レコードを置き換える。 + +1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 + +2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 + +3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 + +4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 + +6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: + + a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 + + b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 + +7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: + + a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 + + b. レコード名-1のサイズは更新される可能性がある。 + +8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 + +9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 + diff --git a/automanual/new_delete/6-37.md b/automanual/new_delete/6-37.md new file mode 100644 index 0000000..aeb0332 --- /dev/null +++ b/automanual/new_delete/6-37.md @@ -0,0 +1,10 @@ +## 6.37. ROLLBACK + +図6-84-ROLLBACK構文 + +![alt text](Image/6-84-Rollback.png) + +ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 + +1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 + diff --git a/automanual/new_delete/6-38-1.md b/automanual/new_delete/6-38-1.md new file mode 100644 index 0000000..d05e06c --- /dev/null +++ b/automanual/new_delete/6-38-1.md @@ -0,0 +1,26 @@ +## 6.38. SEARCH + +### 6.38.1. SEARCH文の書き方1 ― 順次探索 + +図6-85-SEARCH構文(順次探索) + +![alt text](Image/6-85-Search.png) + +SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 + +1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 + +2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 + +3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: + ``` + SET 指標名-1 TO 1 + ``` +4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 + +5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 + +6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 + +7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 +  diff --git a/automanual/new_delete/6-38-2.md b/automanual/new_delete/6-38-2.md new file mode 100644 index 0000000..c1e8a3d --- /dev/null +++ b/automanual/new_delete/6-38-2.md @@ -0,0 +1,61 @@ +### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) + +図6-86-SEARCH構文(二分探索) + +![alt text](Image/6-86-Search.png) + +整列されたテーブルに対して二分探索を実行する。 + +1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 + +2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 + + a. テーブルは上記1項の要件を満たしている。 + + b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` + + c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 + + aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 + +3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 + +4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 + +5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 + +6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 + +7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 + +8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` + + a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 + + b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 + + - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 + + - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 + + - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 + + c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 + + d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 + +上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 + +コンピュータ研究者は、二つの探索方法を次のように比較する: + +- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 + +- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 + +探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 + +--- +`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 + +`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 + diff --git a/automanual/new_delete/6-39-1.md b/automanual/new_delete/6-39-1.md new file mode 100644 index 0000000..dbc9f68 --- /dev/null +++ b/automanual/new_delete/6-39-1.md @@ -0,0 +1,22 @@ +## 6.39. SET + +### 6.39.1. SET文の書き方1 ― 環境設定 + +図6-87-SET構文(環境設定) + +![alt text](Image/6-87-Set.png) + +プログラム内から環境値を簡単に設定することができる。 + +1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 + +2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 + + DSIPLAY SET ENVIRONMENT “VARNAME” TO + "VALUE" + “VARNAME” UPON ENVIRONMENT-NAME + END-DISPLAY + DSIPLAY + “VALUE” UPON ENVIRONMENT-VALUE + END-DISPLAY + diff --git a/automanual/new_delete/6-39-2.md b/automanual/new_delete/6-39-2.md new file mode 100644 index 0000000..2d79aca --- /dev/null +++ b/automanual/new_delete/6-39-2.md @@ -0,0 +1,16 @@ +### 6.39.2. SET文の書き方2 ― プログラムポインター設定 + +図6-88-SET構文(プログラムポインター設定) + +![alt text](Image/6-88-Set.png) + +手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 + +1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 + +2. program-pointer-1はプログラムポインターとして使用しなければならない。 + +3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 + +4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 + diff --git a/automanual/new_delete/6-39-3.md b/automanual/new_delete/6-39-3.md new file mode 100644 index 0000000..17af070 --- /dev/null +++ b/automanual/new_delete/6-39-3.md @@ -0,0 +1,12 @@ +### 6.39.3. SET文の書き方3 ― アドレス設定 + +図6-89-SET構文(アドレス設定) + +![alt text](Image/6-89-Set.png) + +データ項目の内容ではなく、アドレスを処理するために使われる。 + +1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 + +2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 + diff --git a/automanual/new_delete/6-39-4.md b/automanual/new_delete/6-39-4.md new file mode 100644 index 0000000..6e54a5f --- /dev/null +++ b/automanual/new_delete/6-39-4.md @@ -0,0 +1,10 @@ +### 6.39.4. SET文の書き方4 ― インデックス設定 + +図6-90-SET構文(インデックス設定) + +![alt text](Image/6-90-Set.png) + +USAGE INDEXデータ項目に値を割り当てる。 + +1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 + diff --git a/automanual/new_delete/6-39-5.md b/automanual/new_delete/6-39-5.md new file mode 100644 index 0000000..0d19591 --- /dev/null +++ b/automanual/new_delete/6-39-5.md @@ -0,0 +1,11 @@ +### 6.39.5. SET文の書き方5 ― UP/DOWN設定 + +図6-91-SET構文(UP/DOWN設定) + +![alt text](Image/6-91-Set.png) + +インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 + +1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 + +2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 diff --git a/automanual/new_delete/6-39-6.md b/automanual/new_delete/6-39-6.md new file mode 100644 index 0000000..5a6e842 --- /dev/null +++ b/automanual/new_delete/6-39-6.md @@ -0,0 +1,14 @@ +### 6.39.6. SET文の書き方6 ― 条件名設定 + +図6-92-SET構文(条件名設定) + +![alt text](Image/6-92-Set.png) + +レベル88条件名のTRUE/FALSE値を指定することができる。 + +1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 + +2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 + +3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 + diff --git a/automanual/new_delete/6-39-7.md b/automanual/new_delete/6-39-7.md new file mode 100644 index 0000000..637d4c6 --- /dev/null +++ b/automanual/new_delete/6-39-7.md @@ -0,0 +1,10 @@ +### 6.39.7. SET文の書き方7 ― スイッチ設定 + +図6-93-SET構文(スイッチ設定) + +![alt text](Image/6-93-Set.png) + +スイッチをオンまたはオフにする。 + +1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 + diff --git a/automanual/new_delete/6-4-1.md b/automanual/new_delete/6-4-1.md new file mode 100644 index 0000000..3778313 --- /dev/null +++ b/automanual/new_delete/6-4-1.md @@ -0,0 +1,14 @@ +## 6.4. ACCEPT + +### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り + +図6-18-ACCEPT構文(コンソールからの読み取り) + +![alt text](Image/6-18.png) + +コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 + +1. FROM句を使う場合、指定するニーモニック名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義のニーモニック名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 + +2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 + diff --git a/automanual/new_delete/6-4-2.md b/automanual/new_delete/6-4-2.md new file mode 100644 index 0000000..db82816 --- /dev/null +++ b/automanual/new_delete/6-4-2.md @@ -0,0 +1,25 @@ +### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 + +図6-19-ACCEPT構文(コマンドライン引数) + +![alt text](Image/6-19.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 + +2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 + + - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 + + - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 + + - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 + +3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 + +4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 + diff --git a/automanual/new_delete/6-4-3.md b/automanual/new_delete/6-4-3.md new file mode 100644 index 0000000..7e96959 --- /dev/null +++ b/automanual/new_delete/6-4-3.md @@ -0,0 +1,17 @@ +### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 + +図6-20-ACCEPT構文(環境変数値の取得) + +![alt text](Image/6-20.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 + +2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 + +3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 + diff --git a/automanual/new_delete/6-4-4.md b/automanual/new_delete/6-4-4.md new file mode 100644 index 0000000..993a6ed --- /dev/null +++ b/automanual/new_delete/6-4-4.md @@ -0,0 +1,20 @@ +### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 + +図6-21-ACCEPT構文(画面データの取得) + +![alt text](Image/6-21.png) + +画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 + +1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 + +2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 + +4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 + +5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 + +6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + diff --git a/automanual/new_delete/6-4-5.md b/automanual/new_delete/6-4-5.md new file mode 100644 index 0000000..80d6812 --- /dev/null +++ b/automanual/new_delete/6-4-5.md @@ -0,0 +1,14 @@ +### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 + +図6-22-ACCEPT構文(日付/時刻の取得)構文 + +![alt text](Image/6-22.png) + +システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 + +1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 + + 表6-23-ACCEPTオプション(日付/時刻の取得) + + ![!\[alt text\](Image/6-23.png)](Image/6-23.png) + diff --git a/automanual/new_delete/6-4-6.md b/automanual/new_delete/6-4-6.md new file mode 100644 index 0000000..8fcfc08 --- /dev/null +++ b/automanual/new_delete/6-4-6.md @@ -0,0 +1,10 @@ +### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 + +図6-24-ACCEPT(画面サイズデータの取得)構文 + +![alt text](Image/6-24.png) + +プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 + +1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 + diff --git a/automanual/new_delete/6-4-7.md b/automanual/new_delete/6-4-7.md new file mode 100644 index 0000000..6ff0c0a --- /dev/null +++ b/automanual/new_delete/6-4-7.md @@ -0,0 +1,8 @@ +### 6.4.7. ACCEPT文の例外処理 + +図6-25-ACCEPT例外処理構文 + +![alt text](Image/6-25.png) + +ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 + diff --git a/automanual/new_delete/6-40-1.md b/automanual/new_delete/6-40-1.md new file mode 100644 index 0000000..f203b04 --- /dev/null +++ b/automanual/new_delete/6-40-1.md @@ -0,0 +1,82 @@ +## 6.40. SORT + +### 6.40.1. SORT文の書き方1 ― ファイルソート + +図6-94-SORT構文(ファイルソート) + +![alt text](Image/6-94-Sort.png) + +一つ以上のキー項目に従って、大量のデータを整列することができる。 + +1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 + +2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 + +3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 + +6. SORT文は次の3段階の働きがある。 + + ステージ1(入力フェーズ): + + a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 + + b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 + + c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 + + d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 + + e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 + + g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 + + h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 + + ステージ2(ソートフェーズ): + + a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + + b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 + + SORT Sort-File + ASCENDING KEY Transaction-Date + ASCENDING KEY Account-Number + DESCENDING KEY Transaction-Amount + . + . + . + + + このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 + + c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 + + ステージ3(出力フェーズ): + + a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 + + b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 + + c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 + + d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 + + e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 + + g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 + +7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 + +--- +`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 + +`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 + diff --git a/automanual/new_delete/6-40-2.md b/automanual/new_delete/6-40-2.md new file mode 100644 index 0000000..59e778b --- /dev/null +++ b/automanual/new_delete/6-40-2.md @@ -0,0 +1,22 @@ +### 6.40.2. SORT文の書き方2 ― テーブルソート + +図6-95-SORT構文(テーブルソート) + +![alt text](Image/6-95-Set.png) + +一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 + +1. テーブル名データ項目には、OCCURS句が必要である。 + +2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 + +3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 + +5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 + +6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + +7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 + diff --git a/automanual/new_delete/6-41.md b/automanual/new_delete/6-41.md new file mode 100644 index 0000000..0d5429e --- /dev/null +++ b/automanual/new_delete/6-41.md @@ -0,0 +1,34 @@ +## 6.41. START + +図6-96-START構文 + +![alt text](Image/6-96-Start.png) + +START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 + +1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 + +2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 + +3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 + +4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 + +5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 + +6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 + +7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 + + a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 + + b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 + +8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 + +9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 + +10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 + +11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 + diff --git a/automanual/new_delete/6-42.md b/automanual/new_delete/6-42.md new file mode 100644 index 0000000..7d12ec5 --- /dev/null +++ b/automanual/new_delete/6-42.md @@ -0,0 +1,19 @@ +## 6.42. STOP + +図6-97-STOP構文 + +![alt text](Image/6-97-Stop.png) + +STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 + +1. RETURNING句とGIVING句は同意義のものとして利用できる。 + +2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 + +3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 + +4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: + + STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE + STOP RUN + diff --git a/automanual/new_delete/6-43.md b/automanual/new_delete/6-43.md new file mode 100644 index 0000000..255f905 --- /dev/null +++ b/automanual/new_delete/6-43.md @@ -0,0 +1,30 @@ +## 6.43. STRING + +図6-98-STRING構文 + +![alt text](Image/6-98-String.png) + +STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 + +1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 + +2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 + +3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 + +4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 + +5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 + +6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 + +7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 + +8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 + +9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 + +10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 + +11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 + diff --git a/automanual/new_delete/6-44-1.md b/automanual/new_delete/6-44-1.md new file mode 100644 index 0000000..2d51a41 --- /dev/null +++ b/automanual/new_delete/6-44-1.md @@ -0,0 +1,16 @@ +## 6.44. SUBTRACT + +### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM + +図6-99-SUBSTRACT構文 + +![alt text](Image/6-99-Subtract.png) + +FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/new_delete/6-44-2.md b/automanual/new_delete/6-44-2.md new file mode 100644 index 0000000..5e5b0cd --- /dev/null +++ b/automanual/new_delete/6-44-2.md @@ -0,0 +1,16 @@ +### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING + +図6-100-SUBSTRACT GIVING構文 + +![alt text](Image/6-100-Subtract.png) + +FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/new_delete/6-44-3.md b/automanual/new_delete/6-44-3.md new file mode 100644 index 0000000..9001dcf --- /dev/null +++ b/automanual/new_delete/6-44-3.md @@ -0,0 +1,12 @@ +### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING + +図6-101-SUBSTRACT CORRESPONDING構文 + +![alt text](Image/6-101-Subtract.png) + +二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 + +1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/new_delete/6-45.md b/automanual/new_delete/6-45.md new file mode 100644 index 0000000..6bc0b86 --- /dev/null +++ b/automanual/new_delete/6-45.md @@ -0,0 +1,8 @@ +## 6.45. SUPPRESS + +図6-102-SUPPRESS構文 + +![alt text](Image/6-102-Suppress.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 + diff --git a/automanual/new_delete/6-46.md b/automanual/new_delete/6-46.md new file mode 100644 index 0000000..8ec0703 --- /dev/null +++ b/automanual/new_delete/6-46.md @@ -0,0 +1,8 @@ +## 6.46. TERMINATE + +図6-103-TERMINATE構文 + +![alt text](Image/6-103-Terminate.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 + diff --git a/automanual/new_delete/6-47.md b/automanual/new_delete/6-47.md new file mode 100644 index 0000000..7ad4f71 --- /dev/null +++ b/automanual/new_delete/6-47.md @@ -0,0 +1,24 @@ +## 6.47. TRANSFORM + +図6-104-TRANSFORM構文 + +![alt text](Image/6-104-Transform.png) + +TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 + +1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 + +2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 + +3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 + +4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 + +5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 + + 図6-105-機能的なTRANSFORM文 + + ![alt text](Image/6-105-Transform.png) + diff --git a/automanual/new_delete/6-48.md b/automanual/new_delete/6-48.md new file mode 100644 index 0000000..2696b86 --- /dev/null +++ b/automanual/new_delete/6-48.md @@ -0,0 +1,15 @@ +## 6.48. UNLOCK + +図6-106-UNLOCK構文 + +![alt text](Image/6-106-Unlock.png) + +この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 + +1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 + +2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 + +--- +`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 + diff --git a/automanual/new_delete/6-49.md b/automanual/new_delete/6-49.md new file mode 100644 index 0000000..b7db717 --- /dev/null +++ b/automanual/new_delete/6-49.md @@ -0,0 +1,61 @@ +## 6.49. UNSTRING + +図6-107-UNSTRING構文 + +![alt text](Image/6-107-Unstring.png) + +UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 + +1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 + +2. 定数-1および定数-2は、英数字の定数でなければならない。 + +3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 + +4. 一意名-10の値は0より大きい必要がある。 + +5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 + +6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 + +7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 + +8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 + +9. ソース文字列が部分文字列に解析される例を次に示す: + + ![alt text](Image/6-49-1.png) + + 図6-108-STRING文の例 + + ![alt text](Image/6-108-Unstring.png) + + 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 + + ![alt text](Image/6-49-2.png) + + すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 + + すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 + +10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-3.png) + +11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-4.png) + +12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 + +13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 + +14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 + +15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 + +--- +`27` 空白文字列のMOVEは、空白のMOVEと同じである。 + +`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 + diff --git a/automanual/new_delete/6-5-1.md b/automanual/new_delete/6-5-1.md new file mode 100644 index 0000000..a21c2f9 --- /dev/null +++ b/automanual/new_delete/6-5-1.md @@ -0,0 +1,26 @@ +## 6.5. ADD + +### 6.5.1. ADD文の書き方1 ― ADD TO + +図6-26-ADD TO構文 + +![alt text](Image/6-26.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 + +4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 + +5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 + + 図6-27-ON SIZE ERROR句を使用するサンプルプログラム + + ![alt text](Image/6-27.png) + +6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 + diff --git a/automanual/new_delete/6-5-2.md b/automanual/new_delete/6-5-2.md new file mode 100644 index 0000000..f99be48 --- /dev/null +++ b/automanual/new_delete/6-5-2.md @@ -0,0 +1,18 @@ +### 6.5.2. ADD文の書き方2 ― ADD GIVING + +図6-28-ADD GIVING構文 + +![alt text](Image/6-28.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. 一意名-2の内容は変更できない。 + +5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + diff --git a/automanual/new_delete/6-5-3.md b/automanual/new_delete/6-5-3.md new file mode 100644 index 0000000..a200cb6 --- /dev/null +++ b/automanual/new_delete/6-5-3.md @@ -0,0 +1,12 @@ +### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING + +図6-29-ADD CORRESPONDING構文 + +![alt text](Image/6-29.png) + +二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 + +1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + diff --git a/automanual/new_delete/6-50.md b/automanual/new_delete/6-50.md new file mode 100644 index 0000000..166d7a3 --- /dev/null +++ b/automanual/new_delete/6-50.md @@ -0,0 +1,81 @@ +## 6.50. WRITE + +図6-109-WRITE構文 + +![alt text](Image/6-109-Write.png) + +WRITE文は、OPENファイルに新しいレコードを書き込む。 + +1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 + +2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 + +3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 + +4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 + +5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 + +6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 + +7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 + +8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 + +9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 + +10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 + +11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 + +12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 + +13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: + + a. AFTER ADVANCINGが指定されている場合: + + - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + c. BEFORE ADVANCINGが指定されている場合: + + - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 + + - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 + +14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 + + FD Report-File + LINAGE IS 66 LINES + ........WITH FOOTER AT 57 + ........LINES AT TOP 3 + ........LINES AT BOTTOM 3 + . + . + . + OPEN OUTPUT Report-File + PERFORM Generate-Page-Header + . + . + . + WRITE Report-Rec AFTER ADVANCING 1 LINE + AT END-OF-PAGE PERFORM Generate-Page-Header + END-WRITE + . + . + . + CLOSE Report-File + +15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 + +16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 + +17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 + diff --git a/automanual/new_delete/6-6.md b/automanual/new_delete/6-6.md new file mode 100644 index 0000000..010bca5 --- /dev/null +++ b/automanual/new_delete/6-6.md @@ -0,0 +1,42 @@ +## 6.6. ALLOCATE + +図6-30-ALLOCATE構文 + +![alt text](Image/6-30.png) + +ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 + +1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 + +2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 + +3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 + +4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 + +5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 +6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 + +7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 + +8. 基本的な使用法は二つあり、最も単純なものは次の例である。 + + ALLOCATE My-01-Item + + `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 + + 二つ目の使用法は以下の通りである。 + + ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. + + SET ADDRESS OF My-01-Item TO The-Pointer. + + ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 + + 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 + +9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 + +--- +`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 + diff --git a/automanual/new_delete/6-7.md b/automanual/new_delete/6-7.md new file mode 100644 index 0000000..bd033c9 --- /dev/null +++ b/automanual/new_delete/6-7.md @@ -0,0 +1,47 @@ +## 6.7. CALL + +図6-31-CALL構文 + +![alt text](Image/6-31.png) + +CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 + +1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 + +2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 + +3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 + +4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 + +5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 + +6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 + +7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 + +8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 + +9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 + +10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 + +11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 + + 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) + + ![alt text](Image/6-32.png) + +12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 + + 図6-33-CALL BY VALUE句 + + ![alt text](Image/6-33.png) + +13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 + +14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 + +--- +`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 + diff --git a/automanual/new_delete/6-8-1.md b/automanual/new_delete/6-8-1.md new file mode 100644 index 0000000..69edccd --- /dev/null +++ b/automanual/new_delete/6-8-1.md @@ -0,0 +1,12 @@ +## 6.8. CANSEL + +### 6.8.1. CANCEL文の書き方1 ― CANCEL + +図6-34-CANCEL構文 + +![alt text](Image/6-34.png) + +CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 + +1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 + diff --git a/automanual/new_delete/6-8-2.md b/automanual/new_delete/6-8-2.md new file mode 100644 index 0000000..8d6803a --- /dev/null +++ b/automanual/new_delete/6-8-2.md @@ -0,0 +1,8 @@ +### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL + +図6-35-CANCEL ALL構文 + +![alt text](Image/6-35(cancel).png) + +CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 + diff --git a/automanual/new_delete/6-9.md b/automanual/new_delete/6-9.md new file mode 100644 index 0000000..90a3261 --- /dev/null +++ b/automanual/new_delete/6-9.md @@ -0,0 +1,22 @@ +## 6.9. CLOSE + +図6-36-CLOSE構文 + +![alt text](Image/6-36-CLOSE.png) + +CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 + +1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 + +2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 + +3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 + +4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 + +5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 + +6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 + +7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 + diff --git a/automanual/new_delete/7-1.md b/automanual/new_delete/7-1.md new file mode 100644 index 0000000..5d7c127 --- /dev/null +++ b/automanual/new_delete/7-1.md @@ -0,0 +1,20 @@ +# 7. 日本語の使用 + +日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 + +## 7.1. 英数字項目の日本語 + +文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 + + + 01 データ項目1 PIC X(8) VALUE"顧客code" + + 01 データ項目2 PIC X(10) VALUE"顧客コード" + +データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 + +注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 + +1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 +2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) + diff --git a/automanual/new_delete/7-2.md b/automanual/new_delete/7-2.md new file mode 100644 index 0000000..7267dc2 --- /dev/null +++ b/automanual/new_delete/7-2.md @@ -0,0 +1,13 @@ +## 7.2. 日本語項目と表意定数 + +日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 + +表7-1-日本語項目と表意定数の値 + +| 表意定数 | シフトJISコード | +| --- | :--- | +| SPACE(S) | 日本語空白文字 X"8140" | +| HIGH-VALUE(S) | X"FFFF" | +| LOW-VALUE(S) | X"0000" | +| ALL 定数 | 定数の値に依存する | + diff --git a/automanual/new_delete/7-3-1.md b/automanual/new_delete/7-3-1.md new file mode 100644 index 0000000..d5284d0 --- /dev/null +++ b/automanual/new_delete/7-3-1.md @@ -0,0 +1,49 @@ +## 7.3. 各命令文と日本語の取扱い + +### 7.3.1. MOVE文 + +MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 + +表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 + +表7-2-転記の処理方法 + +| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | +| :--- | :--- | :--- | +| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | +| 非整数 | 日本語,日本語編集 | コンパイルエラー | +| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 日本語,日本語編集 | 英字 | そのまま転記 | +| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | +| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | +| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | + +データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 + +文字には半角カタカナも含まれる。 + +ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 + +受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 + +表7-3-送出し側データ項目の内容に対する処理方法 + +| 送出し側データ項目の内容 | 処理方式 | +| --- | --- | +| 正しい文字 | 全角文字へコード変換 | +| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | +| 正しい日本語文字 | そのまま転記 | +| 不正な日本語文字(≠文字) | そのまま転記 | +| X”00” | X”0000”29 | +| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | +| X”FF” | X”FFFF” | +| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | + +ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 + +--- +`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 + diff --git a/automanual/new_delete/7-3-2.md b/automanual/new_delete/7-3-2.md new file mode 100644 index 0000000..df3acf6 --- /dev/null +++ b/automanual/new_delete/7-3-2.md @@ -0,0 +1,6 @@ +### 7.3.2. ACCEPT/DISPLAY文 + +ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 + +日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 + diff --git a/automanual/new_delete/7-4.md b/automanual/new_delete/7-4.md new file mode 100644 index 0000000..b7b50ea --- /dev/null +++ b/automanual/new_delete/7-4.md @@ -0,0 +1,12 @@ +## 7.4. UTF-8の使用 + +opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 + +1. PICTURE句において、「N」1つは3バイトと見なす。 + +2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 + +3. 空白詰めは半角空白で行われる。 + +4. STRING文において、項目の種類が混在した時のチェックを抑止する。 + diff --git a/automanual/new_delete/8-1-1.md b/automanual/new_delete/8-1-1.md new file mode 100644 index 0000000..783f243 --- /dev/null +++ b/automanual/new_delete/8-1-1.md @@ -0,0 +1,12 @@ +# 8. opensource COBOLシステムインターフェース + +## 8.1. opensource COBOLコンパイラの使い方(cobc) + +### 8.1.1. 解説 + +プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 +プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 +空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 +opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 +opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 + diff --git a/automanual/new_delete/8-1-2.md b/automanual/new_delete/8-1-2.md new file mode 100644 index 0000000..1f0a78b --- /dev/null +++ b/automanual/new_delete/8-1-2.md @@ -0,0 +1,88 @@ +### 8.1.2. コンパイルオプション + +次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 + + 使い方: cobc [options] file... + オプション: + --help このメッセージを表示します + --version, -V コンパイラのバージョンを表示します + -v コンパイラが起動したプログラムを表示します + -x 実行可能プログラムをビルドします + -m 動的ロード可能モジュールをビルドします(デフォルト) + -std=<方言> 指定した方言に基づいて警告/機能します : + cobol2002 Cobol 2002 + cobol85 Cobol 85 + ibm IBM互換 + mvs MVS互換 + bs2000 BS2000互換 + mf Micro Focus互換 + default 指定しない + config/default.conf および config/*.conf を参照してください + -free 自由形式を使用します + -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します + -fixed 固定形式を使用します(デフォルト) + -O, -O2, -Os 最適化を有功にします + -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします + -debug すべての実行時エラーチェックを有功にします + -o <ファイル> 出力先を <ファイル> にします + -b すべての入力ファイルをひとつに結合します + 動的ロード可能モジュール + -E 前処理のみ; コンパイルやリンクを行いません + -C トランスレートのみ; COBOL から C へ変換します + -S コンパイルのみ; アセンブリファイルを出力します + -c コンパイルとアセンブルを行い、リンクを行いません + -t <ファイル> プログラムリストを <ファイル> に生成します + -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます + -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます + -l ライブラリ をリンクします + -B Cコンパイルフェーズに を追加します + -Q Cリンクフェーズに を追加します + -D Cコンパイラに を渡します + -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください + --list-reserved 予約語の一覧を表示します + --list-intrinsics 組み込み関数の一覧を表示します + --list-mnemonics 作成者語の一覧を表示します + -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) + -MT 依存関係リストで使用される対象ファイルを指定します + -MF <ファイル> 依存関係リストを <ファイル> に生成します + -ext 既定のファイル拡張子を追加します + -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします + -reference_check 実行時の参照チェックを有効にします + -constant(=) $IF 文で評価する定数名 に 値 を設定します + + -W すべての警告を有功にする + -Wall 以下を除くすべての警告を有功にする + -Wobsolete 廃要素が使われていれば警告する + -Warchaic 古い仕様が使われていれば警告する + -Wredefinition データ項目の再定義を警告する + -Wconstant 不適切な定数を警告する + -Wparentheses OR と AND が括弧なしで並んでいれば警告する + -Wstrict-typing タイプの不適合を厳密に警告する + -Wimplicit-define データ項目の再定義を警告する + -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する + (-Wall指定時は適用されません) + -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) + -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) + -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) + -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) + -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) + -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) + + -ftrace トレースコードの生成(実行された節/段落の追跡) + -ftraceall トレースコードの生成(実行された節/段落/文の追跡) + -fsyntax-only 文法チェックのみ。何も出力しない + -fdebugging-line デバッグ行(標識領域に'D')を有効にする + -fsource-location ソース行情報の生成(-debugか-gで有効) + -fimplicit-init Cobolラインタイム初期化の自動実行 + -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) + -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) + -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) + -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) + -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) + -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない + -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す + -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) + -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す + +[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 + diff --git a/automanual/new_delete/8-1-3.md b/automanual/new_delete/8-1-3.md new file mode 100644 index 0000000..7e2ea31 --- /dev/null +++ b/automanual/new_delete/8-1-3.md @@ -0,0 +1,10 @@ +### 8.1.3. 実行可能プログラムのコンパイル + +最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 + + cobc –x prog1.cbl prog2.cbl prog3.cbl + +メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 + +これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 + diff --git a/automanual/new_delete/8-1-4.md b/automanual/new_delete/8-1-4.md new file mode 100644 index 0000000..f241eb8 --- /dev/null +++ b/automanual/new_delete/8-1-4.md @@ -0,0 +1,35 @@ +### 8.1.4. 動的にロード可能なサブプログラム + +実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 + + cobc –m sprog1.cbl +または + + cobc –m sprog1.cbl sprog2.cbl sprog3.cbl + +上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 + +次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 + +1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 + +2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 + +3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 + +4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき + + a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 + + b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 + + c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 + + - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 + + - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 + +5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 + +「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 + diff --git a/automanual/new_delete/8-1-5.md b/automanual/new_delete/8-1-5.md new file mode 100644 index 0000000..f00e201 --- /dev/null +++ b/automanual/new_delete/8-1-5.md @@ -0,0 +1,16 @@ +### 8.1.5. 静的サブルーチン + +opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 + + cobc –S sprog1.cbl + +(注:「**-S**」は大文字で表記する) + +これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 + +メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 + + cobc –x mainprog.cbl sprog1.s + +複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 + diff --git a/automanual/new_delete/8-1-6.md b/automanual/new_delete/8-1-6.md new file mode 100644 index 0000000..c243152 --- /dev/null +++ b/automanual/new_delete/8-1-6.md @@ -0,0 +1,132 @@ +### 8.1.6. COBOLとCプログラムの結合 + +opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 + +#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 + +COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 + +#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い + +どちらの言語も、文字列を固定長の連続した文字順序として格納する。 + +COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: + + 01 LastName PIC X(15). + +USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 + +実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: + + char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ + +Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 + +#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 + +これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 + +表8-1-Cまたはopensource COBOLのデータ型の一致 + +| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | +| :--- | :--- | :--- | :--- | +|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | +| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | +| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | +| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| +| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | +| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | +| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | +| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | +|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | +|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | +|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | +| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | + + + + +同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 + +様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 + +#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し + +CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 + +図8-2-opensource COBOLのC呼び出し + +![alt text](Image/8-2.png) + +考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 + +COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 + +Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` + +これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + $ cc –c subc.c + $ cobc -x maincob.cbl subc.o + $ maincob + Starting cobmain + Starting subc + Arg1=Arg1 + Arg2=Arg2 + Arg3=123456789 + Back + Arg1=Arg1 + Arg2=Yrg2 + Arg3=+0987654321 + Returned value=+000000002 + $ + + + +null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 + +[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 + +#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し + +ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 + +図8-3-Cのopensource COBOL呼び出し + +![alt text](Image/8-3.png) + +Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 + +「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 + +Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 + +コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl + C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob + C:\Users\Gary\Documents\Programs> mainc.exe + Starting mainc... + Starting cobsub.cbl + Arg1=Arg1 + Arg2=Arg2 + Arg3=+0123456789 + Back + Arg1=Xrg1 + Arg2=Xrg2 + Arg3=987654321 + Returned value=2 + C:\Users\Gary\Documents\Programs> + + +第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 + +ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 + +--- +`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 + +`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 + +`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 + diff --git a/automanual/new_delete/8-1-7.md b/automanual/new_delete/8-1-7.md new file mode 100644 index 0000000..66de2b6 --- /dev/null +++ b/automanual/new_delete/8-1-7.md @@ -0,0 +1,29 @@ +### 8.1.7. 重要な環境変数 + +次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 + +表8-4-環境変数コンパイラ + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | +| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | +| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | +| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | +|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | +| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | +| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | +| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | +| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | +| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | +| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | +|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | +|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | + +--- +`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 + diff --git a/automanual/new_delete/8-1-8.md b/automanual/new_delete/8-1-8.md new file mode 100644 index 0000000..9cddd97 --- /dev/null +++ b/automanual/new_delete/8-1-8.md @@ -0,0 +1,24 @@ +### 8.1.8. コンパイル時のコピーブックの検索 + +opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 + +- コンパイルされるプログラムが存在するフォルダ。 +- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 +- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 +- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 + +上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 + +- XXXXXXXX.CPY +- XXXXXXXX.CBL +- XXXXXXXX.COB +- XXXXXXXX.cpy +- XXXXXXXX.cbl +- XXXXXXXX.cob +- XXXXXXXX + +UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 + +--- +`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 + diff --git a/automanual/new_delete/8-1-9.md b/automanual/new_delete/8-1-9.md new file mode 100644 index 0000000..cf58c51 --- /dev/null +++ b/automanual/new_delete/8-1-9.md @@ -0,0 +1,116 @@ +### 8.1.9. コンパイラ構成ファイルの使い方 + +opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 + +以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 + +``` +# COBOL compiler configuration -*- sh -*- + +# Value: any string +name: "opensource COBOL" + +# Value: int +tab-width: 8 +text-column: 72 + +# Value: 'cobol2002', 'mf', 'ibm' +# +assign-clause: mf + +# If yes, file names are resolved at run time using environment variables. +# For example, given ASSIGN TO "DATAFILE", the actual file name will be +# 1. the value of environment variable 'DD_DATAFILE' or +# 2. the value of environment variable 'dd_DATAFILE' or +# 3. the value of environment variable 'DATAFILE' or +# 4. the literal "DATAFILE" +# If no, the value of the assign clause is the file name. +# +# Value: 'yes', 'no' +filename-mapping: yes + +# Value: 'yes', 'no' +pretty-display: yes + +# Value: 'yes', 'no' +auto-initialize: yes + +# Value: 'yes', 'no' +complex-odo: no + +# Value: 'yes', 'no' +indirect-redefines: no + +# Binary byte size - defines the allocated bytes according to PIC +# Value: signed unsigned bytes +# ------ -------- ----- +# '2-4-8' 1 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1-2-4-8' 1 - 2 1 +# 3 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1--8' 1 - 2 1 - 2   1 +# 3 - 4 3 - 4 2 +# 5 - 6 5 - 7 3 +# 7 - 9 8 - 9 4 +# 10 - 11 10 - 12 5 +# 12 - 14 13 - 14 6 +# 15 - 16 15 - 16 7 +# 17 - 18 17 - 18 8 +binary-size: 1-2-4-8 + +# Value: 'yes', 'no' +binary-truncate: yes + +# Value: 'native', 'big-endian' +binary-byteorder: big-endian + +# Value: 'yes', 'no' +larger-redefines-ok: no + +# Value: 'yes', 'no' +relaxed-syntax-check: no + +# Perform type OSVS - If yes, the exit point of any currently executing perform +# is recognized if reached. +# Value: 'yes', 'no' +perform-osvs: no + +# If yes, linkage-section items remain allocated +# between invocations. +# Value: 'yes', 'no' +sticky-linkage: no + +# If yes, allow non-matching level numbers +# Value: 'yes', 'no' +relax-level-hierarchy: no + +# not-reserved: +# Value: Word to be taken out of the reserved words list +# (case independent) + +# Dialect features +# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' +author-paragraph: obsolete +memory-size-clause: obsolete +multiple-file-tape-clause: obsolete +label-records-clause: obsolete +value-of-clause: obsolete +data-records-clause: obsolete +top-level-occurs-clause: skip +synchronized-clause: ok +goto-statement-without-name: obsolete +stop-literal-statement: obsolete +debugging-line: obsolete +padding-character-clause: obsolete +next-sentence-phrase: archaic +eject-statement: skip +entry-statement: obsolete +move-noninteger-to-alphanumeric: error +odo-without-to: ok +``` + diff --git a/automanual/new_delete/8-2-1.md b/automanual/new_delete/8-2-1.md new file mode 100644 index 0000000..6c0e9f7 --- /dev/null +++ b/automanual/new_delete/8-2-1.md @@ -0,0 +1,24 @@ +## 8.2. opensource COBOLプログラムの実行 + +### 8.2.1. プログラムの直接実行 + +「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 + +これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 + +これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 + +プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 + +プログラムの直接実行構文は次の通りである。 + + [path]program [arguments] + +例: +``` + /usr/local/printaccount ACCT=6625378 + または + C:\Users\Me\Documents\Programs\printaccount.exe + ACCT=6625378 +``` + diff --git a/automanual/new_delete/8-2-2.md b/automanual/new_delete/8-2-2.md new file mode 100644 index 0000000..bf162cf --- /dev/null +++ b/automanual/new_delete/8-2-2.md @@ -0,0 +1,22 @@ +### 8.2.2. 「cobcrun」ユーティリティの使用 + +「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 + +opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 + +この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: + + [path]cobcrun program [arguments] + +プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 + +cobcrunの使用例: + + cd /usr/local + cobcrun printaccount ACCT=6625378 + または + cd C:\Users\Me\Documents\Programs + cobcrun printaccount.exe ACCT=6625378 + +cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 + diff --git a/automanual/new_delete/8-2-3.md b/automanual/new_delete/8-2-3.md new file mode 100644 index 0000000..b0be69e --- /dev/null +++ b/automanual/new_delete/8-2-3.md @@ -0,0 +1,7 @@ +### 8.2.3. プログラムの引数 + +プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 + +- ACCEPT ・・・ FROM COMMAND-LINE +- ACCEPT ・・・ FROM ARGUMENT-VALUE + diff --git a/automanual/new_delete/8-2-4.md b/automanual/new_delete/8-2-4.md new file mode 100644 index 0000000..43f0652 --- /dev/null +++ b/automanual/new_delete/8-2-4.md @@ -0,0 +1,24 @@ +### 8.2.4. 重要な環境変数 + +次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 + +表8-5-実行時環境変数 + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| +|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | +|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | +|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| +|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| +|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| +|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| +|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| + +--- +`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 +`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 +`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 + diff --git a/automanual/new_delete/8-3-1.md b/automanual/new_delete/8-3-1.md new file mode 100644 index 0000000..db09af2 --- /dev/null +++ b/automanual/new_delete/8-3-1.md @@ -0,0 +1,749 @@ +## 8.3. 組み込みサブルーチン + +### 8.3.1. 「名前による呼び出し」ルーチン + +opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 + +これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 + + +- 現在のディレクトリの変更 +- ファイルのコピー +- ディレクトリの作成 +- ファイルの作成、開く、閉じる、読み取り、書き込み +- ディレクトリ(フォルダ)の削除 +- ファイルの削除 +- サブルーチンに渡された引数の数の決定 +- ファイル情報の取得(サイズと最終変更日時) +- サブルーチンに渡される引数の長さ(バイト単位)の取得 +- 項目の左揃え、右揃え、または中央揃えの決定 +- ファイルの移動(破壊的な「コピー」) +- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする +- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする + + 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない +- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する + +次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 + +#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* + +このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 + +*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 + +statusは次のいずれかの値を受け取る。 + +| | | +| --- | --- | +| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | +| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | +| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | + + +#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 + +[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 + +#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +第3引数は必須ではあるが、使用されない。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 + +#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +第2引数は必須ではあるが、使用されない。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 + +#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* + +このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 File-Info. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date + 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time + +変更時刻の小数点以下2桁は常に0である。 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 + +#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” + +C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 + +- なし 「R」と同じように扱われる +- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる +- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる +- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる +- それ以外 「R」として扱われる + +#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* + +このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 + +与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 + +| | | +| --- | --- | +| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | +| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | +| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | + +``` + 01 PATTERN PIC X(5) VALUE "*". + 01 DIRECTORY PIC X(256) VALUE + "./list". + 01 FILENAME PIC X(30). + 01 MYDIR PIC 9(8) COMP-5. + PROCEDURE DIVISION. + CALL "C$LIST-DIRECTORY" USING 1, + DIRECTORY, + PATTERN + END-CALL. + MOVE RETURN-CODE TO MYDIR. + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL. + PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES + DISPLAY FUNCTION TRIM(FILENAME) + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL + END-PERFORM. + CALL "C$LIST-DIRECTORY" USING 3, MYDIR + END-CALL. +``` + +#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 + +#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* + +C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 + +メインプログラムからCALLされた場合、戻り値は常に0になる。 + +[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 + +#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* + +このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 + +サイズは、RETURN-CODE特殊レジスタに返される。 + +指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 + +#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* + +C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 + +1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 + +[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 + +#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 + +#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 + +#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「AND」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 + +操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 + +[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 + +#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* + +このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 Argument-2. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-DD PIC 9(2) COMP. *> Modification Time + 05 Mod-MO PIC 9(2) COMP. + 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date + 05 Mod-HH PIC 9(2) COMP. + 05 Mod-MM PIC 9(2) COMP. + 05 Mod-SS PIC 9(2) COMP. + 05 FILLER PIC 9(2) COMP. *> This will always be 00 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 + +#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* + +CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 + +*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 + +サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 + +#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 + +#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 + +#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* + +CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 + +引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` + +後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 + +サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 + +[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 + +#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* + +CBL_DELETE_DIRを使って空のディレクトリを削除する。 + +唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 + +指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 + +RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 + +#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* + +このルーチンは、一般的なエラー処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 + +一度に有効にできるユーザ定義のエラー手続きは1つだけである。 + +エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 + +エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoerrproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Err-Proc. + SET Err-Proc-Address TO ENTRY "999-Err" + CALL "CBL_ERROR_PROC" + USING Err-Proc-Install, Err-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not' & + 'register Error Procedure' + END-IF + . + 099-Now-Test-Err-Proc. + CALL "Tilt" END-CALL + GOBACK + . + 999-Err-Proc. + ENTRY "999-Err" + DISPLAY + '** A Runtime Error Has Occurred **' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* + +このルーチンは、一般的な終了処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 + +一度に有効にできるユーザ定義の終了手続きは1つだけである。 + +終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 + +終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoexitproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Exit-Proc. + SET Exit-Proc-Address TO ENTRY "999-Exit" + CALL "CBL_EXIT_PROC" + USING Exit-Proc-Install, Exit-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not register Exit Procedure' + END-IF + 099-Now-Test-Exit-Proc. + DISPLAY + 'Executing a STOP RUN...' + END-DISPLAY + GOBACK + . + 999-Exit-Proc. + ENTRY "999-Exit" + DISPLAY + '*** STOP RUN has been executed ***' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「EQ」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* + +このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 + +このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 + +#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* + +現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 + +第1引数は使用されないが、**BY VALUE**で指定する必要がある。 + +*length*引数は**BY VALUE**で指定する必要がある。 + +*buffer*引数は**BY REFERENCE**で指定する必要がある。 + +*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 + +*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 + +ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 + +#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「IMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 1 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NIMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* + +このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 + +項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOT」プロセスを示している。 + +| 古い引数2ビット | 新しい引数2ビット | +| :---: | :---: | +| 0 | 1 | +| 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* + +CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 + +item-1として次の集団項目を定義する。 + + 01 KEISEN. + 02 KEI-CMD PIC 9(1) COMP-X. + 02 KEI-LINE PIC 9(2) COMP-X. + 02 KEI-COL PIC 9(2) COMP-X. + 02 KEI-LNG1 PIC 9(2) COMP-X. + 02 KEI-LNG2 PIC 9(2) COMP-X. + 02 KEI-COLOR PIC 9(2) COMP-X. + 02 KEI-PRN PIC 9(2) COMP-X. + +各項目の意味を以下に示す。 + +| | | +| --- | --- | +| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| +| KEI-LINE | 開始ライン(1~24) | +| KEI-COL | 開始カラム(1~80) | +| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | +| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | +| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | +| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | + +#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* + +CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 + +*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 + +1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 + +[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 + +#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* + +このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 + +*file-path*引数は、英数字定数またはデータ項目である。 + +*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 + +- 1 = 入力 (読み取り専用) +- 2 = 出力 (書き込み専用) +- 3 = 入力または出力 + +第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 + +最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 + +RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 + +[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 + +#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「OR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 1 | + + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer + +このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 + +*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* + +このサブルーチンを使用してファイル名を変更できる。 + +*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 + +このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 + +ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 + +#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 + +#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 + +#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* + +このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 +唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「XOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.42. CALL “SYSTEM” USING *command* + +このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 + +CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 + +コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 + +Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 + +ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 + +実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 + +--- +`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
+`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
+ diff --git a/automanual/new_delete/9-1.md b/automanual/new_delete/9-1.md new file mode 100644 index 0000000..f30a611 --- /dev/null +++ b/automanual/new_delete/9-1.md @@ -0,0 +1,51 @@ +# 9. サンプルプログラム + +## 9.1. FileStat-Msgs.cpy – ファイル状態コード + +このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 + +コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 + +``` + COPY FileStat-Msgs + REPLACING STATUS BY Input-File-Status + MSG BY Error-Message. +``` + +以下は、コピーブック「FileStat-Msgs.cpy」である。 + +``` + EVALUATE STATUS + WHEN 00 MOVE 'SUCCESS ' TO MSG + WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG + WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG + WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG + WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG + WHEN 10 MOVE 'END OF FILE ' TO MSG + WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG + WHEN 21 MOVE 'KEY INVALID ' TO MSG + WHEN 22 MOVE 'KEY EXISTS ' TO MSG + WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG + WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG + WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG + WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG + WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG + WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG + WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG + WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG + WHEN 41 MOVE 'ALREADY OPEN ' TO MSG + WHEN 42 MOVE 'NOT OPEN ' TO MSG + WHEN 43 MOVE 'READ NOT DONE ' TO MSG + WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG + WHEN 46 MOVE 'READ ERROR ' TO MSG + WHEN 47 MOVE 'INPUT DENIED ' TO MSG + WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG + WHEN 49 MOVE 'I/O DENIED ' TO MSG + WHEN 51 MOVE 'RECORD LOCKED ' TO MSG + WHEN 52 MOVE 'END-OF-PAGE ' TO MSG + WHEN 57 MOVE 'I/O LINAGE ' TO MSG + WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG + WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG + END-EVALUATE. +``` + diff --git a/automanual/new_delete/9-2.md b/automanual/new_delete/9-2.md new file mode 100644 index 0000000..510be72 --- /dev/null +++ b/automanual/new_delete/9-2.md @@ -0,0 +1,198 @@ +## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン + +次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 + +``` +IDENTIFICATION DIVISION. +PROGRAM-ID. COBDUMP. +***************************************************************** +** This is an OpenCOBOL subroutine that will generate a ** +** formatted Hex/Char dump of a storage area. To use this ** +** subroutine, simply CALL it as follows: ** +** ** +** CALL "COBDUMP" USING ** +** [ ] ** +** ** +** If specified, the argument specifies how many ** +** bytes of are to be dumped. If absent, all of ** +** will be dumped (i.e. LENGTH() will ** +** be assumed for ). ** +** ** +** >>> Note that the subroutine name MUST be specified in <<< ** +** >>> UPPERCASE <<< ** +** ** +** The dump is generated to STDERR, so you may pipe it to a ** +** file when you execute your program using "2> file". ** +** ** +** AUTHOR: GARY L. CUTLER ** +** CutlerGL@gmail.c ** +** ** +** NOTE: The author has a sentimental attachment to ** +** this subroutine - it's been around since 1971 ** +** and it's been converted to and run on 10 dif- ** +** ferent operating system/compiler environments ** +** ** +** DATE-WRITTEN: October 14, 1971 ** +** ** +***************************************************************** +** DATE CHANGE DESCRIPTION ** +** ====== ==================================================== ** +** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** +** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** +** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** +** SCREEN SECTION enhancements ** +** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** +** GC0983 Converted to IBM VS COBOL - COBOL '74 ** +** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** +** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** +** extensions ** +** GC0703 Converted to Unisys Universal Compiling System (UCS) ** +** COBOL (UCOB) - COBOL '85 ** +** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** +** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** +** 2002 features ** +** GC0410 Enhanced to make 2nd argument (buffer length) ** +** optional ** +***************************************************************** +ENVIRONMENT DIVISION. +CONFIGURATION SECTION. +REPOSITORY. + FUNCTION ALL INTRINSIC. +DATA DIVISION. +WORKING-STORAGE SECTION. +78 Undisplayable-Char-Symbol VALUE X'F9'. +01 Addr-Pointer USAGE POINTER. +01 Addr-Number REDEFINES Addr-Pointer + USAGE BINARY-LONG. + +01 Addr-Sub USAGE BINARY-CHAR. + +01 Addr-Value USAGE BINARY-LONG. + +01 Buffer-Length USAGE BINARY-LONG. + +01 Buffer-Sub COMP-5 PIC 9(4). + +01 Hex-Digits VALUE '0123456789ABCDEF'. +05 Hex-Digit OCCURS 16 TIMES PIC X(1). + +01 Left-Nibble COMP-5 PIC 9(1). +01 Nibble REDEFINES Left-Nibble + BINARY-CHAR. +01 Output-Detail. +05 OD-Addr. +10 OD-Addr-Hex OCCURS 8 TIMES PIC X. +05 FILLER PIC X(1). +05 OD-Byte PIC Z(3)9. +05 FILLER PIC X(1). +05 OD-Hex OCCURS 16 TIMES. +10 OD-Hex-1 PIC X. +10 OD-Hex-2 PIC X. +10 FILLER PIC X. +05 OD-ASCII OCCURS 16 TIMES + PIC X. +01 Output-Sub COMP-5 PIC 9(2). + +01 Output-Header-1. + 05 FILLER PIC X(80) VALUE + '<-Addr-> Byte ' & + '<---------------- Hexadecimal ----------------> ' & + '<---- Char ---->'. +01 Output-Header-2. + 05 FILLER PIC X(80) VALUE + '======== ==== ' & + '=============================================== ' & + '================'. +01 PIC-XX. +05 FILLER PIC X VALUE LOW-VALUES. +05 PIC-X PIC X. +01 PIC-Halfword REDEFINES PIC-XX + PIC 9(4) COMP-X. +01 PIC-X10. +05 FILLER PIC X(2). +05 PIC-X8 PIC X(8). +01 Right-Nibble COMP-5 PIC 9(1). + +LINKAGE SECTION. +01 Buffer PIC X ANY LENGTH. + +01 Buffer-Len USAGE BINARY-LONG. +PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. +000-COBDUMP. + IF NUMBER-OF-CALL-PARAMETERS = 1 + MOVE LENGTH(Buffer) TO Buffer-Length + ELSE + MOVE Buffer-Len TO Buffer-Length + END-IF + MOVE SPACES TO Output-Detail + SET Addr-Pointer TO ADDRESS OF Buffer + PERFORM 100-Generate-Address + MOVE 0 TO Output-Sub + DISPLAY + Output-Header-1 UPON SYSERR + END-DISPLAY + DISPLAY + Output-Header-2 UPON SYSERR + END-DISPLAY + PERFORM VARYING Buffer-Sub FROM 1 BY 1 + UNTIL Buffer-Sub > Buffer-Length + ADD 1 + TO Output-Sub + END-ADD + IF Output-Sub = 1 + MOVE Buffer-Sub TO OD-Byte + END-IF + MOVE Buffer (Buffer-Sub : 1) TO PIC-X + IF (PIC-X < ' ') + OR (PIC-X > '~') + MOVE Undisplayable-Char-Symbol + TO OD-ASCII (Output-Sub) + ELSE + MOVE PIC-X + TO OD-ASCII (Output-Sub) + END-IF + DIVIDE PIC-Halfword BY 16 + GIVING Left-Nibble + REMAINDER Right-Nibble + END-DIVIDE + ADD 1 TO Left-Nibble + Right-Nibble + END-ADD + MOVE Hex-Digit (Left-Nibble) + TO OD-Hex-1 (Output-Sub) + MOVE Hex-Digit (Right-Nibble) + TO OD-Hex-2 (Output-Sub) + IF Output-Sub = 16 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + MOVE SPACES TO Output-Detail + MOVE 0 TO Output-Sub + SET Addr-Pointer UP BY 16 + PERFORM 100-Generate-Address + END-IF +END-PERFORM +IF Output-Sub > 0 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + END-IF + EXIT PROGRAM + . +100-Generate-Address. + MOVE 8 TO Addr-Sub + MOVE Addr-Number TO Addr-Value + MOVE ALL '0' TO OD-Addr + PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 + DIVIDE Addr-Value BY 16 + GIVING Addr-Value + REMAINDER Nibble + END-DIVIDE + ADD 1 TO Nibble + MOVE Hex-Digit (Nibble) + TO OD-Addr-Hex (Addr-Sub) + SUBTRACT 1 FROM Addr-Sub +END-PERFORM +. +``` + diff --git a/automanual/new_delete/TOC.md b/automanual/new_delete/TOC.md new file mode 100644 index 0000000..ec9ca47 --- /dev/null +++ b/automanual/new_delete/TOC.md @@ -0,0 +1,236 @@ +目次 +1. [まえがき](1-1.md) + - [1.1. opensource COBOL とは](1-1.md#11-opensource-cobolとは) + - [1.2. COBOL/opensource COBOL の重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) + - [1.2.1. COBOL プログラムの構文](1-2-1.md#121-cobolプログラムの構文) + - [1.2.2. コピーブック](1-2-2.md) + - [1.2.3. 構造化データ](1-2-3.md) + - [1.2.4. ファイル](1-2-4.md) + - [1.2.5. 表操作](1-2-5.md) + - [1.2.6. データの並び替えと結合](1-2-6.md) + - [1.2.7. 文字列操作](1-2-7.md) + - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) + - [1.3. 構文規則](1-3.md) + - [1.4. ソースコードの形式](1-4.md) + - [1.5. カンマ/セミコロンの使い方](1-5.md) + - [1.6. COPY 文の使い方](1-6.md) + - [1.7. 定数の使い方](1-7-1.md) + - [1.7.1. 数字定数](1-7-1.md#171-数字定数) + - [1.7.2. 英数字定数](1-7-2.md) + - [1.7.3. 日本語定数](1-7-3.md) + - [1.8. 表意定数の使い方](1-8.md) + - [1.9. ユーザ定義名](1-9.md) + - [1.10. LENGTH OF の使い方](1-10.md) +2. [opensource COBOL のプログラム形式](2-1.md) + - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) + - [2.2. ネストされたユーザ定義関数](2-2.md) +3. [見出し部](3.md) +4. [環境部](4-1-1.md) + - [4.1. 構成節](4-1-1.md#41-構成節) + - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) + - [4.1.2. 実行用計算機段落](4-1-2.md) + - [4.1.3. リポジトリ段落](4-1-3.md) + - [4.1.4. 特殊名段落](4-1-4.md) + - [4.2. 入出力節](4-2-1-1.md) + - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) + - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) + - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) + - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) + - [4.2.2. 入出力管理段落](4-2-2.md) +5. [データ部](5-1.md) + - [5.1. ファイル記述](5-1.md#51-ファイル記述) + - [5.2. 整列用記述](5-2.md) + - [5.3. データ記述の形式](5-3.md) + - [5.4. 条件名](5-4.md) + - [5.5. 定数記述](5-5.md) + - [5.6. 画面記述](5-6.md) +6. [手続き部](6-1-1.md) + - [6.1. 構成要素](6-1-1.md#61-構成要素) + - [6.1.1. 表の参照](6-1-1.md#611-表の参照) + - [6.1.2. データ名の修飾](6-1-2.md) + - [6.1.3. 部分参照](6-1-3.md) + - [6.1.4. 式](6-1-4-1.md) + - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) + - [6.1.4.2. 条件式](6-1-4-2.md) + - [6.1.5. ピリオド(.)](6-1-5.md) + - [6.1.6. 動詞/END-動詞](6-1-6.md) + - [6.1.7. 特殊レジスタ](6-1-7.md) + - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) + - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) + - [6.1.8.2. レコードロック](6-1-8-2.md) + - [6.2. 記述形式](6-2.md) + - [6.3. 宣言の記述形式](6-3.md) + - [6.4. ACCEPT](6-4-1.md) + - [6.4.1. ACCEPT 文の書き方 1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) + - [6.4.2. ACCEPT 文の書き方 2 ― コマンドライン引数の取得](6-4-2.md) + - [6.4.3. ACCEPT 文の書き方 3 ― 環境変数値の取得](6-4-3.md) + - [6.4.4. ACCEPT 文の書き方 4 ― 画面データの取得](6-4-4.md) + - [6.4.5. ACCEPT 文の書き方 5 ― 日付/時刻の取得](6-4-5.md) + - [6.4.6. ACCEPT 文の書き方 6 ― 画面サイズデータの取得](6-4-6.md) + - [6.4.7. ACCEPT 文の例外処理](6-4-7.md) + - [6.5. ADD](6-5-1.md) + - [6.5.1. ADD 文の書き方 1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) + - [6.5.2. ADD 文の書き方 2 ― ADD GIVING](6-5-2.md) + - [6.5.3. ADD 文の書き方 3 ― ADD CORRESPONDING](6-5-3.md) + - [6.6. ALLOCATE](6-6.md) + - [6.7. CALL](6-7.md) + - [6.8. CANCEL](6-8-1.md) + - [6.8.1. CANCEL 文の書き方 1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) + - [6.8.2. CANCEL 文の書き方 2 ― CANCEL ALL](6-8-2.md) + - [6.9. CLOSE](6-9.md) + - [6.10. COMMIT](6-10.md) + - [6.11. COMPUTE](6-11.md) + - [6.12. CONTINUE](6-12.md) + - [6.13. DELETE](6-13-1.md) + - [6.13.1. DELETE 文の書き方 1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) + - [6.13.2. DELETE 文の書き方 2 ― DELETE FILE](6-13-2.md) + - [6.14. DISPLAY](6-14-1.md) + - [6.14.1. DISPLAY 文の書き方 1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) + - [6.14.2. DISPLAY 文の書き方 2 ― コマンドライン引数へのアクセス](6-14-2.md) + - [6.14.3. DISPLAY 文の書き方 3 ― 環境変数へのアクセスまたは設定](6-14-3.md) + - [6.14.4. DISPLAY 文の書き方 4 ― 画面データ](6-14-4.md) + - [6.14.5. DISPLAY 文の例外処理](6-14-5.md) + - [6.15. DIVIDE](6-15-1.md) + - [6.15.1. DIVIDE 文の書き方 1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) + - [6.15.2. DIVIDE 文の書き方 2 ― DIVIDE INTO GIVING](6-15-2.md) + - [6.15.3. DIVIDE 文の書き方 3 ― DIVIDE BY GIVING](6-15-3.md) + - [6.15.4. DIVIDE 文の書き方 4 ― DIVIDE INTO REMAINDER](6-15-4.md) + - [6.15.5. DIVIDE 文の書き方 5 ― DIVIDE BY REMAINDER](6-15-5.md) + - [6.16. ENTRY](6-16.md) + - [6.17. EVALUATE](6-17.md) + - [6.18. EXIT](6-18.md) + - [6.19. FREE](6-19.md) + - [6.20. GENERATE](6-20.md) + - [6.21. GOBACK](6-21.md) + - [6.22. GO TO](6-22-1.md) + - [6.22.1. GO TO 文の書き方 1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) + - [6.22.2. GO TO 文の書き方 2 ― GO TO DEPENDING ON](6-22-2.md) + - [6.23. IF](6-23.md) + - [6.24. INITIALIZE](6-24.md) + - [6.25. INITIATE](6-25.md) + - [6.26. INSPECT](6-26.md) + - [6.27. MERGE](6-27.md) + - [6.28. MOVE](6-28-1.md) + - [6.28.1. MOVE 文の書き方 1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) + - [6.28.2. MOVE 文の書き方 2 ― MOVE CORRESPONDING](6-28-2.md) + - [6.29. MULTIPLY](6-29-1.md) + - [6.29.1. MULTIPLY 文の書き方 1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) + - [6.29.2. MULTIPLY 文の書き方 2 ― MULTIPLY GIVING](6-29-2.md) + - [6.30. NEXT SENTENCE](6-30.md) + - [6.31. OPEN](6-31.md) + - [6.32. PERFORM](6-32-1.md) + - [6.32.1. PERFORM 文の書き方 1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) + - [6.32.2. PERFORM 文の書き方 2 ― インライン型](6-32-2.md) + - [6.33. READ](6-33-1.md) + - [6.33.1. READ 文の書き方 1 ―順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) + - [6.33.2. READ 文の書き方 2 ― ランダム読み取り](6-33-2.md) + - [6.34. RELEASE](6-34.md) + - [6.35. RETURN](6-35.md) + - [6.36. REWRITE](6-36.md) + - [6.37. ROLLBACK](6-37.md) + - [6.38. SEARCH](6-38-1.md) + - [6.38.1. SEARCH 文の書き方 1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) + - [6.38.2. SEARCH 文の書き方 2 ― 二分探索(SEARCH ALL)](6-38-2.md) + - [6.39. SET](6-39-1.md) + - [6.39.1. SET 文の書き方 1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) + - [6.39.2. SET 文の書き方 2 ― プログラムポインター設定](6-39-2.md) + - [6.39.3. SET 文の書き方 3 ― アドレス設定](6-39-3.md) + - [6.39.4. SET 文の書き方 4 ― インデックス設定](6-39-4.md) + - [6.39.5. SET 文の書き方 5 ― UP/DOWN 設定](6-39-5.md) + - [6.39.6. SET 文の書き方 6 ― 条件名設定](6-39-6.md) + - [6.39.7. SET 文の書き方 7 ― スイッチ設定](6-39-7.md) + - [6.40. SORT](6-40-1.md) + - [6.40.1. SORT 文の書き方 1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) + - [6.40.2. SORT 文の書き方 2 ― テーブルソート](6-40-2.md) + - [6.41. START](6-41.md) + - [6.42. STOP](6-42.md) + - [6.43. STRING](6-43.md) + - [6.44. SUBTRACT](6-44-1.md) + - [6.44.1. SUBTRACT 文の書き方 1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) + - [6.44.2. SUBTRACT 文の書き方 2 ― SUBTRACT GIVING](6-44-2.md) + - [6.44.3. SUBTRACT 文の書き方 3 ― SUBTRACT CORRESPONDING](6-44-3.md) + - [6.45. SUPPRESS](6-45.md) + - [6.46. TERMINATE](6-46.md) + - [6.47. TRANSFORM](6-47.md) + - [6.48. UNLOCK](6-48.md) + - [6.49. UNSTRING](6-49.md) + - [6.50. WRITE](6-50.md) +7. [日本語の使用](7-1.md) + - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) + - [7.2. 日本語項目と表意定数](7-2.md) + - [7.3. 各命令文と日本語の取扱い](7-3-1.md) + - [7.3.1. MOVE 文](7-3-1.md#731-move文) + - [7.3.2. ACCEPT/DISPLAY 文](7-3-2.md) + - [7.4. UTF-8 の使用](7-4.md) +8. [opensource COBOL システムインターフェース](8-1-1.md) + - [8.1. opensource COBOL コンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) + - [8.1.1. 解説](8-1-1.md#811-解説) + - [8.1.2. コンパイルオプション](8-1-2.md) + - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) + - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) + - [8.1.5. 静的サブルーチン](8-1-5.md) + - [8.1.6. COBOL と C ブログラムの結合](8-1-6.md) + - [8.1.6.1. opensource COBOL ランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) + - [8.1.6.2. opensource COBOL と C の文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) + - [8.1.6.3. C データ型と opensource COBOL USAGE 句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) + - [8.1.6.4. opensource COBOL メインプログラムの C サブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) + - [8.1.6.5. C メインプログラムの opensource COBOL サブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) + - [8.1.7. 重要な環境変数](8-1-7.md) + - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) + - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) + - [8.2. opensource COBOL プログラムの実行](8-2-1.md) + - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) + - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) + - [8.2.3. プログラムの引数](8-2-3.md) + - [8.2.4. 重要な環境変数](8-2-4.md) + - [8.3. 組み込みサブルーチン](8-3-1.md) + - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) + - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) + - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) + - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) + - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) + - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) + - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) + - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) + - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) + - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) + - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) + - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) + - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) + - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) + - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) + - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) + - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) + - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) + - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) + - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) + - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) + - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) + - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) + - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) + - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) + - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) + - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) + - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) + - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) + - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) + - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) + - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) + - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) + - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) + - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) + - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) + - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) + - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) + - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) +9. [サンプルプログラム](9-1.md) + - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) + - [9.2. COBDUMP –16 進数/文字データダンプサブルーチン](9-2.md) + +[クレジット](credit.md) + + diff --git a/automanual/new_delete/credit.md b/automanual/new_delete/credit.md new file mode 100644 index 0000000..f37ce77 --- /dev/null +++ b/automanual/new_delete/credit.md @@ -0,0 +1,29 @@ +
+opensource COBOL Programmer's Guide + +【制作】
+OSSコンソーシアム オープンCOBOLソリューション部会 + +【原著】
+Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") + +【翻訳・執筆】
+東京システムハウス株式会社 島田桃花 + +【マークダウン化】
+東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 + +【監修】
+東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
+株式会社SIT11 飯島裕一 + +【協力】(50音順)
+OVOL ICTソリューションズ株式会社
+株式会社SIT11
+株式会社CIJ
+サン情報サービス株式会社
+ +【発行】
+OSSコンソーシアム オープンCOBOLソリューション部会
+URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) + diff --git a/automanual/old/1-1.md b/automanual/old/1-1.md new file mode 100644 index 0000000..9b09412 --- /dev/null +++ b/automanual/old/1-1.md @@ -0,0 +1,15 @@ +# 1. まえがき + +## 1.1. opensource COBOLとは + +このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 + +opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 + +opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 + +Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 + +--- +`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 + diff --git a/automanual/old/1-10.md b/automanual/old/1-10.md new file mode 100644 index 0000000..18fc7fd --- /dev/null +++ b/automanual/old/1-10.md @@ -0,0 +1,20 @@ +## 1.10. LENGTH OFの使い方 + +オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 + +``` +01 Demo-Identifier PIC X(27). *> This is a 27-character data-item +. +. +. +DISPLAY LENGTH OF “This is a LENGTH OF Example” +DISPLAY LENGTH OF Demo-Identifier +DISPLAY 27 +``` + +定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 + +1. DISPLAY文の定数の代わりとして +2. WRITE文またはRELEASE文のFROM句の一部として +3. PERFORM文のTIMES句の一部として + diff --git a/automanual/old/1-2-1.md b/automanual/old/1-2-1.md new file mode 100644 index 0000000..7f76a9b --- /dev/null +++ b/automanual/old/1-2-1.md @@ -0,0 +1,12 @@ +## 1.2. COBOL/opensource COBOLの重要機能 + +### 1.2.1. COBOLプログラムの構文 + +COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 + +部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 + +このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 + +4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 + diff --git a/automanual/old/1-2-2.md b/automanual/old/1-2-2.md new file mode 100644 index 0000000..4be66aa --- /dev/null +++ b/automanual/old/1-2-2.md @@ -0,0 +1,6 @@ +### 1.2.2. コピーブック + +「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 + +現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 + diff --git a/automanual/old/1-2-3.md b/automanual/old/1-2-3.md new file mode 100644 index 0000000..e8d2dae --- /dev/null +++ b/automanual/old/1-2-3.md @@ -0,0 +1,4 @@ +### 1.2.3. 構造化データ + +COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 + diff --git a/automanual/old/1-2-4.md b/automanual/old/1-2-4.md new file mode 100644 index 0000000..a4454ac --- /dev/null +++ b/automanual/old/1-2-4.md @@ -0,0 +1,15 @@ +### 1.2.4. ファイル + +COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 + +||| +|:---|:---| +|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| +ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![!\[alt text\](Image/1-0-1.png)](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![!\[alt text\](Image/1-0-2.png)](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| + +すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 + +データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 + diff --git a/automanual/old/1-2-5.md b/automanual/old/1-2-5.md new file mode 100644 index 0000000..942f23d --- /dev/null +++ b/automanual/old/1-2-5.md @@ -0,0 +1,8 @@ +### 1.2.5. 表操作 + +他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 + +1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 + +2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 + diff --git a/automanual/old/1-2-6.md b/automanual/old/1-2-6.md new file mode 100644 index 0000000..9246fa5 --- /dev/null +++ b/automanual/old/1-2-6.md @@ -0,0 +1,8 @@ +### 1.2.6. データの並び替えと結合 + +COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 + +表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 + +同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 + diff --git a/automanual/old/1-2-7.md b/automanual/old/1-2-7.md new file mode 100644 index 0000000..2f3758f --- /dev/null +++ b/automanual/old/1-2-7.md @@ -0,0 +1,25 @@ +### 1.2.7. 文字列操作 + +テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 + +| 機能 | サポートするopensource COBOL機能 | +| :--- | :--- | +|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | +| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | +| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | +| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | +| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | +| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | +| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | +| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| +| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | +| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | +| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | +| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | + diff --git a/automanual/old/1-2-8.md b/automanual/old/1-2-8.md new file mode 100644 index 0000000..2536280 --- /dev/null +++ b/automanual/old/1-2-8.md @@ -0,0 +1,18 @@ +### 1.2.8. テキストユーザインターフェース(TUI)機能 + +COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 + +以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 + +図1-1-TUIサンプル画面 + +![!\[alt text\](Image/1-1.png)](Image/1-1.png) + +このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 + +COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 + +--- + +`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 + diff --git a/automanual/old/1-3.md b/automanual/old/1-3.md new file mode 100644 index 0000000..2ec4693 --- /dev/null +++ b/automanual/old/1-3.md @@ -0,0 +1,16 @@ +## 1.3. 構文規則 + +opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 + +| | | +| :--- | :--- | +| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | +| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | +| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | +| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | +| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | +| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | +| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | +| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | +| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | + diff --git a/automanual/old/1-4.md b/automanual/old/1-4.md new file mode 100644 index 0000000..6978319 --- /dev/null +++ b/automanual/old/1-4.md @@ -0,0 +1,26 @@ +## 1.4. ソースコードの形式 + +従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 + +opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 + +| | | +| :--- | :--- | +| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | +| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | +| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | +| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | + +以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 + +| | | +| :--- | :--- | +| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | +| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | +| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | +| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | +| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | +| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | + diff --git a/automanual/old/1-5.md b/automanual/old/1-5.md new file mode 100644 index 0000000..572aff7 --- /dev/null +++ b/automanual/old/1-5.md @@ -0,0 +1,12 @@ +## 1.5. カンマ/セミコロンの使い方 + +空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 + +次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: + + CALL “SUBROUTINE” USING 1,2 + +DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 + +句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 + diff --git a/automanual/old/1-6.md b/automanual/old/1-6.md new file mode 100644 index 0000000..ad18af4 --- /dev/null +++ b/automanual/old/1-6.md @@ -0,0 +1,30 @@ +## 1.6. COPY文の使い方 + +図1-2-COPY構文 + +![alt text](Image/1-2.png) + +COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 + +1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 + +2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 + +3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 + +4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 + +5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 + +6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 + +7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 + +8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 + +9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 + +10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 + +11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 + diff --git a/automanual/old/1-7-1.md b/automanual/old/1-7-1.md new file mode 100644 index 0000000..6f65cde --- /dev/null +++ b/automanual/old/1-7-1.md @@ -0,0 +1,12 @@ +## 1.7. 定数の使い方 + +定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 +### 1.7.1. 数字定数 +数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 + +- 1、56、2192、-54などの整数。 + +- 1.12や-2.95などの整数でない固定小数点値。 + +- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 + diff --git a/automanual/old/1-7-2.md b/automanual/old/1-7-2.md new file mode 100644 index 0000000..339839c --- /dev/null +++ b/automanual/old/1-7-2.md @@ -0,0 +1,34 @@ +### 1.7.2. 英数字定数 + +英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 + +英数字定数は、次の形式のいずれかを取ることができる。 + +- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 + +- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + +英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 + +- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 + + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l + – “iteral that must + – “be continued.” + + +- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

+ + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & + “ long literal that must ” & + “ be continued.” + + +プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 + +数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 + diff --git a/automanual/old/1-7-3.md b/automanual/old/1-7-3.md new file mode 100644 index 0000000..21c4901 --- /dev/null +++ b/automanual/old/1-7-3.md @@ -0,0 +1,6 @@ +### 1.7.3. 日本語定数 + +- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 + +- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + diff --git a/automanual/old/1-8.md b/automanual/old/1-8.md new file mode 100644 index 0000000..94415b6 --- /dev/null +++ b/automanual/old/1-8.md @@ -0,0 +1,17 @@ +## 1.8. 表意定数の使い方 + +表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 + +次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 + +表1-3-表意定数 + +| 表意定数 | 定数型 | 値 | +| :--- | :--- | :--- | +| ZERO, ZEROS, ZEROES | 数字 | 0 | +| SPACE, SPACES | 英数字 | 空白 | +| QUOTE, QUOTES | 英数字 | 二重引用符 | +| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | +| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | +| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | + diff --git a/automanual/old/1-9.md b/automanual/old/1-9.md new file mode 100644 index 0000000..b9fb58c --- /dev/null +++ b/automanual/old/1-9.md @@ -0,0 +1,8 @@ +## 1.9. ユーザ定義名 + +opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 + +ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 + +プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 + diff --git a/automanual/old/2-1.md b/automanual/old/2-1.md new file mode 100644 index 0000000..0db6100 --- /dev/null +++ b/automanual/old/2-1.md @@ -0,0 +1,39 @@ +# 2. opensource COBOLのプログラム形式 + +図2-1-opensource COBOLのプログラム形式 + +![alt text](Image/2-1.png) + +COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 + +すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 + +1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 + +2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 + +3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 + +4. 各区分の目的の概要は次の通りである: + +| 区分 | 目的 | +| :--- | :--- | +| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | +| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | +| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | +| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | + +## 2.1. ネストされたユーザプログラム + +図2-2-ネストされたユーザプログラム + +![alt text](Image/2-2.png) + +ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 + +1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 + +--- + +`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 + diff --git a/automanual/old/2-2.md b/automanual/old/2-2.md new file mode 100644 index 0000000..353c33f --- /dev/null +++ b/automanual/old/2-2.md @@ -0,0 +1,12 @@ +## 2.2. ネストされたユーザ定義関数 + +図2-3-ネストされたユーザ定義関数 + +![alt text](Image/2-3.png) + +ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 + +1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 + + name:line: Error: FUNCTION-ID is not yet implemented + diff --git a/automanual/old/3.md b/automanual/old/3.md new file mode 100644 index 0000000..634bc36 --- /dev/null +++ b/automanual/old/3.md @@ -0,0 +1,21 @@ +# 3. 見出し部 + +図3-1-見出し部構文 + +![alt text](Image/3-1.png) + +プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 +1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 + +2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 + +3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 + +4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 + +5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 + +6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 + +7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 + diff --git a/automanual/old/4-1-1.md b/automanual/old/4-1-1.md new file mode 100644 index 0000000..1db0690 --- /dev/null +++ b/automanual/old/4-1-1.md @@ -0,0 +1,34 @@ +# 4. 環境部 + +図4-1-環境部構文 + +![alt text](Image/4-1.png) + +プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 + +1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 + +## 4.1. 構成節 + +図4-2-構成節構文 + +![alt text](Image/4-2.png) + +プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 + +1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 + +### 4.1.1. 翻訳用計算機段落 + +図4-3-翻訳用計算機段落構文 + +![alt text](Image/4-3.png) + +翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 + +1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 + +3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 + diff --git a/automanual/old/4-1-2.md b/automanual/old/4-1-2.md new file mode 100644 index 0000000..1ecd3ae --- /dev/null +++ b/automanual/old/4-1-2.md @@ -0,0 +1,16 @@ +### 4.1.2. 実行用計算機段落 + +図4-4-実行用計算機段落構文 + +![alt text](Image/4-4.png) + +実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 + +1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 + +3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 + +4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 + diff --git a/automanual/old/4-1-3.md b/automanual/old/4-1-3.md new file mode 100644 index 0000000..bc8acb3 --- /dev/null +++ b/automanual/old/4-1-3.md @@ -0,0 +1,12 @@ +### 4.1.3. リポジトリ段落 + +図4-5-リポジトリ段落構文 + +![alt text](Image/4-5.png) + +リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 + +1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 + +2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 + diff --git a/automanual/old/4-1-4.md b/automanual/old/4-1-4.md new file mode 100644 index 0000000..8197007 --- /dev/null +++ b/automanual/old/4-1-4.md @@ -0,0 +1,107 @@ +### 4.1.4. 特殊名段落 + +図4-6-特殊名段落構文 + +![alt text](Image/4-6-1.png) +![alt text](Image/4-6-2.png) + +特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定のニーモニック名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 + +つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 + +1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 + +2. IS ニーモニック名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 + +3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 + +4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 + +5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 + + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ + + このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 + + LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: + + 表4-7-局所名 + + | | | | | | + | :---: | :---: | :---: | :---: | :---: | + | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | + | am_ET | el_GR | fil_PH | lv_LV | sma_SE | + | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | + | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | + | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | + | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | + | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | + | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | + | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | + | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | + | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | + | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | + | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | + | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | + | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | + | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | + | ar_TN | en_ZA | he_IL | nn_NO | te_IN | + | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | + | arn_CL | es_AR | hr_BA | oc_FR | th_TH | + | as_IN | es_BO | hr_HR | or_IN | tk_TM | + | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | + | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | + | ba_R | es_CR | id_ID | ps_AF | tr_IN | + | be_BY | es_DO | ig_NG | pt_BR | tr_TR | + | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | + | bn_IN | es_ES | is_IS | qut_GT | ug_CN | + | bo_BT | es_GT | it_CH | quz_BO | uk_UA | + | bo_CN | es_HN | it_IT | quz_EC | ur_PK | + | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | + | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | + | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | + | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | + | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | + | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | + | da_DK | es_SV | kl_GL | sah_RU | yo_NG | + | de_AT | es_US | kn_IN | se_FI | zh_CN | + | de_CH | es_UY | ko_KR | se_NO | zh_HK | + | de_DE | es_VE | kok_IN | se_SE | zh_MO | + | de_LI | et_EE | ky_KG | si_LK | zh_SG | + | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | + | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | + + +7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 + +8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 + +9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 + + 表4-8-ACCEPT画面ステータスコード + + | コード | 意味 | + | :--- | :--- | + | 0000 | ENTERキー押下 | + | 1001 - 1064| F1 — F64 | + | 2001, 2002 | PgUP, PgDn4 | + | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | + | 2005 | Esc6 | + | 8000 | ACCEPT画面に利用できるデータがない | + | 9000 | 致命的なI/O画面エラー | + + +10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 + +11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 + +--- + +`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 + +`5` Windowsシステムでは検出できない。 + +`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) + diff --git a/automanual/old/4-2-1-1.md b/automanual/old/4-2-1-1.md new file mode 100644 index 0000000..d6cbb63 --- /dev/null +++ b/automanual/old/4-2-1-1.md @@ -0,0 +1,105 @@ +## 4.2. 入出力節 + +図4-9-入出力節構文 + +![alt text](Image/4-9.png) + +入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 + +1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + +### 4.2.1. ファイル管理段落 + +図4-10-ファイル管理段落構文 + +![alt text](Image/4-10.png) + +ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 + +1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 + +2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 + +3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 + + SELECT My-File ASSIGN TO DISK DISPLAY. + + 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 + + SELECT My-File ASSIGN TO DISPLAY. + + +4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 + + - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 + + この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + + 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 + + 表4-11-ステータスコード + + |ステータス値 | 意味 | + | :--- | :--- | + |00 | 成功| + |02 | 成功(重複レコードキーが検出された)| + |05 | 成功(オプションファイルが存在しない)| + |07 | 成功(ユニットが存在しない)| + |10 |ファイル終了| + |14 |キー範囲外| + |21 |キーが無効である| + |22 |キーの値の重複が検出された| + |23 |キーが存在しない| + |30 |永続的入出力エラー| + |31 |ファイル名に一貫性がない| + |34 |ファイル区域外である| + |35 |ファイルが存在しない| + |37 |アクセス権拒否| + |38 |ファイルがロックで閉じられている| + |39 |属性の矛盾が検出された| + |41 |ファイルが既に開かれている| + |42 |ファイルが開かれていない| + |43 |読み込みが行われていない| + |44 |レコードのオーバーフロー| + |46 |読み込みエラー| + |47 |OPEN INPUTが拒否された| + |48 |OPEN OUTPUTが拒否された| + |49 |OPEN I/Oが拒否された| + |51 |レコードがロックされている| + |52 |ページ終了| + |57 |LINAGE指定が無効である| + |61 |ファイル共有の失敗| + |91 |ファイルが利用できない| + +5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 + +#### 4.2.1.1. 順編成ファイル + +図4-12-順編成ファイルの指定 + +![alt text](Image/4-12.png) + +SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 + +1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 + +2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 + +3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 + +4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 + +5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 + +6. 固定長と可変長、両方のレコード形式がサポートされている。 + +7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 + +8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/old/4-2-1-2.md b/automanual/old/4-2-1-2.md new file mode 100644 index 0000000..87969ca --- /dev/null +++ b/automanual/old/4-2-1-2.md @@ -0,0 +1,22 @@ +#### 4.2.1.2. 相対編成ファイル + +図4-13-相対編成ファイルの指定 + +![alt text](Image/4-13.png) + +RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 + +1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 + +2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 + +3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 + +4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 + +7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/old/4-2-1-3.md b/automanual/old/4-2-1-3.md new file mode 100644 index 0000000..b0c2ca7 --- /dev/null +++ b/automanual/old/4-2-1-3.md @@ -0,0 +1,24 @@ +#### 4.2.1.3. 索引編成ファイル + +図4-14-索引編成ファイルの指定 + +![alt text](Image/4-14.png) + +RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 + +例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 + +1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 + +4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 + +5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 + +6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 + +7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + diff --git a/automanual/old/4-2-2.md b/automanual/old/4-2-2.md new file mode 100644 index 0000000..b1a35fa --- /dev/null +++ b/automanual/old/4-2-2.md @@ -0,0 +1,15 @@ +### 4.2.2. 入出力管理段落 + +図4-15-入出力管理段落構文 + +![alt text](Image/4-15.png) + + +入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 + +1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 + +2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 + +3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 + diff --git a/automanual/old/5-1.md b/automanual/old/5-1.md new file mode 100644 index 0000000..7bd633d --- /dev/null +++ b/automanual/old/5-1.md @@ -0,0 +1,50 @@ +# 5. データ部 + +図5-1-データ部の形式 + +![alt text](Image/5-1.png) + +データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 + +1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 + +2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) + +3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 + +4. 局所場所はネストされたプログラムでは使用できない。 + +5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 + +6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 + +## 5.1. ファイル記述 + +図5-2-ファイル記述構文 + +![alt text](Image/5-2.png) + +プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 + +1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 + +2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 + +3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 + +4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 + +5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 + +6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 + +7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 + + 図5-3-LINAGE句指定ページ構造 + + ![alt text](Image/5-3.png) + +8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 + +9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 + diff --git a/automanual/old/5-2.md b/automanual/old/5-2.md new file mode 100644 index 0000000..0347911 --- /dev/null +++ b/automanual/old/5-2.md @@ -0,0 +1,19 @@ +## 5.2. 整列用記述 + +図5-4-整列用記述段落 + +![alt text](Image/5-4.png) + + +整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 + +1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 + +2. 整列用ファイルをディスクに割り当てる必要がある。 + +3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 + +4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 + +5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 + diff --git a/automanual/old/5-3.md b/automanual/old/5-3.md new file mode 100644 index 0000000..161cf86 --- /dev/null +++ b/automanual/old/5-3.md @@ -0,0 +1,295 @@ +## 5.3. データ記述の形式 + +図5-5-データ記述の一般形式 + +![alt text](Image/5-5.png) + +ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 + +1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 + +2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 + + + | | | + | --- | --- | + | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | + | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | + | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | + | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | + + + この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 + +3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 + +4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 + + 表5-6-データのクラス定義 PICTURE記号(9/A/X) + + | 基本記号 | 意味・使用方法 | + | :--- | :--- | + | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | + | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | + | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | + | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | + + 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: + + | | | + | --- | --- | + | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | + | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | + | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | + | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | + + + + 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 + + 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 + + 表5-7-数値形式オプションのPICTURE記号(P/S/V) + + | 数値形式のオプション記号 | 意味・使用方法 | + | :--- | :--- | + | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | + | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | + | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | + +5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 + + 表5-8-符号エンコード文字 + + | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | + | :---: | :---: |:---: | + | 0 | 0 | p | + | 1 | 1 | q | + | 2 | 2 | r | + | 3 | 3 | s | + | 4 | 4 | t | + | 5 | 5 | u | + | 6 | 6 | v | + | 7 | 7 | w | + | 8 | 8 | x | + | 9 | 9 | y | + + SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 + + +6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 + + 表5-9-数字編集PICTURE記号 + + | 編集記号 | 意味・使用方法 | + | :--- | :--- | + | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | + | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | + | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | + | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | + | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | + | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | + | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | + | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | + | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | + | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | + + 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 + +7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 + +8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 + +9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 + +10. EXTERNAL句は、77または01レベルでのみ指定できる。 + +11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 + +12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 + +13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 + +14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 + + 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. + + 以下のように割り当てられる。 + + ![alt text](Image/5-3-9.png) + + 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 + ``` + 05 X OCCURS 3 TIMES. + 10 A PIC X(1). + 10 B PIC X(1). + 10 C PIC X(1). + ``` + ![alt text](Image/5-3-10.png) + + 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 + +15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 + +16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 + +17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 + + ``` + PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 + PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” + PIC 9(3) VALUE 1 – 次の値を保持する 001 + PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 + ``` + +18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 + +19. BASED句とANY LENGTH句を併用することはできない。 + +20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 + +21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 + +22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 + +23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 + +24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある + + a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 + + b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 + + c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 + + d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 + + e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 + + f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 + +25. 次の表は、利用可能なUSAGE句をまとめたものである。 + + 表5-10-USAGE句一覧
+ + | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| + | :--- | :--- |:--- | :--- |:--- | :--- | + | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | + | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | + |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | + | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | + | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | + | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | + | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | + | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | + | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | + | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | + | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | + | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | + | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | + | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | + | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | + | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | + | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | + | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | + | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | + | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | + | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | + +26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 + + ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 + + リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 + + CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 + + 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 + + バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 + +27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 + +28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 + +29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 + + a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 + + b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 + + c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 + + 図5-11-SYNCHRONIZED句の効果 + + ![alt text](Image/5-11.png) + + 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 + + SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 + +30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 + + a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 + + b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 + ``` + 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 + + ``` + 05 SHIRT-SIZE-VALUES. + 10 PIC X(4) VALUE “S 14”. + 10 PIC X(4) VALUE “M 15”. + 10 PIC X(4) VALUE “L 16”. + 10 PIC X(4) VALUE “XL17”. + 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + + + cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) + + 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 + + ``` + 05 X OCCURS 6 TIMES. + 10 A PIC X(1) VALUE “?‟. + 10 B PIC X(1) VALUE “%‟. + 10 N PIC 9(2) VALUE 10. + ``` + + この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 + +--- +`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 + +`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 + +`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 + +`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 + diff --git a/automanual/old/5-4.md b/automanual/old/5-4.md new file mode 100644 index 0000000..94bdfd9 --- /dev/null +++ b/automanual/old/5-4.md @@ -0,0 +1,18 @@ +## 5.4. 条件名 + +図5-12-レベル88条件名記述構文 + +![alt text](Image/5-12.png) + +条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 + +1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 + +2. また、ストレージを占有しない。 + +3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 + +4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 + +5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 + diff --git a/automanual/old/5-5.md b/automanual/old/5-5.md new file mode 100644 index 0000000..da8d3c9 --- /dev/null +++ b/automanual/old/5-5.md @@ -0,0 +1,12 @@ +## 5.5. 定数記述 + +図5-13-78レベル定数記述構文 + +![alt text](Image/5-13.png) + +この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 + +1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 + +2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 + diff --git a/automanual/old/5-6.md b/automanual/old/5-6.md new file mode 100644 index 0000000..0991f14 --- /dev/null +++ b/automanual/old/5-6.md @@ -0,0 +1,98 @@ +## 5.6. 画面記述 + +図5-14-画面節データ項目記述構文 + +![alt text](Image/5-14-1.png) +![alt text](Image/5-14-2.png) + +上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 + +1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 + +2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 + +3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 + +4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 + +5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 + +6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 + +7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` + +8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 + +9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 + +10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 + +11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 + + LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 + + もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 + + TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 + + 必要に応じてCOLUMNはCOLに省略が可能である。 + +12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 + + 表5-15-番号によって指定される画面色 + + | 整数 | 色 | + | :---: | :---: | + | 0 | 黒 | + | 1 | 青 | + | 2 | 緑 | + | 3 | 青緑 | + | 4 | 赤 | + | 5 | 赤紫 | + | 6 | 黄 | + | 7 | 白 | + +13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 + + 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
+ + + | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | + | :---: | :---: |:---: | + | 0 | 黒 | 暗灰 | + | 1 | 暗青/藍 | 明青 | + | 2 | 暗緑 | 明緑 | + | 3 | 暗青緑 | 明青緑 | + | 4 | 暗赤 | 明赤 | + | 5 | 暗赤紫 | 明赤紫 | + | 6 | 金/茶 | 黄 | + | 7 | 明灰 | 白 | + + +14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 + +15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 + + ``` + 78 Black VALUE 0. + 78 Blue VALUE 1. + 78 Green VALUE 2. + 78 White VALUE 7. + ・・・ + 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ + 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ + 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ + ``` + DEF項目の色は緑と白になる(XYZから継承される) + +16. VALUE句は変更できない固定のテキストを定義するために使用される。 + +17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 + +18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 + +19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 + +--- +`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 + diff --git a/automanual/old/6-1-1.md b/automanual/old/6-1-1.md new file mode 100644 index 0000000..3acc843 --- /dev/null +++ b/automanual/old/6-1-1.md @@ -0,0 +1,31 @@ +# 6. 手続き部 + +## 6.1. 構成要素 + +### 6.1.1. 表の参照 + +COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 + +4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: + +``` + 01 GRID. + 05 GRID-ROW OCCURS 3 TIMES. + 10 GRID-COLUMN OCCURS 4 TIMES. + 15 GRID-CHARACTER PIC X(1). +``` + +次の図で網掛けされているGRID-CHARACTERは、 + +![alt text](Image/6-0.png) + + +次のコードで参照できる。 + + GRID-CHARACTER(2, 3) + +添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または +これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 + +算術式については[6.1.4.1](6-1-4-1.md)で説明する。 + diff --git a/automanual/old/6-1-2.md b/automanual/old/6-1-2.md new file mode 100644 index 0000000..a855435 --- /dev/null +++ b/automanual/old/6-1-2.md @@ -0,0 +1,47 @@ +### 6.1.2. データ名の修飾 + +COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 + +動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: + +``` + 01 EMPLOYEE. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). + 01 CUSTOMER. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). +``` + +それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: + + MOVE “Philadelphia” TO CITY. + +この問題を解決するために、CITYの参照を次のように修飾できる。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. + +残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. + +これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 + + MOVE “Philadelphia” TO CITY OF EMPLOYEE. + +テーブルへの参照を修飾する場合は次のように記述する。 + + 一意名-1 OF 一意名-2(添え字・・・) + +予約語の「IN」は「OF」の代わりとして使うことができる。 + diff --git a/automanual/old/6-1-3.md b/automanual/old/6-1-3.md new file mode 100644 index 0000000..fa94d49 --- /dev/null +++ b/automanual/old/6-1-3.md @@ -0,0 +1,23 @@ +### 6.1.3. 部分参照 + +図6-1-部分参照構文 + +![alt text](Image/6-1.png) + +COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 + +開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 + +ここでいくつか例を挙げる。 + +| | | +| --- | --- | +| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | +| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | +| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | +| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | +| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | + + +参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 + diff --git a/automanual/old/6-1-4-1.md b/automanual/old/6-1-4-1.md new file mode 100644 index 0000000..cfee90a --- /dev/null +++ b/automanual/old/6-1-4-1.md @@ -0,0 +1,50 @@ +### 6.1.4. 式 + +opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 + +- 数値結果を計算する「算術式」 + +- TRUEまたはFALSE値を計算する「条件式」 + +0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 + +#### 6.1.4.1. 算術式 + +算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 + +| 優先順位 演算子 | 意味 | + | :---: | :--- | + | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| + | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | + | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | + | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | + | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | + | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | + | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | + +COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 + +1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 + +2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 + +3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 + +4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 + +5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 + +6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 + +ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 + +| 式 | 計算結果 | 解説 | +| :--- | :--- |:--- | +| 3 * 4 + 1|13|* は + よりも優先される。 | +| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | +| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | +| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | +| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | + +もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 + diff --git a/automanual/old/6-1-4-2.md b/automanual/old/6-1-4-2.md new file mode 100644 index 0000000..f1a85b8 --- /dev/null +++ b/automanual/old/6-1-4-2.md @@ -0,0 +1,141 @@ +#### 6.1.4.2. 条件式 + +条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 + +##### 6.1.4.2.1. 条件名(レベル88項目) + +次のコードは最も単純な条件の一例である。 + +``` + 05 SHIRT-SIZE PIC 99V9. + 88 LILLIPUTIAN VALUE 0 THRU 12.5 + 88 XS VALUE 13 THRU 13.5. + 88 S VALUE 14, 14.5. + 88 M VALUE 15, 15.5. + 88 L VALUE 16, 16.5. + 88 XL VALUE 17, 17.5. + 88 XXL VALUE 18, 18.5. + 88 HUMUNGOUS VALUE 19 THRU 99.9. +``` + +条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 + + + IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 + + +または次のように条件名「XL」を使用することもできる。 + + IF XL + +##### 6.1.4.2.2. 字類条件 + +図6-9-字類条件構文 + +![alt text](Image/6-9.png) + +字類条件は、データ項目に格納されている現在のデータ型を判別する。 + +1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 + +2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 + +3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 + +4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 + +5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 + +6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 + +7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 + + ``` + SPECIAL-NAMES. + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. + ``` + +次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 + +``` + IF Entered-Value IS Hexadecimal + PERFORM 150-Process-Hex-Value + END-IF +``` + +##### 6.1.4.2.3. 正負条件 +図6-10-正負条件構文 + +![alt text](Image/6-10.png) + +正負条件は、PIC 9データ項目の数値状態を判別する。 + +1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 + +2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 + +##### 6.1.4.2.4. スイッチ状態条件 +図6-11-スイッチ状態条件 + +![alt text](Image/6-11.png) + +特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 + +##### 6.1.4.2.5. 比較条件 +図6-12-比較条件構文 + +![alt text](Image/6-12.png) + +比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 + +1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 + +2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 + +##### 6.1.4.2.6. 組み合わせ条件 +図6-13-組み合わせ条件構文 + +![alt text](Image/6-13.png) + +組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 + +1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 + +2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 + +3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 +``` + IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 +``` +以下のように省略される。 +``` + IF ACCOUNT-STATUS = 1 OR 2 OR 7 +``` + +4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 + + ``` + FALSE OR TRUE AND TRUE 結果:TRUE + (FALSE OR FALSE) AND TRUE 結果:FALSE + FALSE OR (FALSE AND TRUE) 結果:TRUE + ``` + +##### 6.1.4.2.7. 否定条件 +図6-14-否定条件構文 + +![alt text](Image/6-14.png) + +否定条件はNOT演算子を用いて、条件を否定する。 + +1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 + +2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 +``` + NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE + 結果:FALSE + NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) + 結果:TRUE + NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) + 結果:FALSE +``` + diff --git a/automanual/old/6-1-5.md b/automanual/old/6-1-5.md new file mode 100644 index 0000000..5ce0394 --- /dev/null +++ b/automanual/old/6-1-5.md @@ -0,0 +1,45 @@ +### 6.1.5. ピリオド(.) + +COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 + +``` + MOVE SPACES TO Employee-Address + ADD 1 TO Record-Counter + DISPLAY “Record-Counter=” Record-Counter +``` + +一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 + +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest + DISPLAY “Interest Amount = “ Interest +``` + +この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 + +しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: + +``` + IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 + GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 + GIVING Interest DISPLAY “Interest Amount = “ Interest +``` + +では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 + +そこで用いるのが完結文である。 + +COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest. + DISPLAY “Interest Amount = “ Interest +``` + +二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 + diff --git a/automanual/old/6-1-6.md b/automanual/old/6-1-6.md new file mode 100644 index 0000000..00c1644 --- /dev/null +++ b/automanual/old/6-1-6.md @@ -0,0 +1,39 @@ +### 6.1.6. 動詞/END-動詞 + +1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 + +``` + IF A = 1 + IF B = 1 + DISPLAY “A & B = 1” + ELSE + IF B = 1 + DISPLAY “A NOT = 1 BUT B = 1” + ELSE + DISPLAY “NEITHER A NOR B = 1”. +``` + +このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 + +![alt text](Image/6-16-1.png) + +NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 + +1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: + +![alt text](Image/6-16-2.png) + +しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 + +![alt text](Image/6-16-3.png) + +COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 + +COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` + +既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 + +--- +`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 + +`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? diff --git a/automanual/old/6-1-7.md b/automanual/old/6-1-7.md new file mode 100644 index 0000000..72515da --- /dev/null +++ b/automanual/old/6-1-7.md @@ -0,0 +1,17 @@ +### 6.1.7. 特殊レジスタ + +opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 + +表6-15-特殊レジスタ + +| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | +| :--- | :--- |:--- | +| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | +| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | +| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | +| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | +| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | + +--- +`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 + diff --git a/automanual/old/6-1-8-1.md b/automanual/old/6-1-8-1.md new file mode 100644 index 0000000..5983e7e --- /dev/null +++ b/automanual/old/6-1-8-1.md @@ -0,0 +1,27 @@ +### 6.1.8. ファイルへの同時アクセス制御 + +データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 + +すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 + +#### 6.1.8.1. ファイル共有 + +opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 + +OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 + +ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 + +| 共有オプション |効果 | +| :--- | :--- | +| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | +| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | +| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | + +誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 + +--- +`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 + +`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 + diff --git a/automanual/old/6-1-8-2.md b/automanual/old/6-1-8-2.md new file mode 100644 index 0000000..f985ce0 --- /dev/null +++ b/automanual/old/6-1-8-2.md @@ -0,0 +1,18 @@ +#### 6.1.8.2. レコードロック + +レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 + +ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 + +レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 + +| レコードロック オプション |効果 | +| :--- | :--- | +| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | +| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | +| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | +| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | + + +使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 + diff --git a/automanual/old/6-10.md b/automanual/old/6-10.md new file mode 100644 index 0000000..58cb864 --- /dev/null +++ b/automanual/old/6-10.md @@ -0,0 +1,10 @@ +## 6.10. COMMIT + +図6-37-COMMIT構文 + +![alt text](Image/6-37-Commit.png) + +COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 + +1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 + diff --git a/automanual/old/6-11.md b/automanual/old/6-11.md new file mode 100644 index 0000000..a1e99da --- /dev/null +++ b/automanual/old/6-11.md @@ -0,0 +1,12 @@ +## 6.11. COMPUTE + +図6-38-COMPUTE構文 + +![alt text](Image/6-38-Compute.png) + +COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 + +1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 + +2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 + diff --git a/automanual/old/6-12.md b/automanual/old/6-12.md new file mode 100644 index 0000000..10cb703 --- /dev/null +++ b/automanual/old/6-12.md @@ -0,0 +1,26 @@ +## 6.12. CONTINUE + +図6-39-CONTINUE構文 + +![alt text](Image/6-39-Continue.png) + +CONTINUE文は動作がないためアクションを実行しない。 + +1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 + + ![alt text](Image/6-12-1.png) + + 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 + +2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 + + ![alt text](Image/6-12-2.png) + +COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 + + IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ + +プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 + +従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 + diff --git a/automanual/old/6-13-1.md b/automanual/old/6-13-1.md new file mode 100644 index 0000000..c196ed7 --- /dev/null +++ b/automanual/old/6-13-1.md @@ -0,0 +1,24 @@ +## 6.13. DELETE + +### 6.13.1. DELETE文の書き方1 ― DELETE + +図6-40-DELETE構文(レコードの削除) + +![alt text](Image/6-40-Delete.png) + +DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 + +1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 + +2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 + +3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 + +4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 + +5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 + +6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 + +7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 + diff --git a/automanual/old/6-13-2.md b/automanual/old/6-13-2.md new file mode 100644 index 0000000..f6c4455 --- /dev/null +++ b/automanual/old/6-13-2.md @@ -0,0 +1,14 @@ +### 6.13.2. DELETE文の書き方2 ― DELETE FILE + +図6-41-DELETE FILE構文(ファイルの削除) + +![alt text](Image/6-41(delete).png) + +DELETE FILE文は、ディスクファイルを削除する。 + +1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 + +2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 + +3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 + diff --git a/automanual/old/6-14-1.md b/automanual/old/6-14-1.md new file mode 100644 index 0000000..c1221fa --- /dev/null +++ b/automanual/old/6-14-1.md @@ -0,0 +1,16 @@ +## 6.14. DISPLAY + +### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE + +図6-42-DISPLAY構文(UPON CONSOLE) + +![alt text](Image/6-42-Display.png) + +プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 + +1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 + +2. 指定するニーモニック名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義のニーモニック名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 + +3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 + diff --git a/automanual/old/6-14-2.md b/automanual/old/6-14-2.md new file mode 100644 index 0000000..291c1f4 --- /dev/null +++ b/automanual/old/6-14-2.md @@ -0,0 +1,10 @@ +### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス + +図6-43-DISPLAY構文(コマンドライン引数へのアクセス) + +![alt text](Image/6-43-Display.png) + +後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 + +1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 + diff --git a/automanual/old/6-14-3.md b/automanual/old/6-14-3.md new file mode 100644 index 0000000..dcb6f0a --- /dev/null +++ b/automanual/old/6-14-3.md @@ -0,0 +1,22 @@ +### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 + +図6-44-DISPLAY構文(環境変数へのアクセス/設定) + +![alt text](Image/6-44-Display.png) + +環境変数を作成または変更するために使われる。 + +1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 + + DISPLAY + environment-variable-name UPON ENVIRONMENT-NAME + END-DISPLAY + DISPLAY + environment-variable-name UPON ENVIRONMENT-VALUE + END-DISPLAY + + +2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 + +3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 +  diff --git a/automanual/old/6-14-4.md b/automanual/old/6-14-4.md new file mode 100644 index 0000000..47d6b34 --- /dev/null +++ b/automanual/old/6-14-4.md @@ -0,0 +1,16 @@ +### 6.14.4. DISPLAY文の書き方4 ― 画面データ + +図6-45-DISPLAY構文(画面データ) + +![alt text](Image/6-45-Display.png) + +形式化された画面にデータを表示する。 + +1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 + +2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 + +4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 + diff --git a/automanual/old/6-14-5.md b/automanual/old/6-14-5.md new file mode 100644 index 0000000..9c6955c --- /dev/null +++ b/automanual/old/6-14-5.md @@ -0,0 +1,8 @@ +### 6.14.5. DISPLAY文の例外処理 + +図6-46-DISPLAY構文(例外処理) + +![alt text](Image/6-46-Display.png) + +DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 + diff --git a/automanual/old/6-15-1.md b/automanual/old/6-15-1.md new file mode 100644 index 0000000..e27d5e0 --- /dev/null +++ b/automanual/old/6-15-1.md @@ -0,0 +1,18 @@ +## 6.15. DIVIDE + +### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO + +図6-47-DIVIDE INTO構文 + +![alt text](Image/6-47-Divide.png) + +指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/old/6-15-2.md b/automanual/old/6-15-2.md new file mode 100644 index 0000000..89dbecc --- /dev/null +++ b/automanual/old/6-15-2.md @@ -0,0 +1,18 @@ +### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING + +図6-48-DIVIDE INTO GIVING構文 + +![alt text](Image/6-48-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/old/6-15-3.md b/automanual/old/6-15-3.md new file mode 100644 index 0000000..da155e6 --- /dev/null +++ b/automanual/old/6-15-3.md @@ -0,0 +1,18 @@ +### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING + +図6-49-DIVIDE BY GIVING構文 + +![alt text](Image/6-49-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/old/6-15-4.md b/automanual/old/6-15-4.md new file mode 100644 index 0000000..8918cde --- /dev/null +++ b/automanual/old/6-15-4.md @@ -0,0 +1,18 @@ +### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER + +図6-50-DIVIDE INTO REMAINDER構文 + +![alt text](Image/6-50-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/old/6-15-5.md b/automanual/old/6-15-5.md new file mode 100644 index 0000000..e0e7003 --- /dev/null +++ b/automanual/old/6-15-5.md @@ -0,0 +1,18 @@ +### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER + +図6-51-DIVIDE BY REMAINDER構文 + +![alt text](Image/6-51-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + diff --git a/automanual/old/6-16.md b/automanual/old/6-16.md new file mode 100644 index 0000000..ff1e640 --- /dev/null +++ b/automanual/old/6-16.md @@ -0,0 +1,14 @@ +## 6.16. ENTRY + +図6-52-ENTRY構文 + +![alt text](Image/6-52-Entry.png) + +ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 + +1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 + +2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 + +3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 + diff --git a/automanual/old/6-17.md b/automanual/old/6-17.md new file mode 100644 index 0000000..fe614e9 --- /dev/null +++ b/automanual/old/6-17.md @@ -0,0 +1,52 @@ +## 6.17. EVALUATE + +図6-53-EVALUATE構文 + +![alt text](Image/6-53-Evaluate.png) + +EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 + +1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 + +2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: + + + Legal: Not Legal: + + (3 + Years-Of-Service) THROUGH 99 0 THRU “A” + + “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is + + X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) + + 15.7 THROUGH 19.4 + +3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択サブジェクトと呼ばれ、各WHEN句の後に指定された値は選択オブジェクトと呼ばれる。 + +4. 各WHEN句には、EVALUATE文の選択サブジェクトと同じ数の選択オブジェクトが必要である。 + +5. 各EVALUATE句の選択サブジェクトは、選択オブジェクトに対応する各WHEN句と等しいかどうかテストされる。 + +6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 + +7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 + +8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 + +9. ANYの選択オブジェクトを使うと、ANYと一致する選択サブジェクトと自動的に合致する。 + +ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 + +1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 + +2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 + +3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 + +4. 上記以外の種類の口座には利子が適用されない。 + +これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 + +図6-54-EVALUATE文のデモプログラム +![alt text](Image/6-54-Evaluate.png) + diff --git a/automanual/old/6-18.md b/automanual/old/6-18.md new file mode 100644 index 0000000..2f8d3bd --- /dev/null +++ b/automanual/old/6-18.md @@ -0,0 +1,35 @@ +## 6.18. EXIT + +図6-55-EXIT構文 + +![alt text](Image/6-55-Exit.png) + +EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 + +1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 + + 図6-56-EXIT文
+ ![alt text](Image/6-56-Exit.png) + +2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 + +3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 + +4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 + + EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 + + 図6-57-EXIT PARAGRAPH文
+ ![alt text](Image/6-57-Exit.png) + +5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 + +6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 + +7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 + + 図6-58-EXIT PERFORM文
+ ![alt text](Image/6-58-Exit.png) + +8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 + diff --git a/automanual/old/6-19.md b/automanual/old/6-19.md new file mode 100644 index 0000000..249fae7 --- /dev/null +++ b/automanual/old/6-19.md @@ -0,0 +1,16 @@ +## 6.19. FREE + +図6-59-FREE構文 + +![alt text](Image/6-59-Free.png) + +FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 + +1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 + +2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 + +3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 + +4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 + diff --git a/automanual/old/6-2.md b/automanual/old/6-2.md new file mode 100644 index 0000000..145e530 --- /dev/null +++ b/automanual/old/6-2.md @@ -0,0 +1,24 @@ +## 6.2. 記述形式 + +図6-16-記述形式構文 + +![alt text](Image/6-16.png) + +手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 + +手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 + +1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 + +2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 + +3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 + +4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 + +5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 + +6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 + +7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 + diff --git a/automanual/old/6-20.md b/automanual/old/6-20.md new file mode 100644 index 0000000..b8a62b7 --- /dev/null +++ b/automanual/old/6-20.md @@ -0,0 +1,8 @@ +## 6.20. GENERATE + +図6-60-GENERATE構文 + +![alt text](Image/6-60-Generate.png) + +GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + diff --git a/automanual/old/6-21.md b/automanual/old/6-21.md new file mode 100644 index 0000000..e6460f3 --- /dev/null +++ b/automanual/old/6-21.md @@ -0,0 +1,12 @@ +## 6.21. GOBACK + +図6-61-GOBACK構文 + +![alt text](Image/6-61-Goback.png) + +GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 + +1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 + +2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 + diff --git a/automanual/old/6-22-1.md b/automanual/old/6-22-1.md new file mode 100644 index 0000000..5745f59 --- /dev/null +++ b/automanual/old/6-22-1.md @@ -0,0 +1,12 @@ +## 6.22. GO TO + +### 6.22.1. GO TO文の書き方1 ― GO TO + +図6-62-GOTO構文 + +![alt text](Image/6-62-Goto.png) + +プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 + +1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 + diff --git a/automanual/old/6-22-2.md b/automanual/old/6-22-2.md new file mode 100644 index 0000000..ac064ad --- /dev/null +++ b/automanual/old/6-22-2.md @@ -0,0 +1,22 @@ +### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON + +図6-63-GOTO DEPENDING ON構文 + +![alt text](Image/6-63-Goto.png) + +文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 + +1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 + +2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 + +3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 + +4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 + + 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE + + ![alt text](Image/6-64-Goto.png) + + 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 + diff --git a/automanual/old/6-23.md b/automanual/old/6-23.md new file mode 100644 index 0000000..a5334d9 --- /dev/null +++ b/automanual/old/6-23.md @@ -0,0 +1,14 @@ +## 6.23. IF + +図6-65-IF構文 + +![alt text](Image/6-65-If.png) + +IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 + +1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 + diff --git a/automanual/old/6-24.md b/automanual/old/6-24.md new file mode 100644 index 0000000..ef2d1c8 --- /dev/null +++ b/automanual/old/6-24.md @@ -0,0 +1,36 @@ +## 6.24. INITIALIZE + +図6-66-INITIALIZE構文 + +![alt text](Image/6-66-Initialize.png) + +INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 + +1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 + + - 一意名-1として指定されたすべての基本項目。 + + - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: + + - USAGE INDEX項目は除外される。 + + - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 + + 以上は受け取り項目のリストである。 + +2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 + +3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 + +4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 + +5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 + +6. 各受け取り項目の初期化は、以下のルールに従って行われる。 + + - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 + + - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 + + - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 + diff --git a/automanual/old/6-25.md b/automanual/old/6-25.md new file mode 100644 index 0000000..091d700 --- /dev/null +++ b/automanual/old/6-25.md @@ -0,0 +1,8 @@ +## 6.25. INITIATE + +図6-67-INITIATE構文 + +![alt text](Image/6-67-Initiate.png) + +INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + diff --git a/automanual/old/6-26.md b/automanual/old/6-26.md new file mode 100644 index 0000000..c3bc80c --- /dev/null +++ b/automanual/old/6-26.md @@ -0,0 +1,81 @@ +## 6.26. INSPECT + +図6-68-INSPECT構文 + +![alt text](Image/6-68-Inspect.png) + +INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 + +1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 + +2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 + +3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 + +INSPECT文のルールは、指定された句によって異なる。 + +**TALLYING句の場合:** + +TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 + +1. 一意名-2は編集不可の数値項目でなければならない。 + +2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 + +3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 + + a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 + +4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 + + 図6-69-INSPECT文TALLYING句の例
+ ![alt text](Image/6-69-Inspect.png) + + 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない + +**REPLACING句の場合:** + +REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 + +1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 + +3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 + +5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +6. ターゲット文字列は次のように識別できる: + + a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + +7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 + +**CONVERTING句の場合:** + +CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 + +1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 + +3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 + +4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 + +6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 + +8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 + diff --git a/automanual/old/6-27.md b/automanual/old/6-27.md new file mode 100644 index 0000000..99b472f --- /dev/null +++ b/automanual/old/6-27.md @@ -0,0 +1,49 @@ +## 6.27. MERGE + +図6-70-MERGE構文 + +![alt text](Image/6-70-Merge.png) + +MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 + +1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 + +2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 + +3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 + +5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 + + MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 + +6. USING句で指定されたファイルには、以下のルールが適用される。 + + a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 + + b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 + + c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 + +7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 + +8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 + +9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 + +10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 + +11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 + +12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 + +13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** + +14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 + +15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 + +--- +`21` [4.2.2](4-2-2.md)参照。 + diff --git a/automanual/old/6-28-1.md b/automanual/old/6-28-1.md new file mode 100644 index 0000000..23619cf --- /dev/null +++ b/automanual/old/6-28-1.md @@ -0,0 +1,14 @@ +## 6.28. MOVE + +### 6.28.1. MOVE文の書き方1 ― MOVE + +図6-71-MOVE構文 + +![alt text](Image/6-71-Move.png) + +特定の値を一つ以上の受け取りデータ項目に移動することができる。 + +1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 + +2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 + diff --git a/automanual/old/6-28-2.md b/automanual/old/6-28-2.md new file mode 100644 index 0000000..7b76e5d --- /dev/null +++ b/automanual/old/6-28-2.md @@ -0,0 +1,84 @@ +### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING + +図6-72-MOVE CORRESPONDING構文 + +![alt text](Image/6-72-Move.png) + +同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 + +1. CORRESPONDINGという単語は、CORRと省略される場合がある。 + +2. 一意名-1と一意名-2の両方が集団項目でなければならない。 + +3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: + + a. どちらも同じ名前ではあるがFILLERではない。 + + b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 + + c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 + + d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 + + e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 + +4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 + +この規則は、以下の例題を使うとよく理解できる。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. corrdemo. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 X. + 05 A VALUE 'A' PIC X(1). + 05 G1. + 10 G2. + 15 B VALUE 'B' PIC X(1). + 05 C. + 10 FILLER VALUE 'C' PIC X(1). + 05 G3. + 10 G4. + 15 D VALUE 'D' PIC X(1). + 05 V1 VALUE 'E' PIC X(1). + 05 E REDEFINES V1 PIC X(1). + 05 F VALUE 'F' PIC X(1). + 05 G VALUE ALL 'G'. + 10 G2 OCCURS 4 TIMES PIC X(1). + 05 H VALUE ALL 'H' PIC X(4). + 01 Y. + 02 A PIC X(1). + 02 G1. + 03 G2. + 04 B PIC X(1). + 02 C PIC X(1). + 02 G3. + 03 G5. + 04 D PIC X(1). + 02 E PIC X(1). + 02 V2 PIC X(1). + 02 G PIC X(4). + 02 H OCCURS 4 TIMES PIC X(1). + 66 F RENAMES V2. + PROCEDURE DIVISION. + 100-Main. + MOVE ALL '-' TO Y. + DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. + DISPLAY 'Before: ' Y. + MOVE CORR X TO Y. + DISPLAY ' After: ' Y. + STOP RUN + +DISPLAY文で表示される結果は以下の通りである。 + + Names: ABCDEFGGGGHHHH + Before: -------------- + After: ABC---GGGG---- + +- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 +- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 +- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 +- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 +- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 +- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 + diff --git a/automanual/old/6-29-1.md b/automanual/old/6-29-1.md new file mode 100644 index 0000000..5c73830 --- /dev/null +++ b/automanual/old/6-29-1.md @@ -0,0 +1,18 @@ +## 6.29. MULTIPLY + +### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY + +図6-73-MULTIPLY BY構文 + +![alt text](Image/6-73-Multiply.png) + +算術積を実行する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. それぞれ一意名-2を掛けた一意名-1またはinteger-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + diff --git a/automanual/old/6-29-2.md b/automanual/old/6-29-2.md new file mode 100644 index 0000000..9dfa607 --- /dev/null +++ b/automanual/old/6-29-2.md @@ -0,0 +1,18 @@ +### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING + +図6-74-MULTIPLY GIVING構文 + +![alt text](Image/6-74-Multiply.png) + +二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. 一意名-1および一意名-2の値は変更できない。 + +5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + diff --git a/automanual/old/6-3.md b/automanual/old/6-3.md new file mode 100644 index 0000000..045f192 --- /dev/null +++ b/automanual/old/6-3.md @@ -0,0 +1,18 @@ +## 6.3. 宣言の記述形式 + +図6-17-宣言構文 + +![alt text](Image/6-17.png) + +プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 + +1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 + +2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 + +4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 + +5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 + diff --git a/automanual/old/6-30.md b/automanual/old/6-30.md new file mode 100644 index 0000000..db20748 --- /dev/null +++ b/automanual/old/6-30.md @@ -0,0 +1,16 @@ +## 6.30. NEXT SENTENCE + +図6-75-NEXT SENTENCE構文 + +![alt text](Image/6-75-Nextsentnce.png) + +NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 + +1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 + +2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 + +3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 + +4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 + diff --git a/automanual/old/6-31.md b/automanual/old/6-31.md new file mode 100644 index 0000000..6e28b8f --- /dev/null +++ b/automanual/old/6-31.md @@ -0,0 +1,31 @@ +## 6.31. OPEN + +図6-76-OPEN構文 + +![alt text](Image/6-76-Open.png) + +OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 + +1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 + +2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 + +3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 + +4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 + + | オプション | 処理 | + | --- | --- | + | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | + | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | + | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + +5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 + +6. WITH NO REWIND句とWITH LOCK句は機能しない。 + + WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 + + WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 + diff --git a/automanual/old/6-32-1.md b/automanual/old/6-32-1.md new file mode 100644 index 0000000..42cfe04 --- /dev/null +++ b/automanual/old/6-32-1.md @@ -0,0 +1,64 @@ +## 6.32. PERFORM + +### 6.32.1. PERFORM文の書き方1 ― 手続き型 + +図6-77-手続き型PERFORM構文 + +![alt text](Image/6-77-Perform.png) + +制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 + +1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 + +2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 + +3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 +4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 + +5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 + +6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 + +7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 + +8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 + +9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 + +10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 + +11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 + + + 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 + + ![alt text](Image/6-32-1-1.png) + + ``` + 01 PERFORM-DEMO. + 05 PD-ROW OCCURS 3 TIMES. + 10 PD-COL OCCURS 4 TIMES. + 15 PD PIC X(1). + 01 PD-Col-No PIC 9 COMP. + 01 PD-Row-No PIC 9 COMP. + ``` + ![alt text](Image/6-32-1-2.png) + + ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 + PERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 + AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. + ``` + ![alt text](Image/6-32-1-3.png) + + 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. + ``` + diff --git a/automanual/old/6-32-2.md b/automanual/old/6-32-2.md new file mode 100644 index 0000000..3936f36 --- /dev/null +++ b/automanual/old/6-32-2.md @@ -0,0 +1,12 @@ +### 6.32.2. PERFORM文の書き方2 ― インライン型 + +図6-78-インライン型PERFORM構文 + +![alt text](Image/6-78-Perform.png) + +PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 + +1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 + +2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 + diff --git a/automanual/old/6-33-1.md b/automanual/old/6-33-1.md new file mode 100644 index 0000000..fd4efa6 --- /dev/null +++ b/automanual/old/6-33-1.md @@ -0,0 +1,36 @@ +## 6.33. READ + +### 6.33.1. READ文の書き方1 ― 順次読み取り + +図6-79-READ構文(順次読み取り) + +![alt text](Image/6-79-Read.png) + +ファイルから次の(または前の)レコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 + +5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 + +7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 + +8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 + +11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 + diff --git a/automanual/old/6-33-2.md b/automanual/old/6-33-2.md new file mode 100644 index 0000000..3c4523c --- /dev/null +++ b/automanual/old/6-33-2.md @@ -0,0 +1,44 @@ +### 6.33.2. READ文の書き方2 ― ランダム読み取り + +図6-80-READ構文(ランダム読み取り) + +![alt text](Image/6-80-Read.png) + +ファイルから任意のレコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 + +5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 + + KEY句がない場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 + + KEY句が指定されている場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 + +6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 + +10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 + diff --git a/automanual/old/6-34.md b/automanual/old/6-34.md new file mode 100644 index 0000000..fb7aee9 --- /dev/null +++ b/automanual/old/6-34.md @@ -0,0 +1,12 @@ +## 6.34. RELEASE + +図6-81-RELEASE構文 + +![alt text](Image/6-81-Release.png) + +RELEASE文は、整列ファイルに新しいレコードを追加する。 + +1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 + +2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 + diff --git a/automanual/old/6-35.md b/automanual/old/6-35.md new file mode 100644 index 0000000..2a02c3c --- /dev/null +++ b/automanual/old/6-35.md @@ -0,0 +1,14 @@ +## 6.35. RETURN + +図6-82-RETURN構文 + +![alt text](Image/6-82-Return.png) + +RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 + +1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 + +2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 + +3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 + diff --git a/automanual/old/6-36.md b/automanual/old/6-36.md new file mode 100644 index 0000000..5fc3275 --- /dev/null +++ b/automanual/old/6-36.md @@ -0,0 +1,34 @@ +## 6.36. REWRITE + +図6-83-REWRITE構文 + +![alt text](Image/6-83-Rewrite.png) + +REWRITE文は、ディスクファイル上の論理レコードを置き換える。 + +1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 + +2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 + +3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 + +4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 + +6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: + + a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 + + b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 + +7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: + + a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 + + b. レコード名-1のサイズは更新される可能性がある。 + +8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 + +9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 + diff --git a/automanual/old/6-37.md b/automanual/old/6-37.md new file mode 100644 index 0000000..aeb0332 --- /dev/null +++ b/automanual/old/6-37.md @@ -0,0 +1,10 @@ +## 6.37. ROLLBACK + +図6-84-ROLLBACK構文 + +![alt text](Image/6-84-Rollback.png) + +ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 + +1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 + diff --git a/automanual/old/6-38-1.md b/automanual/old/6-38-1.md new file mode 100644 index 0000000..d05e06c --- /dev/null +++ b/automanual/old/6-38-1.md @@ -0,0 +1,26 @@ +## 6.38. SEARCH + +### 6.38.1. SEARCH文の書き方1 ― 順次探索 + +図6-85-SEARCH構文(順次探索) + +![alt text](Image/6-85-Search.png) + +SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 + +1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 + +2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 + +3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: + ``` + SET 指標名-1 TO 1 + ``` +4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 + +5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 + +6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 + +7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 +  diff --git a/automanual/old/6-38-2.md b/automanual/old/6-38-2.md new file mode 100644 index 0000000..c1e8a3d --- /dev/null +++ b/automanual/old/6-38-2.md @@ -0,0 +1,61 @@ +### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) + +図6-86-SEARCH構文(二分探索) + +![alt text](Image/6-86-Search.png) + +整列されたテーブルに対して二分探索を実行する。 + +1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 + +2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 + + a. テーブルは上記1項の要件を満たしている。 + + b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` + + c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 + + aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 + +3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 + +4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 + +5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 + +6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 + +7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 + +8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` + + a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 + + b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 + + - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 + + - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 + + - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 + + c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 + + d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 + +上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 + +コンピュータ研究者は、二つの探索方法を次のように比較する: + +- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 + +- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 + +探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 + +--- +`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 + +`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 + diff --git a/automanual/old/6-39-1.md b/automanual/old/6-39-1.md new file mode 100644 index 0000000..dbc9f68 --- /dev/null +++ b/automanual/old/6-39-1.md @@ -0,0 +1,22 @@ +## 6.39. SET + +### 6.39.1. SET文の書き方1 ― 環境設定 + +図6-87-SET構文(環境設定) + +![alt text](Image/6-87-Set.png) + +プログラム内から環境値を簡単に設定することができる。 + +1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 + +2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 + + DSIPLAY SET ENVIRONMENT “VARNAME” TO + "VALUE" + “VARNAME” UPON ENVIRONMENT-NAME + END-DISPLAY + DSIPLAY + “VALUE” UPON ENVIRONMENT-VALUE + END-DISPLAY + diff --git a/automanual/old/6-39-2.md b/automanual/old/6-39-2.md new file mode 100644 index 0000000..2d79aca --- /dev/null +++ b/automanual/old/6-39-2.md @@ -0,0 +1,16 @@ +### 6.39.2. SET文の書き方2 ― プログラムポインター設定 + +図6-88-SET構文(プログラムポインター設定) + +![alt text](Image/6-88-Set.png) + +手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 + +1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 + +2. program-pointer-1はプログラムポインターとして使用しなければならない。 + +3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 + +4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 + diff --git a/automanual/old/6-39-3.md b/automanual/old/6-39-3.md new file mode 100644 index 0000000..17af070 --- /dev/null +++ b/automanual/old/6-39-3.md @@ -0,0 +1,12 @@ +### 6.39.3. SET文の書き方3 ― アドレス設定 + +図6-89-SET構文(アドレス設定) + +![alt text](Image/6-89-Set.png) + +データ項目の内容ではなく、アドレスを処理するために使われる。 + +1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 + +2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 + diff --git a/automanual/old/6-39-4.md b/automanual/old/6-39-4.md new file mode 100644 index 0000000..6e54a5f --- /dev/null +++ b/automanual/old/6-39-4.md @@ -0,0 +1,10 @@ +### 6.39.4. SET文の書き方4 ― インデックス設定 + +図6-90-SET構文(インデックス設定) + +![alt text](Image/6-90-Set.png) + +USAGE INDEXデータ項目に値を割り当てる。 + +1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 + diff --git a/automanual/old/6-39-5.md b/automanual/old/6-39-5.md new file mode 100644 index 0000000..f8248bd --- /dev/null +++ b/automanual/old/6-39-5.md @@ -0,0 +1,12 @@ +### 6.39.5. SET文の書き方5 ― UP / DOWN設定 + +図6-91-SET構文(UP/DOWN設定) + +![alt text](Image/6-91-Set.png) + +インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 + +1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 + +2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 + diff --git a/automanual/old/6-39-6.md b/automanual/old/6-39-6.md new file mode 100644 index 0000000..5a6e842 --- /dev/null +++ b/automanual/old/6-39-6.md @@ -0,0 +1,14 @@ +### 6.39.6. SET文の書き方6 ― 条件名設定 + +図6-92-SET構文(条件名設定) + +![alt text](Image/6-92-Set.png) + +レベル88条件名のTRUE/FALSE値を指定することができる。 + +1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 + +2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 + +3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 + diff --git a/automanual/old/6-39-7.md b/automanual/old/6-39-7.md new file mode 100644 index 0000000..637d4c6 --- /dev/null +++ b/automanual/old/6-39-7.md @@ -0,0 +1,10 @@ +### 6.39.7. SET文の書き方7 ― スイッチ設定 + +図6-93-SET構文(スイッチ設定) + +![alt text](Image/6-93-Set.png) + +スイッチをオンまたはオフにする。 + +1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 + diff --git a/automanual/old/6-4-1.md b/automanual/old/6-4-1.md new file mode 100644 index 0000000..3778313 --- /dev/null +++ b/automanual/old/6-4-1.md @@ -0,0 +1,14 @@ +## 6.4. ACCEPT + +### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り + +図6-18-ACCEPT構文(コンソールからの読み取り) + +![alt text](Image/6-18.png) + +コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 + +1. FROM句を使う場合、指定するニーモニック名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義のニーモニック名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 + +2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 + diff --git a/automanual/old/6-4-2.md b/automanual/old/6-4-2.md new file mode 100644 index 0000000..db82816 --- /dev/null +++ b/automanual/old/6-4-2.md @@ -0,0 +1,25 @@ +### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 + +図6-19-ACCEPT構文(コマンドライン引数) + +![alt text](Image/6-19.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 + +2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 + + - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 + + - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 + + - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 + +3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 + +4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 + diff --git a/automanual/old/6-4-3.md b/automanual/old/6-4-3.md new file mode 100644 index 0000000..7e96959 --- /dev/null +++ b/automanual/old/6-4-3.md @@ -0,0 +1,17 @@ +### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 + +図6-20-ACCEPT構文(環境変数値の取得) + +![alt text](Image/6-20.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 + +2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 + +3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 + diff --git a/automanual/old/6-4-4.md b/automanual/old/6-4-4.md new file mode 100644 index 0000000..993a6ed --- /dev/null +++ b/automanual/old/6-4-4.md @@ -0,0 +1,20 @@ +### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 + +図6-21-ACCEPT構文(画面データの取得) + +![alt text](Image/6-21.png) + +画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 + +1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 + +2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 + +4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 + +5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 + +6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + diff --git a/automanual/old/6-4-5.md b/automanual/old/6-4-5.md new file mode 100644 index 0000000..80d6812 --- /dev/null +++ b/automanual/old/6-4-5.md @@ -0,0 +1,14 @@ +### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 + +図6-22-ACCEPT構文(日付/時刻の取得)構文 + +![alt text](Image/6-22.png) + +システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 + +1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 + + 表6-23-ACCEPTオプション(日付/時刻の取得) + + ![!\[alt text\](Image/6-23.png)](Image/6-23.png) + diff --git a/automanual/old/6-4-6.md b/automanual/old/6-4-6.md new file mode 100644 index 0000000..8fcfc08 --- /dev/null +++ b/automanual/old/6-4-6.md @@ -0,0 +1,10 @@ +### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 + +図6-24-ACCEPT(画面サイズデータの取得)構文 + +![alt text](Image/6-24.png) + +プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 + +1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 + diff --git a/automanual/old/6-4-7.md b/automanual/old/6-4-7.md new file mode 100644 index 0000000..6ff0c0a --- /dev/null +++ b/automanual/old/6-4-7.md @@ -0,0 +1,8 @@ +### 6.4.7. ACCEPT文の例外処理 + +図6-25-ACCEPT例外処理構文 + +![alt text](Image/6-25.png) + +ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 + diff --git a/automanual/old/6-40-1.md b/automanual/old/6-40-1.md new file mode 100644 index 0000000..f203b04 --- /dev/null +++ b/automanual/old/6-40-1.md @@ -0,0 +1,82 @@ +## 6.40. SORT + +### 6.40.1. SORT文の書き方1 ― ファイルソート + +図6-94-SORT構文(ファイルソート) + +![alt text](Image/6-94-Sort.png) + +一つ以上のキー項目に従って、大量のデータを整列することができる。 + +1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 + +2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 + +3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 + +6. SORT文は次の3段階の働きがある。 + + ステージ1(入力フェーズ): + + a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 + + b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 + + c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 + + d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 + + e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 + + g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 + + h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 + + ステージ2(ソートフェーズ): + + a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + + b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 + + SORT Sort-File + ASCENDING KEY Transaction-Date + ASCENDING KEY Account-Number + DESCENDING KEY Transaction-Amount + . + . + . + + + このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 + + c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 + + ステージ3(出力フェーズ): + + a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 + + b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 + + c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 + + d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 + + e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 + + g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 + +7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 + +--- +`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 + +`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 + diff --git a/automanual/old/6-40-2.md b/automanual/old/6-40-2.md new file mode 100644 index 0000000..59e778b --- /dev/null +++ b/automanual/old/6-40-2.md @@ -0,0 +1,22 @@ +### 6.40.2. SORT文の書き方2 ― テーブルソート + +図6-95-SORT構文(テーブルソート) + +![alt text](Image/6-95-Set.png) + +一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 + +1. テーブル名データ項目には、OCCURS句が必要である。 + +2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 + +3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 + +5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 + +6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + +7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 + diff --git a/automanual/old/6-41.md b/automanual/old/6-41.md new file mode 100644 index 0000000..0d5429e --- /dev/null +++ b/automanual/old/6-41.md @@ -0,0 +1,34 @@ +## 6.41. START + +図6-96-START構文 + +![alt text](Image/6-96-Start.png) + +START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 + +1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 + +2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 + +3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 + +4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 + +5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 + +6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 + +7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 + + a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 + + b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 + +8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 + +9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 + +10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 + +11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 + diff --git a/automanual/old/6-42.md b/automanual/old/6-42.md new file mode 100644 index 0000000..7d12ec5 --- /dev/null +++ b/automanual/old/6-42.md @@ -0,0 +1,19 @@ +## 6.42. STOP + +図6-97-STOP構文 + +![alt text](Image/6-97-Stop.png) + +STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 + +1. RETURNING句とGIVING句は同意義のものとして利用できる。 + +2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 + +3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 + +4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: + + STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE + STOP RUN + diff --git a/automanual/old/6-43.md b/automanual/old/6-43.md new file mode 100644 index 0000000..255f905 --- /dev/null +++ b/automanual/old/6-43.md @@ -0,0 +1,30 @@ +## 6.43. STRING + +図6-98-STRING構文 + +![alt text](Image/6-98-String.png) + +STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 + +1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 + +2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 + +3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 + +4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 + +5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 + +6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 + +7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 + +8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 + +9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 + +10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 + +11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 + diff --git a/automanual/old/6-44-1.md b/automanual/old/6-44-1.md new file mode 100644 index 0000000..2d51a41 --- /dev/null +++ b/automanual/old/6-44-1.md @@ -0,0 +1,16 @@ +## 6.44. SUBTRACT + +### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM + +図6-99-SUBSTRACT構文 + +![alt text](Image/6-99-Subtract.png) + +FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/old/6-44-2.md b/automanual/old/6-44-2.md new file mode 100644 index 0000000..5e5b0cd --- /dev/null +++ b/automanual/old/6-44-2.md @@ -0,0 +1,16 @@ +### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING + +図6-100-SUBSTRACT GIVING構文 + +![alt text](Image/6-100-Subtract.png) + +FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/old/6-44-3.md b/automanual/old/6-44-3.md new file mode 100644 index 0000000..9001dcf --- /dev/null +++ b/automanual/old/6-44-3.md @@ -0,0 +1,12 @@ +### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING + +図6-101-SUBSTRACT CORRESPONDING構文 + +![alt text](Image/6-101-Subtract.png) + +二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 + +1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + diff --git a/automanual/old/6-45.md b/automanual/old/6-45.md new file mode 100644 index 0000000..6bc0b86 --- /dev/null +++ b/automanual/old/6-45.md @@ -0,0 +1,8 @@ +## 6.45. SUPPRESS + +図6-102-SUPPRESS構文 + +![alt text](Image/6-102-Suppress.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 + diff --git a/automanual/old/6-46.md b/automanual/old/6-46.md new file mode 100644 index 0000000..8ec0703 --- /dev/null +++ b/automanual/old/6-46.md @@ -0,0 +1,8 @@ +## 6.46. TERMINATE + +図6-103-TERMINATE構文 + +![alt text](Image/6-103-Terminate.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 + diff --git a/automanual/old/6-47.md b/automanual/old/6-47.md new file mode 100644 index 0000000..7ad4f71 --- /dev/null +++ b/automanual/old/6-47.md @@ -0,0 +1,24 @@ +## 6.47. TRANSFORM + +図6-104-TRANSFORM構文 + +![alt text](Image/6-104-Transform.png) + +TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 + +1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 + +2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 + +3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 + +4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 + +5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 + + 図6-105-機能的なTRANSFORM文 + + ![alt text](Image/6-105-Transform.png) + diff --git a/automanual/old/6-48.md b/automanual/old/6-48.md new file mode 100644 index 0000000..2696b86 --- /dev/null +++ b/automanual/old/6-48.md @@ -0,0 +1,15 @@ +## 6.48. UNLOCK + +図6-106-UNLOCK構文 + +![alt text](Image/6-106-Unlock.png) + +この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 + +1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 + +2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 + +--- +`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 + diff --git a/automanual/old/6-49.md b/automanual/old/6-49.md new file mode 100644 index 0000000..b7db717 --- /dev/null +++ b/automanual/old/6-49.md @@ -0,0 +1,61 @@ +## 6.49. UNSTRING + +図6-107-UNSTRING構文 + +![alt text](Image/6-107-Unstring.png) + +UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 + +1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 + +2. 定数-1および定数-2は、英数字の定数でなければならない。 + +3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 + +4. 一意名-10の値は0より大きい必要がある。 + +5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 + +6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 + +7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 + +8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 + +9. ソース文字列が部分文字列に解析される例を次に示す: + + ![alt text](Image/6-49-1.png) + + 図6-108-STRING文の例 + + ![alt text](Image/6-108-Unstring.png) + + 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 + + ![alt text](Image/6-49-2.png) + + すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 + + すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 + +10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-3.png) + +11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-4.png) + +12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 + +13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 + +14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 + +15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 + +--- +`27` 空白文字列のMOVEは、空白のMOVEと同じである。 + +`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 + diff --git a/automanual/old/6-5-1.md b/automanual/old/6-5-1.md new file mode 100644 index 0000000..a21c2f9 --- /dev/null +++ b/automanual/old/6-5-1.md @@ -0,0 +1,26 @@ +## 6.5. ADD + +### 6.5.1. ADD文の書き方1 ― ADD TO + +図6-26-ADD TO構文 + +![alt text](Image/6-26.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 + +4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 + +5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 + + 図6-27-ON SIZE ERROR句を使用するサンプルプログラム + + ![alt text](Image/6-27.png) + +6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 + diff --git a/automanual/old/6-5-2.md b/automanual/old/6-5-2.md new file mode 100644 index 0000000..f99be48 --- /dev/null +++ b/automanual/old/6-5-2.md @@ -0,0 +1,18 @@ +### 6.5.2. ADD文の書き方2 ― ADD GIVING + +図6-28-ADD GIVING構文 + +![alt text](Image/6-28.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. 一意名-2の内容は変更できない。 + +5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + diff --git a/automanual/old/6-5-3.md b/automanual/old/6-5-3.md new file mode 100644 index 0000000..a200cb6 --- /dev/null +++ b/automanual/old/6-5-3.md @@ -0,0 +1,12 @@ +### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING + +図6-29-ADD CORRESPONDING構文 + +![alt text](Image/6-29.png) + +二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 + +1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + diff --git a/automanual/old/6-50.md b/automanual/old/6-50.md new file mode 100644 index 0000000..166d7a3 --- /dev/null +++ b/automanual/old/6-50.md @@ -0,0 +1,81 @@ +## 6.50. WRITE + +図6-109-WRITE構文 + +![alt text](Image/6-109-Write.png) + +WRITE文は、OPENファイルに新しいレコードを書き込む。 + +1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 + +2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 + +3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 + +4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 + +5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 + +6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 + +7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 + +8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 + +9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 + +10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 + +11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 + +12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 + +13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: + + a. AFTER ADVANCINGが指定されている場合: + + - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + c. BEFORE ADVANCINGが指定されている場合: + + - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 + + - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 + +14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 + + FD Report-File + LINAGE IS 66 LINES + ........WITH FOOTER AT 57 + ........LINES AT TOP 3 + ........LINES AT BOTTOM 3 + . + . + . + OPEN OUTPUT Report-File + PERFORM Generate-Page-Header + . + . + . + WRITE Report-Rec AFTER ADVANCING 1 LINE + AT END-OF-PAGE PERFORM Generate-Page-Header + END-WRITE + . + . + . + CLOSE Report-File + +15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 + +16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 + +17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 + diff --git a/automanual/old/6-6.md b/automanual/old/6-6.md new file mode 100644 index 0000000..010bca5 --- /dev/null +++ b/automanual/old/6-6.md @@ -0,0 +1,42 @@ +## 6.6. ALLOCATE + +図6-30-ALLOCATE構文 + +![alt text](Image/6-30.png) + +ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 + +1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 + +2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 + +3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 + +4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 + +5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 +6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 + +7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 + +8. 基本的な使用法は二つあり、最も単純なものは次の例である。 + + ALLOCATE My-01-Item + + `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 + + 二つ目の使用法は以下の通りである。 + + ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. + + SET ADDRESS OF My-01-Item TO The-Pointer. + + ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 + + 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 + +9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 + +--- +`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 + diff --git a/automanual/old/6-7.md b/automanual/old/6-7.md new file mode 100644 index 0000000..bd033c9 --- /dev/null +++ b/automanual/old/6-7.md @@ -0,0 +1,47 @@ +## 6.7. CALL + +図6-31-CALL構文 + +![alt text](Image/6-31.png) + +CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 + +1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 + +2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 + +3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 + +4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 + +5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 + +6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 + +7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 + +8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 + +9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 + +10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 + +11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 + + 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) + + ![alt text](Image/6-32.png) + +12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 + + 図6-33-CALL BY VALUE句 + + ![alt text](Image/6-33.png) + +13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 + +14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 + +--- +`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 + diff --git a/automanual/old/6-8-1.md b/automanual/old/6-8-1.md new file mode 100644 index 0000000..69edccd --- /dev/null +++ b/automanual/old/6-8-1.md @@ -0,0 +1,12 @@ +## 6.8. CANSEL + +### 6.8.1. CANCEL文の書き方1 ― CANCEL + +図6-34-CANCEL構文 + +![alt text](Image/6-34.png) + +CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 + +1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 + diff --git a/automanual/old/6-8-2.md b/automanual/old/6-8-2.md new file mode 100644 index 0000000..8d6803a --- /dev/null +++ b/automanual/old/6-8-2.md @@ -0,0 +1,8 @@ +### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL + +図6-35-CANCEL ALL構文 + +![alt text](Image/6-35(cancel).png) + +CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 + diff --git a/automanual/old/6-9.md b/automanual/old/6-9.md new file mode 100644 index 0000000..90a3261 --- /dev/null +++ b/automanual/old/6-9.md @@ -0,0 +1,22 @@ +## 6.9. CLOSE + +図6-36-CLOSE構文 + +![alt text](Image/6-36-CLOSE.png) + +CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 + +1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 + +2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 + +3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 + +4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 + +5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 + +6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 + +7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 + diff --git a/automanual/old/7-1.md b/automanual/old/7-1.md new file mode 100644 index 0000000..5d7c127 --- /dev/null +++ b/automanual/old/7-1.md @@ -0,0 +1,20 @@ +# 7. 日本語の使用 + +日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 + +## 7.1. 英数字項目の日本語 + +文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 + + + 01 データ項目1 PIC X(8) VALUE"顧客code" + + 01 データ項目2 PIC X(10) VALUE"顧客コード" + +データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 + +注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 + +1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 +2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) + diff --git a/automanual/old/7-2.md b/automanual/old/7-2.md new file mode 100644 index 0000000..7267dc2 --- /dev/null +++ b/automanual/old/7-2.md @@ -0,0 +1,13 @@ +## 7.2. 日本語項目と表意定数 + +日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 + +表7-1-日本語項目と表意定数の値 + +| 表意定数 | シフトJISコード | +| --- | :--- | +| SPACE(S) | 日本語空白文字 X"8140" | +| HIGH-VALUE(S) | X"FFFF" | +| LOW-VALUE(S) | X"0000" | +| ALL 定数 | 定数の値に依存する | + diff --git a/automanual/old/7-3-1.md b/automanual/old/7-3-1.md new file mode 100644 index 0000000..d5284d0 --- /dev/null +++ b/automanual/old/7-3-1.md @@ -0,0 +1,49 @@ +## 7.3. 各命令文と日本語の取扱い + +### 7.3.1. MOVE文 + +MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 + +表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 + +表7-2-転記の処理方法 + +| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | +| :--- | :--- | :--- | +| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | +| 非整数 | 日本語,日本語編集 | コンパイルエラー | +| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 日本語,日本語編集 | 英字 | そのまま転記 | +| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | +| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | +| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | + +データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 + +文字には半角カタカナも含まれる。 + +ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 + +受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 + +表7-3-送出し側データ項目の内容に対する処理方法 + +| 送出し側データ項目の内容 | 処理方式 | +| --- | --- | +| 正しい文字 | 全角文字へコード変換 | +| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | +| 正しい日本語文字 | そのまま転記 | +| 不正な日本語文字(≠文字) | そのまま転記 | +| X”00” | X”0000”29 | +| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | +| X”FF” | X”FFFF” | +| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | + +ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 + +--- +`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 + diff --git a/automanual/old/7-3-2.md b/automanual/old/7-3-2.md new file mode 100644 index 0000000..df3acf6 --- /dev/null +++ b/automanual/old/7-3-2.md @@ -0,0 +1,6 @@ +### 7.3.2. ACCEPT/DISPLAY文 + +ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 + +日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 + diff --git a/automanual/old/7-4.md b/automanual/old/7-4.md new file mode 100644 index 0000000..b7b50ea --- /dev/null +++ b/automanual/old/7-4.md @@ -0,0 +1,12 @@ +## 7.4. UTF-8の使用 + +opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 + +1. PICTURE句において、「N」1つは3バイトと見なす。 + +2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 + +3. 空白詰めは半角空白で行われる。 + +4. STRING文において、項目の種類が混在した時のチェックを抑止する。 + diff --git a/automanual/old/8-1-1.md b/automanual/old/8-1-1.md new file mode 100644 index 0000000..783f243 --- /dev/null +++ b/automanual/old/8-1-1.md @@ -0,0 +1,12 @@ +# 8. opensource COBOLシステムインターフェース + +## 8.1. opensource COBOLコンパイラの使い方(cobc) + +### 8.1.1. 解説 + +プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 +プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 +空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 +opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 +opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 + diff --git a/automanual/old/8-1-2.md b/automanual/old/8-1-2.md new file mode 100644 index 0000000..1f0a78b --- /dev/null +++ b/automanual/old/8-1-2.md @@ -0,0 +1,88 @@ +### 8.1.2. コンパイルオプション + +次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 + + 使い方: cobc [options] file... + オプション: + --help このメッセージを表示します + --version, -V コンパイラのバージョンを表示します + -v コンパイラが起動したプログラムを表示します + -x 実行可能プログラムをビルドします + -m 動的ロード可能モジュールをビルドします(デフォルト) + -std=<方言> 指定した方言に基づいて警告/機能します : + cobol2002 Cobol 2002 + cobol85 Cobol 85 + ibm IBM互換 + mvs MVS互換 + bs2000 BS2000互換 + mf Micro Focus互換 + default 指定しない + config/default.conf および config/*.conf を参照してください + -free 自由形式を使用します + -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します + -fixed 固定形式を使用します(デフォルト) + -O, -O2, -Os 最適化を有功にします + -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします + -debug すべての実行時エラーチェックを有功にします + -o <ファイル> 出力先を <ファイル> にします + -b すべての入力ファイルをひとつに結合します + 動的ロード可能モジュール + -E 前処理のみ; コンパイルやリンクを行いません + -C トランスレートのみ; COBOL から C へ変換します + -S コンパイルのみ; アセンブリファイルを出力します + -c コンパイルとアセンブルを行い、リンクを行いません + -t <ファイル> プログラムリストを <ファイル> に生成します + -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます + -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます + -l ライブラリ をリンクします + -B Cコンパイルフェーズに を追加します + -Q Cリンクフェーズに を追加します + -D Cコンパイラに を渡します + -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください + --list-reserved 予約語の一覧を表示します + --list-intrinsics 組み込み関数の一覧を表示します + --list-mnemonics 作成者語の一覧を表示します + -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) + -MT 依存関係リストで使用される対象ファイルを指定します + -MF <ファイル> 依存関係リストを <ファイル> に生成します + -ext 既定のファイル拡張子を追加します + -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします + -reference_check 実行時の参照チェックを有効にします + -constant(=) $IF 文で評価する定数名 に 値 を設定します + + -W すべての警告を有功にする + -Wall 以下を除くすべての警告を有功にする + -Wobsolete 廃要素が使われていれば警告する + -Warchaic 古い仕様が使われていれば警告する + -Wredefinition データ項目の再定義を警告する + -Wconstant 不適切な定数を警告する + -Wparentheses OR と AND が括弧なしで並んでいれば警告する + -Wstrict-typing タイプの不適合を厳密に警告する + -Wimplicit-define データ項目の再定義を警告する + -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する + (-Wall指定時は適用されません) + -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) + -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) + -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) + -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) + -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) + -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) + + -ftrace トレースコードの生成(実行された節/段落の追跡) + -ftraceall トレースコードの生成(実行された節/段落/文の追跡) + -fsyntax-only 文法チェックのみ。何も出力しない + -fdebugging-line デバッグ行(標識領域に'D')を有効にする + -fsource-location ソース行情報の生成(-debugか-gで有効) + -fimplicit-init Cobolラインタイム初期化の自動実行 + -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) + -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) + -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) + -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) + -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) + -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない + -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す + -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) + -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す + +[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 + diff --git a/automanual/old/8-1-3.md b/automanual/old/8-1-3.md new file mode 100644 index 0000000..7e2ea31 --- /dev/null +++ b/automanual/old/8-1-3.md @@ -0,0 +1,10 @@ +### 8.1.3. 実行可能プログラムのコンパイル + +最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 + + cobc –x prog1.cbl prog2.cbl prog3.cbl + +メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 + +これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 + diff --git a/automanual/old/8-1-4.md b/automanual/old/8-1-4.md new file mode 100644 index 0000000..f241eb8 --- /dev/null +++ b/automanual/old/8-1-4.md @@ -0,0 +1,35 @@ +### 8.1.4. 動的にロード可能なサブプログラム + +実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 + + cobc –m sprog1.cbl +または + + cobc –m sprog1.cbl sprog2.cbl sprog3.cbl + +上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 + +次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 + +1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 + +2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 + +3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 + +4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき + + a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 + + b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 + + c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 + + - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 + + - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 + +5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 + +「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 + diff --git a/automanual/old/8-1-5.md b/automanual/old/8-1-5.md new file mode 100644 index 0000000..f00e201 --- /dev/null +++ b/automanual/old/8-1-5.md @@ -0,0 +1,16 @@ +### 8.1.5. 静的サブルーチン + +opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 + + cobc –S sprog1.cbl + +(注:「**-S**」は大文字で表記する) + +これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 + +メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 + + cobc –x mainprog.cbl sprog1.s + +複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 + diff --git a/automanual/old/8-1-6.md b/automanual/old/8-1-6.md new file mode 100644 index 0000000..c243152 --- /dev/null +++ b/automanual/old/8-1-6.md @@ -0,0 +1,132 @@ +### 8.1.6. COBOLとCプログラムの結合 + +opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 + +#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 + +COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 + +#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い + +どちらの言語も、文字列を固定長の連続した文字順序として格納する。 + +COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: + + 01 LastName PIC X(15). + +USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 + +実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: + + char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ + +Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 + +#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 + +これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 + +表8-1-Cまたはopensource COBOLのデータ型の一致 + +| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | +| :--- | :--- | :--- | :--- | +|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | +| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | +| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | +| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| +| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | +| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | +| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | +| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | +|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | +|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | +|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | +| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | + + + + +同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 + +様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 + +#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し + +CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 + +図8-2-opensource COBOLのC呼び出し + +![alt text](Image/8-2.png) + +考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 + +COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 + +Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` + +これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + $ cc –c subc.c + $ cobc -x maincob.cbl subc.o + $ maincob + Starting cobmain + Starting subc + Arg1=Arg1 + Arg2=Arg2 + Arg3=123456789 + Back + Arg1=Arg1 + Arg2=Yrg2 + Arg3=+0987654321 + Returned value=+000000002 + $ + + + +null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 + +[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 + +#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し + +ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 + +図8-3-Cのopensource COBOL呼び出し + +![alt text](Image/8-3.png) + +Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 + +「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 + +Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 + +コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl + C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob + C:\Users\Gary\Documents\Programs> mainc.exe + Starting mainc... + Starting cobsub.cbl + Arg1=Arg1 + Arg2=Arg2 + Arg3=+0123456789 + Back + Arg1=Xrg1 + Arg2=Xrg2 + Arg3=987654321 + Returned value=2 + C:\Users\Gary\Documents\Programs> + + +第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 + +ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 + +--- +`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 + +`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 + +`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 + diff --git a/automanual/old/8-1-7.md b/automanual/old/8-1-7.md new file mode 100644 index 0000000..66de2b6 --- /dev/null +++ b/automanual/old/8-1-7.md @@ -0,0 +1,29 @@ +### 8.1.7. 重要な環境変数 + +次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 + +表8-4-環境変数コンパイラ + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | +| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | +| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | +| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | +|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | +| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | +| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | +| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | +| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | +| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | +| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | +|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | +|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | + +--- +`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 + diff --git a/automanual/old/8-1-8.md b/automanual/old/8-1-8.md new file mode 100644 index 0000000..9cddd97 --- /dev/null +++ b/automanual/old/8-1-8.md @@ -0,0 +1,24 @@ +### 8.1.8. コンパイル時のコピーブックの検索 + +opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 + +- コンパイルされるプログラムが存在するフォルダ。 +- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 +- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 +- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 + +上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 + +- XXXXXXXX.CPY +- XXXXXXXX.CBL +- XXXXXXXX.COB +- XXXXXXXX.cpy +- XXXXXXXX.cbl +- XXXXXXXX.cob +- XXXXXXXX + +UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 + +--- +`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 + diff --git a/automanual/old/8-1-9.md b/automanual/old/8-1-9.md new file mode 100644 index 0000000..cf58c51 --- /dev/null +++ b/automanual/old/8-1-9.md @@ -0,0 +1,116 @@ +### 8.1.9. コンパイラ構成ファイルの使い方 + +opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 + +以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 + +``` +# COBOL compiler configuration -*- sh -*- + +# Value: any string +name: "opensource COBOL" + +# Value: int +tab-width: 8 +text-column: 72 + +# Value: 'cobol2002', 'mf', 'ibm' +# +assign-clause: mf + +# If yes, file names are resolved at run time using environment variables. +# For example, given ASSIGN TO "DATAFILE", the actual file name will be +# 1. the value of environment variable 'DD_DATAFILE' or +# 2. the value of environment variable 'dd_DATAFILE' or +# 3. the value of environment variable 'DATAFILE' or +# 4. the literal "DATAFILE" +# If no, the value of the assign clause is the file name. +# +# Value: 'yes', 'no' +filename-mapping: yes + +# Value: 'yes', 'no' +pretty-display: yes + +# Value: 'yes', 'no' +auto-initialize: yes + +# Value: 'yes', 'no' +complex-odo: no + +# Value: 'yes', 'no' +indirect-redefines: no + +# Binary byte size - defines the allocated bytes according to PIC +# Value: signed unsigned bytes +# ------ -------- ----- +# '2-4-8' 1 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1-2-4-8' 1 - 2 1 +# 3 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1--8' 1 - 2 1 - 2   1 +# 3 - 4 3 - 4 2 +# 5 - 6 5 - 7 3 +# 7 - 9 8 - 9 4 +# 10 - 11 10 - 12 5 +# 12 - 14 13 - 14 6 +# 15 - 16 15 - 16 7 +# 17 - 18 17 - 18 8 +binary-size: 1-2-4-8 + +# Value: 'yes', 'no' +binary-truncate: yes + +# Value: 'native', 'big-endian' +binary-byteorder: big-endian + +# Value: 'yes', 'no' +larger-redefines-ok: no + +# Value: 'yes', 'no' +relaxed-syntax-check: no + +# Perform type OSVS - If yes, the exit point of any currently executing perform +# is recognized if reached. +# Value: 'yes', 'no' +perform-osvs: no + +# If yes, linkage-section items remain allocated +# between invocations. +# Value: 'yes', 'no' +sticky-linkage: no + +# If yes, allow non-matching level numbers +# Value: 'yes', 'no' +relax-level-hierarchy: no + +# not-reserved: +# Value: Word to be taken out of the reserved words list +# (case independent) + +# Dialect features +# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' +author-paragraph: obsolete +memory-size-clause: obsolete +multiple-file-tape-clause: obsolete +label-records-clause: obsolete +value-of-clause: obsolete +data-records-clause: obsolete +top-level-occurs-clause: skip +synchronized-clause: ok +goto-statement-without-name: obsolete +stop-literal-statement: obsolete +debugging-line: obsolete +padding-character-clause: obsolete +next-sentence-phrase: archaic +eject-statement: skip +entry-statement: obsolete +move-noninteger-to-alphanumeric: error +odo-without-to: ok +``` + diff --git a/automanual/old/8-2-1.md b/automanual/old/8-2-1.md new file mode 100644 index 0000000..6c0e9f7 --- /dev/null +++ b/automanual/old/8-2-1.md @@ -0,0 +1,24 @@ +## 8.2. opensource COBOLプログラムの実行 + +### 8.2.1. プログラムの直接実行 + +「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 + +これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 + +これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 + +プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 + +プログラムの直接実行構文は次の通りである。 + + [path]program [arguments] + +例: +``` + /usr/local/printaccount ACCT=6625378 + または + C:\Users\Me\Documents\Programs\printaccount.exe + ACCT=6625378 +``` + diff --git a/automanual/old/8-2-2.md b/automanual/old/8-2-2.md new file mode 100644 index 0000000..bf162cf --- /dev/null +++ b/automanual/old/8-2-2.md @@ -0,0 +1,22 @@ +### 8.2.2. 「cobcrun」ユーティリティの使用 + +「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 + +opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 + +この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: + + [path]cobcrun program [arguments] + +プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 + +cobcrunの使用例: + + cd /usr/local + cobcrun printaccount ACCT=6625378 + または + cd C:\Users\Me\Documents\Programs + cobcrun printaccount.exe ACCT=6625378 + +cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 + diff --git a/automanual/old/8-2-3.md b/automanual/old/8-2-3.md new file mode 100644 index 0000000..b0be69e --- /dev/null +++ b/automanual/old/8-2-3.md @@ -0,0 +1,7 @@ +### 8.2.3. プログラムの引数 + +プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 + +- ACCEPT ・・・ FROM COMMAND-LINE +- ACCEPT ・・・ FROM ARGUMENT-VALUE + diff --git a/automanual/old/8-2-4.md b/automanual/old/8-2-4.md new file mode 100644 index 0000000..43f0652 --- /dev/null +++ b/automanual/old/8-2-4.md @@ -0,0 +1,24 @@ +### 8.2.4. 重要な環境変数 + +次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 + +表8-5-実行時環境変数 + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| +|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | +|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | +|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| +|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| +|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| +|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| +|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| + +--- +`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 +`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 +`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 + diff --git a/automanual/old/8-3-1.md b/automanual/old/8-3-1.md new file mode 100644 index 0000000..db09af2 --- /dev/null +++ b/automanual/old/8-3-1.md @@ -0,0 +1,749 @@ +## 8.3. 組み込みサブルーチン + +### 8.3.1. 「名前による呼び出し」ルーチン + +opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 + +これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 + + +- 現在のディレクトリの変更 +- ファイルのコピー +- ディレクトリの作成 +- ファイルの作成、開く、閉じる、読み取り、書き込み +- ディレクトリ(フォルダ)の削除 +- ファイルの削除 +- サブルーチンに渡された引数の数の決定 +- ファイル情報の取得(サイズと最終変更日時) +- サブルーチンに渡される引数の長さ(バイト単位)の取得 +- 項目の左揃え、右揃え、または中央揃えの決定 +- ファイルの移動(破壊的な「コピー」) +- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする +- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする + + 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない +- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する + +次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 + +#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* + +このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 + +*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 + +statusは次のいずれかの値を受け取る。 + +| | | +| --- | --- | +| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | +| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | +| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | + + +#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 + +[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 + +#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +第3引数は必須ではあるが、使用されない。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 + +#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +第2引数は必須ではあるが、使用されない。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 + +#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* + +このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 File-Info. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date + 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time + +変更時刻の小数点以下2桁は常に0である。 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 + +#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” + +C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 + +- なし 「R」と同じように扱われる +- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる +- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる +- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる +- それ以外 「R」として扱われる + +#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* + +このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 + +与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 + +| | | +| --- | --- | +| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | +| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | +| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | + +``` + 01 PATTERN PIC X(5) VALUE "*". + 01 DIRECTORY PIC X(256) VALUE + "./list". + 01 FILENAME PIC X(30). + 01 MYDIR PIC 9(8) COMP-5. + PROCEDURE DIVISION. + CALL "C$LIST-DIRECTORY" USING 1, + DIRECTORY, + PATTERN + END-CALL. + MOVE RETURN-CODE TO MYDIR. + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL. + PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES + DISPLAY FUNCTION TRIM(FILENAME) + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL + END-PERFORM. + CALL "C$LIST-DIRECTORY" USING 3, MYDIR + END-CALL. +``` + +#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 + +#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* + +C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 + +メインプログラムからCALLされた場合、戻り値は常に0になる。 + +[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 + +#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* + +このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 + +サイズは、RETURN-CODE特殊レジスタに返される。 + +指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 + +#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* + +C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 + +1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 + +[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 + +#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 + +#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 + +#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「AND」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 + +操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 + +[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 + +#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* + +このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 Argument-2. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-DD PIC 9(2) COMP. *> Modification Time + 05 Mod-MO PIC 9(2) COMP. + 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date + 05 Mod-HH PIC 9(2) COMP. + 05 Mod-MM PIC 9(2) COMP. + 05 Mod-SS PIC 9(2) COMP. + 05 FILLER PIC 9(2) COMP. *> This will always be 00 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 + +#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* + +CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 + +*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 + +サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 + +#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 + +#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 + +#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* + +CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 + +引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` + +後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 + +サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 + +[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 + +#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* + +CBL_DELETE_DIRを使って空のディレクトリを削除する。 + +唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 + +指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 + +RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 + +#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* + +このルーチンは、一般的なエラー処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 + +一度に有効にできるユーザ定義のエラー手続きは1つだけである。 + +エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 + +エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoerrproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Err-Proc. + SET Err-Proc-Address TO ENTRY "999-Err" + CALL "CBL_ERROR_PROC" + USING Err-Proc-Install, Err-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not' & + 'register Error Procedure' + END-IF + . + 099-Now-Test-Err-Proc. + CALL "Tilt" END-CALL + GOBACK + . + 999-Err-Proc. + ENTRY "999-Err" + DISPLAY + '** A Runtime Error Has Occurred **' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* + +このルーチンは、一般的な終了処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 + +一度に有効にできるユーザ定義の終了手続きは1つだけである。 + +終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 + +終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoexitproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Exit-Proc. + SET Exit-Proc-Address TO ENTRY "999-Exit" + CALL "CBL_EXIT_PROC" + USING Exit-Proc-Install, Exit-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not register Exit Procedure' + END-IF + 099-Now-Test-Exit-Proc. + DISPLAY + 'Executing a STOP RUN...' + END-DISPLAY + GOBACK + . + 999-Exit-Proc. + ENTRY "999-Exit" + DISPLAY + '*** STOP RUN has been executed ***' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「EQ」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* + +このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 + +このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 + +#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* + +現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 + +第1引数は使用されないが、**BY VALUE**で指定する必要がある。 + +*length*引数は**BY VALUE**で指定する必要がある。 + +*buffer*引数は**BY REFERENCE**で指定する必要がある。 + +*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 + +*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 + +ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 + +#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「IMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 1 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NIMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* + +このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 + +項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOT」プロセスを示している。 + +| 古い引数2ビット | 新しい引数2ビット | +| :---: | :---: | +| 0 | 1 | +| 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* + +CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 + +item-1として次の集団項目を定義する。 + + 01 KEISEN. + 02 KEI-CMD PIC 9(1) COMP-X. + 02 KEI-LINE PIC 9(2) COMP-X. + 02 KEI-COL PIC 9(2) COMP-X. + 02 KEI-LNG1 PIC 9(2) COMP-X. + 02 KEI-LNG2 PIC 9(2) COMP-X. + 02 KEI-COLOR PIC 9(2) COMP-X. + 02 KEI-PRN PIC 9(2) COMP-X. + +各項目の意味を以下に示す。 + +| | | +| --- | --- | +| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| +| KEI-LINE | 開始ライン(1~24) | +| KEI-COL | 開始カラム(1~80) | +| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | +| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | +| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | +| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | + +#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* + +CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 + +*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 + +1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 + +[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 + +#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* + +このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 + +*file-path*引数は、英数字定数またはデータ項目である。 + +*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 + +- 1 = 入力 (読み取り専用) +- 2 = 出力 (書き込み専用) +- 3 = 入力または出力 + +第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 + +最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 + +RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 + +[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 + +#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「OR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 1 | + + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer + +このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 + +*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* + +このサブルーチンを使用してファイル名を変更できる。 + +*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 + +このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 + +ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 + +#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 + +#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 + +#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* + +このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 +唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「XOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.42. CALL “SYSTEM” USING *command* + +このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 + +CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 + +コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 + +Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 + +ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 + +実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 + +--- +`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
+`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
+ diff --git a/automanual/old/9-1.md b/automanual/old/9-1.md new file mode 100644 index 0000000..f30a611 --- /dev/null +++ b/automanual/old/9-1.md @@ -0,0 +1,51 @@ +# 9. サンプルプログラム + +## 9.1. FileStat-Msgs.cpy – ファイル状態コード + +このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 + +コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 + +``` + COPY FileStat-Msgs + REPLACING STATUS BY Input-File-Status + MSG BY Error-Message. +``` + +以下は、コピーブック「FileStat-Msgs.cpy」である。 + +``` + EVALUATE STATUS + WHEN 00 MOVE 'SUCCESS ' TO MSG + WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG + WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG + WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG + WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG + WHEN 10 MOVE 'END OF FILE ' TO MSG + WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG + WHEN 21 MOVE 'KEY INVALID ' TO MSG + WHEN 22 MOVE 'KEY EXISTS ' TO MSG + WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG + WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG + WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG + WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG + WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG + WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG + WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG + WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG + WHEN 41 MOVE 'ALREADY OPEN ' TO MSG + WHEN 42 MOVE 'NOT OPEN ' TO MSG + WHEN 43 MOVE 'READ NOT DONE ' TO MSG + WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG + WHEN 46 MOVE 'READ ERROR ' TO MSG + WHEN 47 MOVE 'INPUT DENIED ' TO MSG + WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG + WHEN 49 MOVE 'I/O DENIED ' TO MSG + WHEN 51 MOVE 'RECORD LOCKED ' TO MSG + WHEN 52 MOVE 'END-OF-PAGE ' TO MSG + WHEN 57 MOVE 'I/O LINAGE ' TO MSG + WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG + WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG + END-EVALUATE. +``` + diff --git a/automanual/old/9-2.md b/automanual/old/9-2.md new file mode 100644 index 0000000..510be72 --- /dev/null +++ b/automanual/old/9-2.md @@ -0,0 +1,198 @@ +## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン + +次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 + +``` +IDENTIFICATION DIVISION. +PROGRAM-ID. COBDUMP. +***************************************************************** +** This is an OpenCOBOL subroutine that will generate a ** +** formatted Hex/Char dump of a storage area. To use this ** +** subroutine, simply CALL it as follows: ** +** ** +** CALL "COBDUMP" USING ** +** [ ] ** +** ** +** If specified, the argument specifies how many ** +** bytes of are to be dumped. If absent, all of ** +** will be dumped (i.e. LENGTH() will ** +** be assumed for ). ** +** ** +** >>> Note that the subroutine name MUST be specified in <<< ** +** >>> UPPERCASE <<< ** +** ** +** The dump is generated to STDERR, so you may pipe it to a ** +** file when you execute your program using "2> file". ** +** ** +** AUTHOR: GARY L. CUTLER ** +** CutlerGL@gmail.c ** +** ** +** NOTE: The author has a sentimental attachment to ** +** this subroutine - it's been around since 1971 ** +** and it's been converted to and run on 10 dif- ** +** ferent operating system/compiler environments ** +** ** +** DATE-WRITTEN: October 14, 1971 ** +** ** +***************************************************************** +** DATE CHANGE DESCRIPTION ** +** ====== ==================================================== ** +** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** +** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** +** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** +** SCREEN SECTION enhancements ** +** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** +** GC0983 Converted to IBM VS COBOL - COBOL '74 ** +** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** +** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** +** extensions ** +** GC0703 Converted to Unisys Universal Compiling System (UCS) ** +** COBOL (UCOB) - COBOL '85 ** +** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** +** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** +** 2002 features ** +** GC0410 Enhanced to make 2nd argument (buffer length) ** +** optional ** +***************************************************************** +ENVIRONMENT DIVISION. +CONFIGURATION SECTION. +REPOSITORY. + FUNCTION ALL INTRINSIC. +DATA DIVISION. +WORKING-STORAGE SECTION. +78 Undisplayable-Char-Symbol VALUE X'F9'. +01 Addr-Pointer USAGE POINTER. +01 Addr-Number REDEFINES Addr-Pointer + USAGE BINARY-LONG. + +01 Addr-Sub USAGE BINARY-CHAR. + +01 Addr-Value USAGE BINARY-LONG. + +01 Buffer-Length USAGE BINARY-LONG. + +01 Buffer-Sub COMP-5 PIC 9(4). + +01 Hex-Digits VALUE '0123456789ABCDEF'. +05 Hex-Digit OCCURS 16 TIMES PIC X(1). + +01 Left-Nibble COMP-5 PIC 9(1). +01 Nibble REDEFINES Left-Nibble + BINARY-CHAR. +01 Output-Detail. +05 OD-Addr. +10 OD-Addr-Hex OCCURS 8 TIMES PIC X. +05 FILLER PIC X(1). +05 OD-Byte PIC Z(3)9. +05 FILLER PIC X(1). +05 OD-Hex OCCURS 16 TIMES. +10 OD-Hex-1 PIC X. +10 OD-Hex-2 PIC X. +10 FILLER PIC X. +05 OD-ASCII OCCURS 16 TIMES + PIC X. +01 Output-Sub COMP-5 PIC 9(2). + +01 Output-Header-1. + 05 FILLER PIC X(80) VALUE + '<-Addr-> Byte ' & + '<---------------- Hexadecimal ----------------> ' & + '<---- Char ---->'. +01 Output-Header-2. + 05 FILLER PIC X(80) VALUE + '======== ==== ' & + '=============================================== ' & + '================'. +01 PIC-XX. +05 FILLER PIC X VALUE LOW-VALUES. +05 PIC-X PIC X. +01 PIC-Halfword REDEFINES PIC-XX + PIC 9(4) COMP-X. +01 PIC-X10. +05 FILLER PIC X(2). +05 PIC-X8 PIC X(8). +01 Right-Nibble COMP-5 PIC 9(1). + +LINKAGE SECTION. +01 Buffer PIC X ANY LENGTH. + +01 Buffer-Len USAGE BINARY-LONG. +PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. +000-COBDUMP. + IF NUMBER-OF-CALL-PARAMETERS = 1 + MOVE LENGTH(Buffer) TO Buffer-Length + ELSE + MOVE Buffer-Len TO Buffer-Length + END-IF + MOVE SPACES TO Output-Detail + SET Addr-Pointer TO ADDRESS OF Buffer + PERFORM 100-Generate-Address + MOVE 0 TO Output-Sub + DISPLAY + Output-Header-1 UPON SYSERR + END-DISPLAY + DISPLAY + Output-Header-2 UPON SYSERR + END-DISPLAY + PERFORM VARYING Buffer-Sub FROM 1 BY 1 + UNTIL Buffer-Sub > Buffer-Length + ADD 1 + TO Output-Sub + END-ADD + IF Output-Sub = 1 + MOVE Buffer-Sub TO OD-Byte + END-IF + MOVE Buffer (Buffer-Sub : 1) TO PIC-X + IF (PIC-X < ' ') + OR (PIC-X > '~') + MOVE Undisplayable-Char-Symbol + TO OD-ASCII (Output-Sub) + ELSE + MOVE PIC-X + TO OD-ASCII (Output-Sub) + END-IF + DIVIDE PIC-Halfword BY 16 + GIVING Left-Nibble + REMAINDER Right-Nibble + END-DIVIDE + ADD 1 TO Left-Nibble + Right-Nibble + END-ADD + MOVE Hex-Digit (Left-Nibble) + TO OD-Hex-1 (Output-Sub) + MOVE Hex-Digit (Right-Nibble) + TO OD-Hex-2 (Output-Sub) + IF Output-Sub = 16 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + MOVE SPACES TO Output-Detail + MOVE 0 TO Output-Sub + SET Addr-Pointer UP BY 16 + PERFORM 100-Generate-Address + END-IF +END-PERFORM +IF Output-Sub > 0 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + END-IF + EXIT PROGRAM + . +100-Generate-Address. + MOVE 8 TO Addr-Sub + MOVE Addr-Number TO Addr-Value + MOVE ALL '0' TO OD-Addr + PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 + DIVIDE Addr-Value BY 16 + GIVING Addr-Value + REMAINDER Nibble + END-DIVIDE + ADD 1 TO Nibble + MOVE Hex-Digit (Nibble) + TO OD-Addr-Hex (Addr-Sub) + SUBTRACT 1 FROM Addr-Sub +END-PERFORM +. +``` + diff --git a/automanual/old/TOC.md b/automanual/old/TOC.md new file mode 100644 index 0000000..0d4219d --- /dev/null +++ b/automanual/old/TOC.md @@ -0,0 +1,234 @@ +目次 +1. [まえがき](1-1.md) + - [1.1. opensource COBOL とは](1-1.md#11-opensource-cobolとは) + - [1.2. COBOL/opensource COBOL の重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) + - [1.2.1. COBOL プログラムの構文](1-2-1.md#121-cobolプログラムの構文) + - [1.2.2. コピーブック](1-2-2.md) + - [1.2.3. 構造化データ](1-2-3.md) + - [1.2.4. ファイル](1-2-4.md) + - [1.2.5. 表操作](1-2-5.md) + - [1.2.6. データの並び替えと結合](1-2-6.md) + - [1.2.7. 文字列操作](1-2-7.md) + - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) + - [1.3. 構文規則](1-3.md) + - [1.4. ソースコードの形式](1-4.md) + - [1.5. カンマ/セミコロンの使い方](1-5.md) + - [1.6. COPY 文の使い方](1-6.md) + - [1.7. 定数の使い方](1-7-1.md) + - [1.7.1. 数字定数](1-7-1.md#171-数字定数) + - [1.7.2. 英数字定数](1-7-2.md) + - [1.7.3. 日本語定数](1-7-3.md) + - [1.8. 表意定数の使い方](1-8.md) + - [1.9. ユーザ定義名](1-9.md) + - [1.10. LENGTH OF の使い方](1-10.md) +2. [opensource COBOL のプログラム形式](2-1.md) + - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) + - [2.2. ネストされたユーザ定義関数](2-2.md) +3. [見出し部](3.md) +4. [環境部](4-1-1.md) + - [4.1. 構成節](4-1-1.md#41-構成節) + - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) + - [4.1.2. 実行用計算機段落](4-1-2.md) + - [4.1.3. リポジトリ段落](4-1-3.md) + - [4.1.4. 特殊名段落](4-1-4.md) + - [4.2. 入出力節](4-2-1-1.md) + - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) + - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) + - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) + - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) + - [4.2.2. 入出力管理段落](4-2-2.md) +5. [データ部](5-1.md) + - [5.1. ファイル記述](5-1.md#51-ファイル記述) + - [5.2. 整列用記述](5-2.md) + - [5.3. データ記述の形式](5-3.md) + - [5.4. 条件名](5-4.md) + - [5.5. 定数記述](5-5.md) + - [5.6. 画面記述](5-6.md) +6. [手続き部](6-1-1.md) + - [6.1. 構成要素](6-1-1.md#61-構成要素) + - [6.1.1. 表の参照](6-1-1.md#611-表の参照) + - [6.1.2. データ名の修飾](6-1-2.md) + - [6.1.3. 部分参照](6-1-3.md) + - [6.1.4. 式](6-1-4-1.md) + - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) + - [6.1.4.2. 条件式](6-1-4-2.md) + - [6.1.5. ピリオド(.)](6-1-5.md) + - [6.1.6. 動詞/END-動詞](6-1-6.md) + - [6.1.7. 特殊レジスタ](6-1-7.md) + - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) + - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) + - [6.1.8.2. レコードロック](6-1-8-2.md) + - [6.2. 記述形式](6-2.md) + - [6.3. 宣言の記述形式](6-3.md) + - [6.4. ACCEPT](6-4-1.md) + - [6.4.1. ACCEPT 文の書き方 1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) + - [6.4.2. ACCEPT 文の書き方 2 ― コマンドライン引数の取得](6-4-2.md) + - [6.4.3. ACCEPT 文の書き方 3 ― 環境変数値の取得](6-4-3.md) + - [6.4.4. ACCEPT 文の書き方 4 ― 画面データの取得](6-4-4.md) + - [6.4.5. ACCEPT 文の書き方 5 ― 日付/時刻の取得](6-4-5.md) + - [6.4.6. ACCEPT 文の書き方 6 ― 画面サイズデータの取得](6-4-6.md) + - [6.4.7. ACCEPT 文の例外処理](6-4-7.md) + - [6.5. ADD](6-5-1.md) + - [6.5.1. ADD 文の書き方 1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) + - [6.5.2. ADD 文の書き方 2 ― ADD GIVING](6-5-2.md) + - [6.5.3. ADD 文の書き方 3 ― ADD CORRESPONDING](6-5-3.md) + - [6.6. ALLOCATE](6-6.md) + - [6.7. CALL](6-7.md) + - [6.8. CANCEL](6-8-1.md) + - [6.8.1. CANCEL 文の書き方 1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) + - [6.8.2. CANCEL 文の書き方 2 ― CANCEL ALL](6-8-2.md) + - [6.9. CLOSE](6-9.md) + - [6.10. COMMIT](6-10.md) + - [6.11. COMPUTE](6-11.md) + - [6.12. CONTINUE](6-12.md) + - [6.13. DELETE](6-13-1.md) + - [6.13.1. DELETE 文の書き方 1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) + - [6.13.2. DELETE 文の書き方 2 ― DELETE FILE](6-13-2.md) + - [6.14. DISPLAY](6-14-1.md) + - [6.14.1. DISPLAY 文の書き方 1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) + - [6.14.2. DISPLAY 文の書き方 2 ― コマンドライン引数へのアクセス](6-14-2.md) + - [6.14.3. DISPLAY 文の書き方 3 ― 環境変数へのアクセスまたは設定](6-14-3.md) + - [6.14.4. DISPLAY 文の書き方 4 ― 画面データ](6-14-4.md) + - [6.14.5. DISPLAY 文の例外処理](6-14-5.md) + - [6.15. DIVIDE](6-15-1.md) + - [6.15.1. DIVIDE 文の書き方 1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) + - [6.15.2. DIVIDE 文の書き方 2 ― DIVIDE INTO GIVING](6-15-2.md) + - [6.15.3. DIVIDE 文の書き方 3 ― DIVIDE BY GIVING](6-15-3.md) + - [6.15.4. DIVIDE 文の書き方 4 ― DIVIDE INTO REMAINDER](6-15-4.md) + - [6.15.5. DIVIDE 文の書き方 5 ― DIVIDE BY REMAINDER](6-15-5.md) + - [6.16. ENTRY](6-16.md) + - [6.17. EVALUATE](6-17.md) + - [6.18. EXIT](6-18.md) + - [6.19. FREE](6-19.md) + - [6.20. GENERATE](6-20.md) + - [6.21. GOBACK](6-21.md) + - [6.22. GO TO](6-22-1.md) + - [6.22.1. GO TO 文の書き方 1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) + - [6.22.2. GO TO 文の書き方 2 ― GO TO DEPENDING ON](6-22-2.md) + - [6.23. IF](6-23.md) + - [6.24. INITIALIZE](6-24.md) + - [6.25. INITIATE](6-25.md) + - [6.26. INSPECT](6-26.md) + - [6.27. MERGE](6-27.md) + - [6.28. MOVE](6-28-1.md) + - [6.28.1. MOVE 文の書き方 1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) + - [6.28.2. MOVE 文の書き方 2 ― MOVE CORRESPONDING](6-28-2.md) + - [6.29. MULTIPLY](6-29-1.md) + - [6.29.1. MULTIPLY 文の書き方 1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) + - [6.29.2. MULTIPLY 文の書き方 2 ― MULTIPLY GIVING](6-29-2.md) + - [6.30. NEXT SENTENCE](6-30.md) + - [6.31. OPEN](6-31.md) + - [6.32. PERFORM](6-32-1.md) + - [6.32.1. PERFORM 文の書き方 1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) + - [6.32.2. PERFORM 文の書き方 2 ― インライン型](6-32-2.md) + - [6.33. READ](6-33-1.md) + - [6.33.1. READ 文の書き方 1 ―順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) + - [6.33.2. READ 文の書き方 2 ― ランダム読み取り](6-33-2.md) + - [6.34. RELEASE](6-34.md) + - [6.35. RETURN](6-35.md) + - [6.36. REWRITE](6-36.md) + - [6.37. ROLLBACK](6-37.md) + - [6.38. SEARCH](6-38-1.md) + - [6.38.1. SEARCH 文の書き方 1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) + - [6.38.2. SEARCH 文の書き方 2 ― 二分探索(SEARCH ALL)](6-38-2.md) + - [6.39. SET](6-39-1.md) + - [6.39.1. SET 文の書き方 1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) + - [6.39.2. SET 文の書き方 2 ― プログラムポインター設定](6-39-2.md) + - [6.39.3. SET 文の書き方 3 ― アドレス設定](6-39-3.md) + - [6.39.4. SET 文の書き方 4 ― インデックス設定](6-39-4.md) + - [6.39.5. SET 文の書き方 5 ― UP/DOWN 設定](6-39-5.md) + - [6.39.6. SET 文の書き方 6 ― 条件名設定](6-39-6.md) + - [6.39.7. SET 文の書き方 7 ― スイッチ設定](6-39-7.md) + - [6.40. SORT](6-40-1.md) + - [6.40.1. SORT 文の書き方 1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) + - [6.40.2. SORT 文の書き方 2 ― テーブルソート](6-40-2.md) + - [6.41. START](6-41.md) + - [6.42. STOP](6-42.md) + - [6.43. STRING](6-43.md) + - [6.44. SUBTRACT](6-44-1.md) + - [6.44.1. SUBTRACT 文の書き方 1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) + - [6.44.2. SUBTRACT 文の書き方 2 ― SUBTRACT GIVING](6-44-2.md) + - [6.44.3. SUBTRACT 文の書き方 3 ― SUBTRACT CORRESPONDING](6-44-3.md) + - [6.45. SUPPRESS](6-45.md) + - [6.46. TERMINATE](6-46.md) + - [6.47. TRANSFORM](6-47.md) + - [6.48. UNLOCK](6-48.md) + - [6.49. UNSTRING](6-49.md) + - [6.50. WRITE](6-50.md) +7. [日本語の使用](7-1.md) + - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) + - [7.2. 日本語項目と表意定数](7-2.md) + - [7.3. 各命令文と日本語の取扱い](7-3-1.md) + - [7.3.1. MOVE 文](7-3-1.md#731-move文) + - [7.3.2. ACCEPT/DISPLAY 文](7-3-2.md) + - [7.4. UTF-8 の使用](7-4.md) +8. [opensource COBOL システムインターフェース](8-1-1.md) + - [8.1. opensource COBOL コンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) + - [8.1.1. 解説](8-1-1.md#811-解説) + - [8.1.2. コンパイルオプション](8-1-2.md) + - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) + - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) + - [8.1.5. 静的サブルーチン](8-1-5.md) + - [8.1.6. COBOL と C ブログラムの結合](8-1-6.md) + - [8.1.6.1. opensource COBOL ランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) + - [8.1.6.2. opensource COBOL と C の文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) + - [8.1.6.3. C データ型と opensource COBOL USAGE 句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) + - [8.1.6.4. opensource COBOL メインプログラムの C サブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) + - [8.1.6.5. C メインプログラムの opensource COBOL サブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) + - [8.1.7. 重要な環境変数](8-1-7.md) + - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) + - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) + - [8.2. opensource COBOL プログラムの実行](8-2-1.md) + - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) + - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) + - [8.2.3. プログラムの引数](8-2-3.md) + - [8.2.4. 重要な環境変数](8-2-4.md) + - [8.3. 組み込みサブルーチン](8-3-1.md) + - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) + - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) + - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) + - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) + - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) + - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) + - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) + - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) + - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) + - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) + - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) + - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) + - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) + - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) + - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) + - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) + - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) + - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) + - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) + - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) + - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) + - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) + - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) + - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) + - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) + - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) + - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) + - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) + - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) + - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) + - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) + - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) + - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) + - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) + - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) + - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) + - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) + - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) + - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) +9. [サンプルプログラム](9-1.md) + - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) + - [9.2. COBDUMP –16 進数/文字データダンプサブルーチン](9-2.md) + +[クレジット](credit.md) diff --git a/automanual/old/credit.md b/automanual/old/credit.md new file mode 100644 index 0000000..f37ce77 --- /dev/null +++ b/automanual/old/credit.md @@ -0,0 +1,29 @@ +
+opensource COBOL Programmer's Guide + +【制作】
+OSSコンソーシアム オープンCOBOLソリューション部会 + +【原著】
+Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") + +【翻訳・執筆】
+東京システムハウス株式会社 島田桃花 + +【マークダウン化】
+東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 + +【監修】
+東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
+株式会社SIT11 飯島裕一 + +【協力】(50音順)
+OVOL ICTソリューションズ株式会社
+株式会社SIT11
+株式会社CIJ
+サン情報サービス株式会社
+ +【発行】
+OSSコンソーシアム オープンCOBOLソリューション部会
+URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) + diff --git a/automanual/old/list.txt b/automanual/old/list.txt new file mode 100644 index 0000000..49662ee --- /dev/null +++ b/automanual/old/list.txt @@ -0,0 +1,153 @@ +1-1.md +1-10.md +1-2-1.md +1-2-2.md +1-2-3.md +1-2-4.md +1-2-5.md +1-2-6.md +1-2-7.md +1-2-8.md +1-3.md +1-4.md +1-5.md +1-6.md +1-7-1.md +1-7-2.md +1-7-3.md +1-8.md +1-9.md +2-1.md +2-2.md +3.md +4-1-1.md +4-1-2.md +4-1-3.md +4-1-4.md +4-2-1-1.md +4-2-1-2.md +4-2-1-3.md +4-2-2.md +5-1.md +5-2.md +5-3.md +5-4.md +5-5.md +5-6.md +6-1-1.md +6-1-2.md +6-1-3.md +6-1-4-1.md +6-1-4-2.md +6-1-5.md +6-1-6.md +6-1-7.md +6-1-8-1.md +6-1-8-2.md +6-10.md +6-11.md +6-12.md +6-13-1.md +6-13-2.md +6-14-1.md +6-14-2.md +6-14-3.md +6-14-4.md +6-14-5.md +6-15-1.md +6-15-2.md +6-15-3.md +6-15-4.md +6-15-5.md +6-16.md +6-17.md +6-18.md +6-19.md +6-2.md +6-20.md +6-21.md +6-22-1.md +6-22-2.md +6-23.md +6-24.md +6-25.md +6-26.md +6-27.md +6-28-1.md +6-28-2.md +6-29-1.md +6-29-2.md +6-3.md +6-30.md +6-31.md +6-32-1.md +6-32-2.md +6-33-1.md +6-33-2.md +6-34.md +6-35.md +6-36.md +6-37.md +6-38-1.md +6-38-2.md +6-39-1.md +6-39-2.md +6-39-3.md +6-39-4.md +6-39-5.md +6-39-6.md +6-39-7.md +6-4-1.md +6-4-2.md +6-4-3.md +6-4-4.md +6-4-5.md +6-4-6.md +6-4-7.md +6-40-1.md +6-40-2.md +6-41.md +6-42.md +6-43.md +6-44-1.md +6-44-2.md +6-44-3.md +6-45.md +6-46.md +6-47.md +6-48.md +6-49.md +6-5-1.md +6-5-2.md +6-5-3.md +6-50.md +6-6.md +6-7.md +6-8-1.md +6-8-2.md +6-9.md +7-1.md +7-2.md +7-3-1.md +7-3-2.md +7-4.md +8-1-1.md +8-1-2.md +8-1-3.md +8-1-4.md +8-1-5.md +8-1-6.md +8-1-7.md +8-1-8.md +8-1-9.md +8-2-1.md +8-2-2.md +8-2-3.md +8-2-4.md +8-3-1.md +9-1.md +9-2.md +Image +TOC.md +list.txt +markdown.code-workspace diff --git a/automanual/old/markdown.code-workspace b/automanual/old/markdown.code-workspace new file mode 100644 index 0000000..3534be5 --- /dev/null +++ b/automanual/old/markdown.code-workspace @@ -0,0 +1,16 @@ +{ + "folders": [ + { + "path": ".." + } + ], + "settings": { + "coboleditor.metadata_symbols": [], + "coboleditor.metadata_entrypoints": [], + "coboleditor.metadata_types": [], + "coboleditor.metadata_files": [ + "1722229028318,automanual/AUTOMANUAL.cbl" + ], + "coboleditor.metadata_knowncopybooks": [] + } +} diff --git a/automanual/old/opensourcecobol.png b/automanual/old/opensourcecobol.png new file mode 100644 index 0000000000000000000000000000000000000000..7c6c27935e3079456288165d1a83dba642334562 GIT binary patch literal 92095 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%0D)*m`88|J!VT; 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 Ht%Cm#WnP9J literal 0 HcmV?d00001 diff --git a/automanual/old_delete/1-1.md b/automanual/old_delete/1-1.md new file mode 100644 index 0000000..177417c --- /dev/null +++ b/automanual/old_delete/1-1.md @@ -0,0 +1,22 @@ + +前へ/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-1.md) + +# 1. まえがき + +## 1.1. opensource COBOLとは + +このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 + +opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 + +opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 + +Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 + +--- +`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 + + + +[ページトップへ](1-1.md) + diff --git a/automanual/old_delete/1-10.md b/automanual/old_delete/1-10.md new file mode 100644 index 0000000..9fbf74f --- /dev/null +++ b/automanual/old_delete/1-10.md @@ -0,0 +1,27 @@ + +[前へ](1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-1.md) + +## 1.10. LENGTH OFの使い方 + +オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 + +``` +01 Demo-Identifier PIC X(27). *> This is a 27-character data-item +. +. +. +DISPLAY LENGTH OF “This is a LENGTH OF Example” +DISPLAY LENGTH OF Demo-Identifier +DISPLAY 27 +``` + +定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 + +1. DISPLAY文の定数の代わりとして +2. WRITE文またはRELEASE文のFROM句の一部として +3. PERFORM文のTIMES句の一部として + + + +[ページトップへ](1-10.md) + diff --git a/automanual/old_delete/1-2-1.md b/automanual/old_delete/1-2-1.md new file mode 100644 index 0000000..39fd86a --- /dev/null +++ b/automanual/old_delete/1-2-1.md @@ -0,0 +1,19 @@ + +[前へ](1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-2.md) + +## 1.2. COBOL/opensource COBOLの重要機能 + +### 1.2.1. COBOLプログラムの構文 + +COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 + +部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 + +このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 + +4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 + + + +[ページトップへ](1-2-1.md) + diff --git a/automanual/old_delete/1-2-2.md b/automanual/old_delete/1-2-2.md new file mode 100644 index 0000000..c0fb905 --- /dev/null +++ b/automanual/old_delete/1-2-2.md @@ -0,0 +1,13 @@ + +[前へ](1-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-3.md) + +### 1.2.2. コピーブック + +「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 + +現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 + + + +[ページトップへ](1-2-2.md) + diff --git a/automanual/old_delete/1-2-3.md b/automanual/old_delete/1-2-3.md new file mode 100644 index 0000000..814d049 --- /dev/null +++ b/automanual/old_delete/1-2-3.md @@ -0,0 +1,11 @@ + +[前へ](1-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-4.md) + +### 1.2.3. 構造化データ + +COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 + + + +[ページトップへ](1-2-3.md) + diff --git a/automanual/old_delete/1-2-4.md b/automanual/old_delete/1-2-4.md new file mode 100644 index 0000000..03fc837 --- /dev/null +++ b/automanual/old_delete/1-2-4.md @@ -0,0 +1,22 @@ + +[前へ](1-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-5.md) + +### 1.2.4. ファイル + +COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 + +||| +|:---|:---| +|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| +ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![alt text](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![alt text](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| +ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| + +すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 + +データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 + + + +[ページトップへ](1-2-4.md) + diff --git a/automanual/old_delete/1-2-5.md b/automanual/old_delete/1-2-5.md new file mode 100644 index 0000000..9fd16ba --- /dev/null +++ b/automanual/old_delete/1-2-5.md @@ -0,0 +1,15 @@ + +[前へ](1-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-6.md) + +### 1.2.5. 表操作 + +他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 + +1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 + +2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 + + + +[ページトップへ](1-2-5.md) + diff --git a/automanual/old_delete/1-2-6.md b/automanual/old_delete/1-2-6.md new file mode 100644 index 0000000..3553fa9 --- /dev/null +++ b/automanual/old_delete/1-2-6.md @@ -0,0 +1,15 @@ + +[前へ](1-2-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-7.md) + +### 1.2.6. データの並び替えと結合 + +COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 + +表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 + +同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 + + + +[ページトップへ](1-2-6.md) + diff --git a/automanual/old_delete/1-2-7.md b/automanual/old_delete/1-2-7.md new file mode 100644 index 0000000..5ce1599 --- /dev/null +++ b/automanual/old_delete/1-2-7.md @@ -0,0 +1,32 @@ + +[前へ](1-2-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-8.md) + +### 1.2.7. 文字列操作 + +テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 + +| 機能 | サポートするopensource COBOL機能 | +| :--- | :--- | +|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | +| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | +| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | +| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | +| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | +| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | +| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | +| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | +| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| +| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | +| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | +| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | +| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | +| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | + + + +[ページトップへ](1-2-7.md) + diff --git a/automanual/old_delete/1-2-8.md b/automanual/old_delete/1-2-8.md new file mode 100644 index 0000000..339ef40 --- /dev/null +++ b/automanual/old_delete/1-2-8.md @@ -0,0 +1,25 @@ + +[前へ](1-2-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-3.md) + +### 1.2.8. テキストユーザインターフェース(TUI)機能 + +COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 + +以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 + +図1-1-TUIサンプル画面 + +![alt text](Image/1-1.png) + +このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 + +COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 + +--- + +`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 + + + +[ページトップへ](1-2-8.md) + diff --git a/automanual/old_delete/1-3.md b/automanual/old_delete/1-3.md new file mode 100644 index 0000000..5a178bd --- /dev/null +++ b/automanual/old_delete/1-3.md @@ -0,0 +1,23 @@ + +[前へ](1-2-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-4.md) + +## 1.3. 構文規則 + +opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 + +| | | +| :--- | :--- | +| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | +| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | +| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | +| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | +| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | +| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | +| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | +| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | +| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | + + + +[ページトップへ](1-3.md) + diff --git a/automanual/old_delete/1-4.md b/automanual/old_delete/1-4.md new file mode 100644 index 0000000..e6c4231 --- /dev/null +++ b/automanual/old_delete/1-4.md @@ -0,0 +1,33 @@ + +[前へ](1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-5.md) + +## 1.4. ソースコードの形式 + +従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 + +opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 + +| | | +| :--- | :--- | +| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | +| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | +| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | +| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | + +以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 + +| | | +| :--- | :--- | +| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | +| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | +| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | +| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | +| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | +| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | +| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | + + + +[ページトップへ](1-4.md) + diff --git a/automanual/old_delete/1-5.md b/automanual/old_delete/1-5.md new file mode 100644 index 0000000..72bb38f --- /dev/null +++ b/automanual/old_delete/1-5.md @@ -0,0 +1,19 @@ + +[前へ](1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-6.md) + +## 1.5. カンマ/セミコロンの使い方 + +空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 + +次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: + + CALL “SUBROUTINE” USING 1,2 + +DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 + +句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 + + + +[ページトップへ](1-5.md) + diff --git a/automanual/old_delete/1-6.md b/automanual/old_delete/1-6.md new file mode 100644 index 0000000..7a1d503 --- /dev/null +++ b/automanual/old_delete/1-6.md @@ -0,0 +1,37 @@ + +[前へ](1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-1.md) + +## 1.6. COPY文の使い方 + +図1-2-COPY構文 + +![alt text](Image/1-2.png) + +COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 + +1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 + +2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 + +3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 + +4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 + +5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 + +6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 + +7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 + +8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 + +9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 + +10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 + +11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 + + + +[ページトップへ](1-6.md) + diff --git a/automanual/old_delete/1-7-1.md b/automanual/old_delete/1-7-1.md new file mode 100644 index 0000000..8c7bbdc --- /dev/null +++ b/automanual/old_delete/1-7-1.md @@ -0,0 +1,19 @@ + +[前へ](1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-2.md) + +## 1.7. 定数の使い方 + +定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 +### 1.7.1. 数字定数 +数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 + +- 1、56、2192、-54などの整数。 + +- 1.12や-2.95などの整数でない固定小数点値。 + +- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 + + + +[ページトップへ](1-7-1.md) + diff --git a/automanual/old_delete/1-7-2.md b/automanual/old_delete/1-7-2.md new file mode 100644 index 0000000..ef9e233 --- /dev/null +++ b/automanual/old_delete/1-7-2.md @@ -0,0 +1,41 @@ + +[前へ](1-7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-3.md) + +### 1.7.2. 英数字定数 + +英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 + +英数字定数は、次の形式のいずれかを取ることができる。 + +- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 + +- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + +英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 + +- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 + + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l + – “iteral that must + – “be continued.” + + +- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

+ + 1 2 3 4 5 6 7 8 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & + “ long literal that must ” & + “ be continued.” + + +プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 + +数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 + + + +[ページトップへ](1-7-2.md) + diff --git a/automanual/old_delete/1-7-3.md b/automanual/old_delete/1-7-3.md new file mode 100644 index 0000000..02397ed --- /dev/null +++ b/automanual/old_delete/1-7-3.md @@ -0,0 +1,13 @@ + +[前へ](1-7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-8.md) + +### 1.7.3. 日本語定数 + +- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 + +- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 + + + +[ページトップへ](1-7-3.md) + diff --git a/automanual/old_delete/1-8.md b/automanual/old_delete/1-8.md new file mode 100644 index 0000000..d1d1cba --- /dev/null +++ b/automanual/old_delete/1-8.md @@ -0,0 +1,24 @@ + +[前へ](1-7-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-9.md) + +## 1.8. 表意定数の使い方 + +表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 + +次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 + +表1-3-表意定数 + +| 表意定数 | 定数型 | 値 | +| :--- | :-------- | :--- | +| ZERO, ZEROS, ZEROES | 数字 | 0 | +| SPACE, SPACES | 英数字 | 空白 | +| QUOTE, QUOTES | 英数字 | 二重引用符 | +| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | +| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | +| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | + + + +[ページトップへ](1-8.md) + diff --git a/automanual/old_delete/1-9.md b/automanual/old_delete/1-9.md new file mode 100644 index 0000000..6d2af32 --- /dev/null +++ b/automanual/old_delete/1-9.md @@ -0,0 +1,15 @@ + +[前へ](1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-10.md) + +## 1.9. ユーザ定義名 + +opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 + +ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 + +プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 + + + +[ページトップへ](1-9.md) + diff --git a/automanual/old_delete/2-1.md b/automanual/old_delete/2-1.md new file mode 100644 index 0000000..dc39ca5 --- /dev/null +++ b/automanual/old_delete/2-1.md @@ -0,0 +1,46 @@ + +[前へ](1-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-2.md) + +# 2. opensource COBOLのプログラム形式 + +図2-1-opensource COBOLのプログラム形式 + +![alt text](Image/2-1.png) + +COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 + +すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 + +1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 + +2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 + +3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 + +4. 各区分の目的の概要は次の通りである: + +| 区分 | 目的 | +| :--- | :--- | +| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | +| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | +| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | +| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | + +## 2.1. ネストされたユーザプログラム + +図2-2-ネストされたユーザプログラム + +![alt text](Image/2-2.png) + +ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 + +1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 + +--- + +`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 + + + +[ページトップへ](2-1.md) + diff --git a/automanual/old_delete/2-2.md b/automanual/old_delete/2-2.md new file mode 100644 index 0000000..b7103aa --- /dev/null +++ b/automanual/old_delete/2-2.md @@ -0,0 +1,19 @@ + +[前へ](2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](3.md) + +## 2.2. ネストされたユーザ定義関数 + +図2-3-ネストされたユーザ定義関数 + +![alt text](Image/2-3.png) + +ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 + +1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 + + name:line: Error: FUNCTION-ID is not yet implemented + + + +[ページトップへ](2-2.md) + diff --git a/automanual/old_delete/3.md b/automanual/old_delete/3.md new file mode 100644 index 0000000..b7d9c30 --- /dev/null +++ b/automanual/old_delete/3.md @@ -0,0 +1,28 @@ + +[前へ](2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-1.md) + +# 3. 見出し部 + +図3-1-見出し部構文 + +![alt text](Image/3-1.png) + +プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 +1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 + +2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 + +3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 + +4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 + +5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 + +6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 + +7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 + + + +[ページトップへ](3.md) + diff --git a/automanual/old_delete/4-1-1.md b/automanual/old_delete/4-1-1.md new file mode 100644 index 0000000..b062d87 --- /dev/null +++ b/automanual/old_delete/4-1-1.md @@ -0,0 +1,41 @@ + +[前へ](3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-2.md) + +# 4. 環境部 + +図4-1-環境部構文 + +![alt text](Image/4-1.png) + +プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 + +1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 + +## 4.1. 構成節 + +図4-2-構成節構文 + +![alt text](Image/4-2.png) + +プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 + +1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 + +### 4.1.1. 翻訳用計算機段落 + +図4-3-翻訳用計算機段落構文 + +![alt text](Image/4-3.png) + +翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 + +1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 + +3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 + + + +[ページトップへ](4-1-1.md) + diff --git a/automanual/old_delete/4-1-2.md b/automanual/old_delete/4-1-2.md new file mode 100644 index 0000000..397798c --- /dev/null +++ b/automanual/old_delete/4-1-2.md @@ -0,0 +1,23 @@ + +[前へ](4-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-3.md) + +### 4.1.2. 実行用計算機段落 + +図4-4-実行用計算機段落構文 + +![alt text](Image/4-4.png) + +実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 + +1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 + +2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 + +3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 + +4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 + + + +[ページトップへ](4-1-2.md) + diff --git a/automanual/old_delete/4-1-3.md b/automanual/old_delete/4-1-3.md new file mode 100644 index 0000000..189f987 --- /dev/null +++ b/automanual/old_delete/4-1-3.md @@ -0,0 +1,19 @@ + +[前へ](4-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-4.md) + +### 4.1.3. リポジトリ段落 + +図4-5-リポジトリ段落構文 + +![alt text](Image/4-5.png) + +リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 + +1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 + +2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 + + + +[ページトップへ](4-1-3.md) + diff --git a/automanual/old_delete/4-1-4.md b/automanual/old_delete/4-1-4.md new file mode 100644 index 0000000..7177131 --- /dev/null +++ b/automanual/old_delete/4-1-4.md @@ -0,0 +1,114 @@ + +[前へ](4-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-1.md) + +### 4.1.4. 特殊名段落 + +図4-6-特殊名段落構文 + +![alt text](Image/4-6-1.png) +![alt text](Image/4-6-2.png) + +特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定の呼び名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 + +つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 + +1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 + +2. IS 呼び名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 + +3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 + +4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 + +5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 + + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ + + このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 + + LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: + + 表4-7-局所名 + + | | | | | | + | :---: | :---: | :---: | :---: | :---: | + | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | + | am_ET | el_GR | fil_PH | lv_LV | sma_SE | + | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | + | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | + | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | + | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | + | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | + | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | + | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | + | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | + | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | + | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | + | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | + | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | + | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | + | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | + | ar_TN | en_ZA | he_IL | nn_NO | te_IN | + | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | + | arn_CL | es_AR | hr_BA | oc_FR | th_TH | + | as_IN | es_BO | hr_HR | or_IN | tk_TM | + | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | + | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | + | ba_R | es_CR | id_ID | ps_AF | tr_IN | + | be_BY | es_DO | ig_NG | pt_BR | tr_TR | + | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | + | bn_IN | es_ES | is_IS | qut_GT | ug_CN | + | bo_BT | es_GT | it_CH | quz_BO | uk_UA | + | bo_CN | es_HN | it_IT | quz_EC | ur_PK | + | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | + | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | + | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | + | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | + | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | + | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | + | da_DK | es_SV | kl_GL | sah_RU | yo_NG | + | de_AT | es_US | kn_IN | se_FI | zh_CN | + | de_CH | es_UY | ko_KR | se_NO | zh_HK | + | de_DE | es_VE | kok_IN | se_SE | zh_MO | + | de_LI | et_EE | ky_KG | si_LK | zh_SG | + | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | + | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | + + +7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 + +8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 + +9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 + + 表4-8-ACCEPT画面ステータスコード + + | コード | 意味 | + | :--- | :--- | + | 0000 | ENTERキー押下 | + | 1001 - 1064| F1 — F64 | + | 2001, 2002 | PgUP, PgDn4 | + | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | + | 2005 | Esc6 | + | 8000 | ACCEPT画面に利用できるデータがない | + | 9000 | 致命的なI/O画面エラー | + + +10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 + +11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 + +--- + +`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 + +`5` Windowsシステムでは検出できない。 + +`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) + + + +[ページトップへ](4-1-4.md) + diff --git a/automanual/old_delete/4-2-1-1.md b/automanual/old_delete/4-2-1-1.md new file mode 100644 index 0000000..cd9d628 --- /dev/null +++ b/automanual/old_delete/4-2-1-1.md @@ -0,0 +1,112 @@ + +[前へ](4-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-2.md) + +## 4.2. 入出力節 + +図4-9-入出力節構文 + +![alt text](Image/4-9.png) + +入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 + +1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + +### 4.2.1. ファイル管理段落 + +図4-10-ファイル管理段落構文 + +![alt text](Image/4-10.png) + +ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 + +1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 + +2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 + +3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 + + SELECT My-File ASSIGN TO DISK DISPLAY. + + 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 + + SELECT My-File ASSIGN TO DISPLAY. + + +4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 + + - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 + + - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 + + この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 + + 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 + + 表4-11-ステータスコード + + |ステータス値 | 意味 | + | :---: | :--- | + |00 | 成功| + |02 | 成功(重複レコードキーが検出された)| + |05 | 成功(オプションファイルが存在しない)| + |07 | 成功(ユニットが存在しない)| + |10 |ファイル終了| + |14 |キー範囲外| + |21 |キーが無効である| + |22 |キーの値の重複が検出された| + |23 |キーが存在しない| + |30 |永続的入出力エラー| + |31 |ファイル名に一貫性がない| + |34 |ファイル区域外である| + |35 |ファイルが存在しない| + |37 |アクセス権拒否| + |38 |ファイルがロックで閉じられている| + |39 |属性の矛盾が検出された| + |41 |ファイルが既に開かれている| + |42 |ファイルが開かれていない| + |43 |読み込みが行われていない| + |44 |レコードのオーバーフロー| + |46 |読み込みエラー| + |47 |OPEN INPUTが拒否された| + |48 |OPEN OUTPUTが拒否された| + |49 |OPEN I/Oが拒否された| + |51 |レコードがロックされている| + |52 |ページ終了| + |57 |LINAGE指定が無効である| + |61 |ファイル共有の失敗| + |91 |ファイルが利用できない| + +5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 + +#### 4.2.1.1. 順編成ファイル + +図4-12-順編成ファイルの指定 + +![alt text](Image/4-12.png) + +SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 + +1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 + +2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 + +3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 + +4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 + +5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 + +6. 固定長と可変長、両方のレコード形式がサポートされている。 + +7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 + +8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + + + +[ページトップへ](4-2-1-1.md) + diff --git a/automanual/old_delete/4-2-1-2.md b/automanual/old_delete/4-2-1-2.md new file mode 100644 index 0000000..3f09624 --- /dev/null +++ b/automanual/old_delete/4-2-1-2.md @@ -0,0 +1,29 @@ + +[前へ](4-2-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-3.md) + +#### 4.2.1.2. 相対編成ファイル + +図4-13-相対編成ファイルの指定 + +![alt text](Image/4-13.png) + +RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 + +1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 + +2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 + +3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 + +4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 + +7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + + + +[ページトップへ](4-2-1-2.md) + diff --git a/automanual/old_delete/4-2-1-3.md b/automanual/old_delete/4-2-1-3.md new file mode 100644 index 0000000..717af3b --- /dev/null +++ b/automanual/old_delete/4-2-1-3.md @@ -0,0 +1,31 @@ + +[前へ](4-2-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-2.md) + +#### 4.2.1.3. 索引編成ファイル + +図4-14-索引編成ファイルの指定 + +![alt text](Image/4-14.png) + +RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 + +例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 + +1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 + +2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 + +3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 + +4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 + +5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 + +6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 + +7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 + + + +[ページトップへ](4-2-1-3.md) + diff --git a/automanual/old_delete/4-2-2.md b/automanual/old_delete/4-2-2.md new file mode 100644 index 0000000..7e472e5 --- /dev/null +++ b/automanual/old_delete/4-2-2.md @@ -0,0 +1,22 @@ + +[前へ](4-2-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-1.md) + +### 4.2.2. 入出力管理段落 + +図4-15-入出力管理段落構文 + +![alt text](Image/4-15.png) + + +入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 + +1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 + +2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 + +3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 + + + +[ページトップへ](4-2-2.md) + diff --git a/automanual/old_delete/5-1.md b/automanual/old_delete/5-1.md new file mode 100644 index 0000000..d092f38 --- /dev/null +++ b/automanual/old_delete/5-1.md @@ -0,0 +1,57 @@ + +[前へ](4-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-2.md) + +# 5. データ部 + +図5-1-データ部の形式 + +![alt text](Image/5-1.png) + +データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 + +1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 + +2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) + +3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 + +4. 局所場所はネストされたプログラムでは使用できない。 + +5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 + +6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 + +## 5.1. ファイル記述 + +図5-2-ファイル記述構文 + +![alt text](Image/5-2.png) + +プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 + +1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 + +2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 + +3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 + +4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 + +5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 + +6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 + +7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 + + 図5-3-LINAGE句指定ページ構造 + + ![alt text](Image/5-3.png) + +8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 + +9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 + + + +[ページトップへ](5-1.md) + diff --git a/automanual/old_delete/5-2.md b/automanual/old_delete/5-2.md new file mode 100644 index 0000000..1212bf4 --- /dev/null +++ b/automanual/old_delete/5-2.md @@ -0,0 +1,26 @@ + +[前へ](5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-3.md) + +## 5.2. 整列用記述 + +図5-4-整列用記述段落 + +![alt text](Image/5-4.png) + + +整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 + +1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 + +2. 整列用ファイルをディスクに割り当てる必要がある。 + +3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 + +4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 + +5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 + + + +[ページトップへ](5-2.md) + diff --git a/automanual/old_delete/5-3.md b/automanual/old_delete/5-3.md new file mode 100644 index 0000000..3371754 --- /dev/null +++ b/automanual/old_delete/5-3.md @@ -0,0 +1,302 @@ + +[前へ](5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-4.md) + +## 5.3. データ記述の形式 + +図5-5-データ記述の一般形式 + +![alt text](Image/5-5.png) + +ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 + +1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 + +2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 + + + | | | + | --- | --- | + | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | + | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | + | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | + | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | + + + この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 + +3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 + +4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 + + 表5-6-データのクラス定義 PICTURE記号(9/A/X) + + | 基本記号 | 意味・使用方法 | + | :--- | :--- | + | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | + | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | + | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | + | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | + + 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: + + | | | + | --- | --- | + | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | + | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | + | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | + | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | + | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | + + + + 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 + + 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 + + 表5-7-数値形式オプションのPICTURE記号(P/S/V) + + | 数値形式のオプション記号 | 意味・使用方法 | + | :--- | :--- | + | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | + | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | + | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | + +5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 + + 表5-8-符号エンコード文字 + + | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | + | :---: | :---: |:---: | + | 0 | 0 | p | + | 1 | 1 | q | + | 2 | 2 | r | + | 3 | 3 | s | + | 4 | 4 | t | + | 5 | 5 | u | + | 6 | 6 | v | + | 7 | 7 | w | + | 8 | 8 | x | + | 9 | 9 | y | + + SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 + + +6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 + + 表5-9-数字編集PICTURE記号 + + | 編集記号 | 意味・使用方法 | + | :--- | :--- | + | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | + | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | + | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | + | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | + | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | + | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | + | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | + | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | + | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | + | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | + | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | + + 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 + +7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 + +8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 + +9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 + +10. EXTERNAL句は、77または01レベルでのみ指定できる。 + +11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 + +12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 + +13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 + +14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 + + 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. + + 以下のように割り当てられる。 + + ![alt text](Image/5-3-9.png) + + 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 + ``` + 05 X OCCURS 3 TIMES. + 10 A PIC X(1). + 10 B PIC X(1). + 10 C PIC X(1). + ``` + ![alt text](Image/5-3-10.png) + + 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 + +15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 + +16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 + +17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 + + ``` + PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 + PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” + PIC 9(3) VALUE 1 – 次の値を保持する 001 + PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 + ``` + +18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 + +19. BASED句とANY LENGTH句を併用することはできない。 + +20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 + +21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 + +22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 + +23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 + +24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある + + a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 + + b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 + + c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 + + d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 + + e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 + + f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 + +25. 次の表は、利用可能なUSAGE句をまとめたものである。 + + 表5-10-USAGE句一覧
+ + | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| + | :--- | :--- |:--- | :--- |:--- | :--- | + | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | + | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | + |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | + | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | + | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | + | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | + | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | + | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | + | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | + | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | + | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | + | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | + | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | + | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | + | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | + | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | + | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | + | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | + | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | + | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | + | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | + | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | + | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | + | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | + | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | + +26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 + + ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 + + リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 + + CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 + + 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 + + バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 + +27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 + +28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 + +29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 + + a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 + + b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 + + c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 + + 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 + + 図5-11-SYNCHRONIZED句の効果 + + ![alt text](Image/5-11.png) + + 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 + + SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 + +30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 + + a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 + + b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 + ``` + 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 + + ``` + 05 SHIRT-SIZE-VALUES. + 10 PIC X(4) VALUE “S 14”. + 10 PIC X(4) VALUE “M 15”. + 10 PIC X(4) VALUE “L 16”. + 10 PIC X(4) VALUE “XL17”. + 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. + 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. + 15 SST-SIZE PIC X(2). + 15 SST-NECK PIC 9(2). + ``` + + + cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) + + 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 + + ``` + 05 X OCCURS 6 TIMES. + 10 A PIC X(1) VALUE “?‟. + 10 B PIC X(1) VALUE “%‟. + 10 N PIC 9(2) VALUE 10. + ``` + + この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 + +--- +`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 + +`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 + +`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 + +`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 + + + +[ページトップへ](5-3.md) + diff --git a/automanual/old_delete/5-4.md b/automanual/old_delete/5-4.md new file mode 100644 index 0000000..1d0d3c8 --- /dev/null +++ b/automanual/old_delete/5-4.md @@ -0,0 +1,25 @@ + +[前へ](5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-5.md) + +## 5.4. 条件名 + +図5-12-レベル88条件名記述構文 + +![alt text](Image/5-12.png) + +条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 + +1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 + +2. また、ストレージを占有しない。 + +3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 + +4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 + +5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 + + + +[ページトップへ](5-4.md) + diff --git a/automanual/old_delete/5-5.md b/automanual/old_delete/5-5.md new file mode 100644 index 0000000..ce561be --- /dev/null +++ b/automanual/old_delete/5-5.md @@ -0,0 +1,19 @@ + +[前へ](5-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-6.md) + +## 5.5. 定数記述 + +図5-13-78レベル定数記述構文 + +![alt text](Image/5-13.png) + +この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 + +1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 + +2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 + + + +[ページトップへ](5-5.md) + diff --git a/automanual/old_delete/5-6.md b/automanual/old_delete/5-6.md new file mode 100644 index 0000000..bb8e538 --- /dev/null +++ b/automanual/old_delete/5-6.md @@ -0,0 +1,105 @@ + +[前へ](5-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-1.md) + +## 5.6. 画面記述 + +図5-14-画面節データ項目記述構文 + +![alt text](Image/5-14-1.png) +![alt text](Image/5-14-2.png) + +上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 + +1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 + +2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 + +3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 + +4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 + +5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 + +6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 + +7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` + +8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 + +9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 + +10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 + +11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 + + LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 + + もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 + + TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 + + 必要に応じてCOLUMNはCOLに省略が可能である。 + +12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 + + 表5-15-番号によって指定される画面色 + + | 整数 | 色 | + | :---: | :---: | + | 0 | 黒 | + | 1 | 青 | + | 2 | 緑 | + | 3 | 青緑 | + | 4 | 赤 | + | 5 | 赤紫 | + | 6 | 黄 | + | 7 | 白 | + +13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 + + 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
+ + + | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | + | :---: | :---: |:---: | + | 0 | 黒 | 暗灰 | + | 1 | 暗青/藍 | 明青 | + | 2 | 暗緑 | 明緑 | + | 3 | 暗青緑 | 明青緑 | + | 4 | 暗赤 | 明赤 | + | 5 | 暗赤紫 | 明赤紫 | + | 6 | 金/茶 | 黄 | + | 7 | 明灰 | 白 | + + +14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 + +15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 + + ``` + 78 Black VALUE 0. + 78 Blue VALUE 1. + 78 Green VALUE 2. + 78 White VALUE 7. + ・・・ + 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ + 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ + 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ + ``` + DEF項目の色は緑と白になる(XYZから継承される) + +16. VALUE句は変更できない固定のテキストを定義するために使用される。 + +17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 + +18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 + +19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 + +--- +`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 + + + +[ページトップへ](5-6.md) + diff --git a/automanual/old_delete/6-1-1.md b/automanual/old_delete/6-1-1.md new file mode 100644 index 0000000..f162965 --- /dev/null +++ b/automanual/old_delete/6-1-1.md @@ -0,0 +1,38 @@ + +[前へ](5-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-2.md) + +# 6. 手続き部 + +## 6.1. 構成要素 + +### 6.1.1. 表の参照 + +COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 + +4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: + +``` + 01 GRID. + 05 GRID-ROW OCCURS 3 TIMES. + 10 GRID-COLUMN OCCURS 4 TIMES. + 15 GRID-CHARACTER PIC X(1). +``` + +次の図で網掛けされているGRID-CHARACTERは、 + +![alt text](Image/6-0.png) + + +次のコードで参照できる。 + + GRID-CHARACTER(2, 3) + +添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または +これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 + +算術式については[6.1.4.1](6-1-4-1.md#6141-算術式)で説明する。 + + + +[ページトップへ](6-1-1.md) + diff --git a/automanual/old_delete/6-1-2.md b/automanual/old_delete/6-1-2.md new file mode 100644 index 0000000..3225ddb --- /dev/null +++ b/automanual/old_delete/6-1-2.md @@ -0,0 +1,54 @@ + +[前へ](6-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-3.md) + +### 6.1.2. データ名の修飾 + +COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 + +動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: + +``` + 01 EMPLOYEE. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). + 01 CUSTOMER. + 05 MAILING-ADDRESS. + 10 STREET PIC X(35). + 10 CITY PIC X(15). + 10 STATE PIC X(2). + 10 ZIP-CODE. + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). +``` + +それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: + + MOVE “Philadelphia” TO CITY. + +この問題を解決するために、CITYの参照を次のように修飾できる。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. + +残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 + + MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. + +これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 + + MOVE “Philadelphia” TO CITY OF EMPLOYEE. + +テーブルへの参照を修飾する場合は次のように記述する。 + + 一意名-1 OF 一意名-2(添え字・・・) + +予約語の「IN」は「OF」の代わりとして使うことができる。 + + + +[ページトップへ](6-1-2.md) + diff --git a/automanual/old_delete/6-1-3.md b/automanual/old_delete/6-1-3.md new file mode 100644 index 0000000..a0048d8 --- /dev/null +++ b/automanual/old_delete/6-1-3.md @@ -0,0 +1,30 @@ + +[前へ](6-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-1.md) + +### 6.1.3. 部分参照 + +図6-1-部分参照構文 + +![alt text](Image/6-1.png) + +COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 + +開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 + +ここでいくつか例を挙げる。 + +| | | +| --- | --- | +| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | +| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | +| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | +| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | +| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | + + +参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 + + + +[ページトップへ](6-1-3.md) + diff --git a/automanual/old_delete/6-1-4-1.md b/automanual/old_delete/6-1-4-1.md new file mode 100644 index 0000000..1d88868 --- /dev/null +++ b/automanual/old_delete/6-1-4-1.md @@ -0,0 +1,57 @@ + +[前へ](6-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-2.md) + +### 6.1.4. 式 + +opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 + +- 数値結果を計算する「算術式」 + +- TRUEまたはFALSE値を計算する「条件式」 + +0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 + +#### 6.1.4.1. 算術式 + +算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 + +| 優先順位 演算子 | 意味 | + | :---: | :--- | + | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| + | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | + | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | + | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | + | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | + | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | + | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | + +COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 + +1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 + +2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 + +3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 + +4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 + +5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 + +6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 + +ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 + +| 式 | 計算結果 | 解説 | +| :--- | :--- |:--- | +| 3 * 4 + 1|13|* は + よりも優先される。 | +| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | +| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | +| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | +| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | + +もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 + + + +[ページトップへ](6-1-4-1.md) + diff --git a/automanual/old_delete/6-1-4-2.md b/automanual/old_delete/6-1-4-2.md new file mode 100644 index 0000000..ea62b48 --- /dev/null +++ b/automanual/old_delete/6-1-4-2.md @@ -0,0 +1,148 @@ + +[前へ](6-1-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-5.md) + +#### 6.1.4.2. 条件式 + +条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 + +##### 6.1.4.2.1. 条件名(レベル88項目) + +次のコードは最も単純な条件の一例である。 + +``` + 05 SHIRT-SIZE PIC 99V9. + 88 LILLIPUTIAN VALUE 0 THRU 12.5 + 88 XS VALUE 13 THRU 13.5. + 88 S VALUE 14, 14.5. + 88 M VALUE 15, 15.5. + 88 L VALUE 16, 16.5. + 88 XL VALUE 17, 17.5. + 88 XXL VALUE 18, 18.5. + 88 HUMUNGOUS VALUE 19 THRU 99.9. +``` + +条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 + + + IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 + + +または次のように条件名「XL」を使用することもできる。 + + IF XL + +##### 6.1.4.2.2. 字類条件 + +図6-9-字類条件構文 + +![alt text](Image/6-9.png) + +字類条件は、データ項目に格納されている現在のデータ型を判別する。 + +1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 + +2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 + +3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 + +4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 + +5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 + +6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 + +7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 + + ``` + SPECIAL-NAMES. + CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. + ``` + +次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 + +``` + IF Entered-Value IS Hexadecimal + PERFORM 150-Process-Hex-Value + END-IF +``` + +##### 6.1.4.2.3. 正負条件 +図6-10-正負条件構文 + +![alt text](Image/6-10.png) + +正負条件は、PIC 9データ項目の数値状態を判別する。 + +1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 + +2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 + +##### 6.1.4.2.4. スイッチ状態条件 +図6-11-スイッチ状態条件 + +![alt text](Image/6-11.png) + +特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 + +##### 6.1.4.2.5. 比較条件 +図6-12-比較条件構文 + +![alt text](Image/6-12.png) + +比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 + +1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 + +2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 + +##### 6.1.4.2.6. 組み合わせ条件 +図6-13-組み合わせ条件構文 + +![alt text](Image/6-13.png) + +組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 + +1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 + +2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 + +3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 +``` + IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 +``` +以下のように省略される。 +``` + IF ACCOUNT-STATUS = 1 OR 2 OR 7 +``` + +4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 + + ``` + FALSE OR TRUE AND TRUE 結果:TRUE + (FALSE OR FALSE) AND TRUE 結果:FALSE + FALSE OR (FALSE AND TRUE) 結果:TRUE + ``` + +##### 6.1.4.2.7. 否定条件 +図6-14-否定条件構文 + +![alt text](Image/6-14.png) + +否定条件はNOT演算子を用いて、条件を否定する。 + +1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 + +2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 +``` + NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE + 結果:FALSE + NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) + 結果:TRUE + NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) + 結果:FALSE +``` + + + +[ページトップへ](6-1-4-2.md) + diff --git a/automanual/old_delete/6-1-5.md b/automanual/old_delete/6-1-5.md new file mode 100644 index 0000000..60caa7f --- /dev/null +++ b/automanual/old_delete/6-1-5.md @@ -0,0 +1,52 @@ + +[前へ](6-1-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-6.md) + +### 6.1.5. ピリオド(.) + +COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 + +``` + MOVE SPACES TO Employee-Address + ADD 1 TO Record-Counter + DISPLAY “Record-Counter=” Record-Counter +``` + +一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 + +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest + DISPLAY “Interest Amount = “ Interest +``` + +この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 + +しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: + +``` + IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 + GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 + GIVING Interest DISPLAY “Interest Amount = “ Interest +``` + +では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 + +そこで用いるのが完結文である。 + +COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 +``` + IF Loan-Balance < 10000 + MULTIPLY Loan-Balance BY 0.04 GIVING Interest + ELSE + MULTIPLY Loan-Balance BY 0.045 GIVING Interest. + DISPLAY “Interest Amount = “ Interest +``` + +二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 + + + +[ページトップへ](6-1-5.md) + diff --git a/automanual/old_delete/6-1-6.md b/automanual/old_delete/6-1-6.md new file mode 100644 index 0000000..57cf9db --- /dev/null +++ b/automanual/old_delete/6-1-6.md @@ -0,0 +1,47 @@ + +[前へ](6-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-7.md) + +### 6.1.6. 動詞/END-動詞 + +1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 + +``` + IF A = 1 + IF B = 1 + DISPLAY “A & B = 1” + ELSE + IF B = 1 + DISPLAY “A NOT = 1 BUT B = 1” + ELSE + DISPLAY “NEITHER A NOR B = 1”. +``` + +このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 + +![alt text](Image/6-16-1.png) + +NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 + +1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: + +![alt text](Image/6-16-2.png) + +しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 + +![alt text](Image/6-16-3.png) + +COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 + +COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` + +既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 + +--- +`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 + +`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? + + + +[ページトップへ](6-1-6.md) + diff --git a/automanual/old_delete/6-1-7.md b/automanual/old_delete/6-1-7.md new file mode 100644 index 0000000..8f8d647 --- /dev/null +++ b/automanual/old_delete/6-1-7.md @@ -0,0 +1,24 @@ + +[前へ](6-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-1.md) + +### 6.1.7. 特殊レジスタ + +opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 + +表6-15-特殊レジスタ + +| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | +| :--- | :--- |:--- | +| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | +| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | +| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | +| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | +| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | + +--- +`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 + + + +[ページトップへ](6-1-7.md) + diff --git a/automanual/old_delete/6-1-8-1.md b/automanual/old_delete/6-1-8-1.md new file mode 100644 index 0000000..6764a0b --- /dev/null +++ b/automanual/old_delete/6-1-8-1.md @@ -0,0 +1,34 @@ + +[前へ](6-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-2.md) + +### 6.1.8. ファイルへの同時アクセス制御 + +データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 + +すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 + +#### 6.1.8.1. ファイル共有 + +opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 + +OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 + +ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 + +| 共有オプション |効果 | +| :--- | :--- | +| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | +| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | +| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | + +誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 + +--- +`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 + +`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 + + + +[ページトップへ](6-1-8-1.md) + diff --git a/automanual/old_delete/6-1-8-2.md b/automanual/old_delete/6-1-8-2.md new file mode 100644 index 0000000..874613b --- /dev/null +++ b/automanual/old_delete/6-1-8-2.md @@ -0,0 +1,25 @@ + +[前へ](6-1-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-2.md) + +#### 6.1.8.2. レコードロック + +レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 + +ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 + +レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 + +| レコードロック オプション |効果 | +| :--- | :--- | +| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | +| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | +| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | +| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | + + +使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 + + + +[ページトップへ](6-1-8-2.md) + diff --git a/automanual/old_delete/6-10.md b/automanual/old_delete/6-10.md new file mode 100644 index 0000000..4801ebf --- /dev/null +++ b/automanual/old_delete/6-10.md @@ -0,0 +1,17 @@ + +[前へ](6-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-11.md) + +## 6.10. COMMIT + +図6-37-COMMIT構文 + +![alt text](Image/6-37-Commit.png) + +COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 + +1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 + + + +[ページトップへ](6-10.md) + diff --git a/automanual/old_delete/6-11.md b/automanual/old_delete/6-11.md new file mode 100644 index 0000000..7097793 --- /dev/null +++ b/automanual/old_delete/6-11.md @@ -0,0 +1,19 @@ + +[前へ](6-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-12.md) + +## 6.11. COMPUTE + +図6-38-COMPUTE構文 + +![alt text](Image/6-38-Compute.png) + +COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 + +1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 + +2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 + + + +[ページトップへ](6-11.md) + diff --git a/automanual/old_delete/6-12.md b/automanual/old_delete/6-12.md new file mode 100644 index 0000000..20162b1 --- /dev/null +++ b/automanual/old_delete/6-12.md @@ -0,0 +1,33 @@ + +[前へ](6-11.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-1.md) + +## 6.12. CONTINUE + +図6-39-CONTINUE構文 + +![alt text](Image/6-39-Continue.png) + +CONTINUE文は動作がないためアクションを実行しない。 + +1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 + + ![alt text](Image/6-12-1.png) + + 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 + +2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 + + ![alt text](Image/6-12-2.png) + +COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 + + IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ + +プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 + +従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 + + + +[ページトップへ](6-12.md) + diff --git a/automanual/old_delete/6-13-1.md b/automanual/old_delete/6-13-1.md new file mode 100644 index 0000000..7675b44 --- /dev/null +++ b/automanual/old_delete/6-13-1.md @@ -0,0 +1,31 @@ + +[前へ](6-12.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-2.md) + +## 6.13. DELETE + +### 6.13.1. DELETE文の書き方1 ― DELETE + +図6-40-DELETE構文(レコードの削除) + +![alt text](Image/6-40-Delete.png) + +DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 + +1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 + +2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 + +3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 + +4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 + +5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 + +6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 + +7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 + + + +[ページトップへ](6-13-1.md) + diff --git a/automanual/old_delete/6-13-2.md b/automanual/old_delete/6-13-2.md new file mode 100644 index 0000000..2859dee --- /dev/null +++ b/automanual/old_delete/6-13-2.md @@ -0,0 +1,21 @@ + +[前へ](6-13-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-1.md) + +### 6.13.2. DELETE文の書き方2 ― DELETE FILE + +図6-41-DELETE FILE構文(ファイルの削除) + +![alt text](Image/6-41(delete).png) + +DELETE FILE文は、ディスクファイルを削除する。 + +1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 + +2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 + +3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 + + + +[ページトップへ](6-13-2.md) + diff --git a/automanual/old_delete/6-14-1.md b/automanual/old_delete/6-14-1.md new file mode 100644 index 0000000..b123516 --- /dev/null +++ b/automanual/old_delete/6-14-1.md @@ -0,0 +1,23 @@ + +[前へ](6-13-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-2.md) + +## 6.14. DISPLAY + +### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE + +図6-42-DISPLAY構文(UPON CONSOLE) + +![alt text](Image/6-42-Display.png) + +プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 + +1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 + +2. 指定する呼び名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義の呼び名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 + +3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 + + + +[ページトップへ](6-14-1.md) + diff --git a/automanual/old_delete/6-14-2.md b/automanual/old_delete/6-14-2.md new file mode 100644 index 0000000..0aa0b25 --- /dev/null +++ b/automanual/old_delete/6-14-2.md @@ -0,0 +1,17 @@ + +[前へ](6-14-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-3.md) + +### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス + +図6-43-DISPLAY構文(コマンドライン引数へのアクセス) + +![alt text](Image/6-43-Display.png) + +後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 + +1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 + + + +[ページトップへ](6-14-2.md) + diff --git a/automanual/old_delete/6-14-3.md b/automanual/old_delete/6-14-3.md new file mode 100644 index 0000000..3c2f94b --- /dev/null +++ b/automanual/old_delete/6-14-3.md @@ -0,0 +1,29 @@ + +[前へ](6-14-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-4.md) + +### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 + +図6-44-DISPLAY構文(環境変数へのアクセス/設定) + +![alt text](Image/6-44-Display.png) + +環境変数を作成または変更するために使われる。 + +1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 + + DISPLAY + environment-variable-name UPON ENVIRONMENT-NAME + END-DISPLAY + DISPLAY + environment-variable-name UPON ENVIRONMENT-VALUE + END-DISPLAY + + +2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 + +3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 +  + + +[ページトップへ](6-14-3.md) + diff --git a/automanual/old_delete/6-14-4.md b/automanual/old_delete/6-14-4.md new file mode 100644 index 0000000..0369666 --- /dev/null +++ b/automanual/old_delete/6-14-4.md @@ -0,0 +1,23 @@ + +[前へ](6-14-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-5.md) + +### 6.14.4. DISPLAY文の書き方4 ― 画面データ + +図6-45-DISPLAY構文(画面データ) + +![alt text](Image/6-45-Display.png) + +形式化された画面にデータを表示する。 + +1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 + +2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 + +4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 + + + +[ページトップへ](6-14-4.md) + diff --git a/automanual/old_delete/6-14-5.md b/automanual/old_delete/6-14-5.md new file mode 100644 index 0000000..f9493e1 --- /dev/null +++ b/automanual/old_delete/6-14-5.md @@ -0,0 +1,15 @@ + +[前へ](6-14-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-1.md) + +### 6.14.5. DISPLAY文の例外処理 + +図6-46-DISPLAY構文(例外処理) + +![alt text](Image/6-46-Display.png) + +DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 + + + +[ページトップへ](6-14-5.md) + diff --git a/automanual/old_delete/6-15-1.md b/automanual/old_delete/6-15-1.md new file mode 100644 index 0000000..bde2aa5 --- /dev/null +++ b/automanual/old_delete/6-15-1.md @@ -0,0 +1,25 @@ + +[前へ](6-14-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-2.md) + +## 6.15. DIVIDE + +### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO + +図6-47-DIVIDE INTO構文 + +![alt text](Image/6-47-Divide.png) + +指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 + + + +[ページトップへ](6-15-1.md) + diff --git a/automanual/old_delete/6-15-2.md b/automanual/old_delete/6-15-2.md new file mode 100644 index 0000000..6517c77 --- /dev/null +++ b/automanual/old_delete/6-15-2.md @@ -0,0 +1,25 @@ + +[前へ](6-15-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-3.md) + +### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING + +図6-48-DIVIDE INTO GIVING構文 + +![alt text](Image/6-48-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + + + +[ページトップへ](6-15-2.md) + diff --git a/automanual/old_delete/6-15-3.md b/automanual/old_delete/6-15-3.md new file mode 100644 index 0000000..9d61f66 --- /dev/null +++ b/automanual/old_delete/6-15-3.md @@ -0,0 +1,25 @@ + +[前へ](6-15-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-4.md) + +### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING + +図6-49-DIVIDE BY GIVING構文 + +![alt text](Image/6-49-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + + + +[ページトップへ](6-15-3.md) + diff --git a/automanual/old_delete/6-15-4.md b/automanual/old_delete/6-15-4.md new file mode 100644 index 0000000..f904f6e --- /dev/null +++ b/automanual/old_delete/6-15-4.md @@ -0,0 +1,25 @@ + +[前へ](6-15-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-5.md) + +### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER + +図6-50-DIVIDE INTO REMAINDER構文 + +![alt text](Image/6-50-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + + + +[ページトップへ](6-15-4.md) + diff --git a/automanual/old_delete/6-15-5.md b/automanual/old_delete/6-15-5.md new file mode 100644 index 0000000..d923748 --- /dev/null +++ b/automanual/old_delete/6-15-5.md @@ -0,0 +1,25 @@ + +[前へ](6-15-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-16.md) + +### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER + +図6-51-DIVIDE BY REMAINDER構文 + +![alt text](Image/6-51-Divide.png) + +指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 + +5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 + + + +[ページトップへ](6-15-5.md) + diff --git a/automanual/old_delete/6-16.md b/automanual/old_delete/6-16.md new file mode 100644 index 0000000..c61fee4 --- /dev/null +++ b/automanual/old_delete/6-16.md @@ -0,0 +1,21 @@ + +[前へ](6-15-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-17.md) + +## 6.16. ENTRY + +図6-52-ENTRY構文 + +![alt text](Image/6-52-Entry.png) + +ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 + +1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 + +2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 + +3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 + + + +[ページトップへ](6-16.md) + diff --git a/automanual/old_delete/6-17.md b/automanual/old_delete/6-17.md new file mode 100644 index 0000000..6308809 --- /dev/null +++ b/automanual/old_delete/6-17.md @@ -0,0 +1,59 @@ + +[前へ](6-16.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-18.md) + +## 6.17. EVALUATE + +図6-53-EVALUATE構文 + +![alt text](Image/6-53-Evaluate.png) + +EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 + +1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 + +2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: + + + Legal: Not Legal: + + (3 + Years-Of-Service) THROUGH 99 0 THRU “A” + + “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is + + X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) + + 15.7 THROUGH 19.4 + +3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択主体と呼ばれ、各WHEN句の後に指定された値は選択対象と呼ばれる。 + +4. 各WHEN句には、EVALUATE文の選択主体と同じ数の選択対象が必要である。 + +5. 各EVALUATE句の選択主体は、選択対象に対応する各WHEN句と等しいかどうかテストされる。 + +6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 + +7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 + +8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 + +9. ANYの選択対象を使うと、ANYと一致する選択主体と自動的に合致する。 + +ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 + +1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 + +2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 + +3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 + +4. 上記以外の種類の口座には利子が適用されない。 + +これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 + +図6-54-EVALUATE文のデモプログラム +![alt text](Image/6-54-Evaluate.png) + + + +[ページトップへ](6-17.md) + diff --git a/automanual/old_delete/6-18.md b/automanual/old_delete/6-18.md new file mode 100644 index 0000000..a88fb4c --- /dev/null +++ b/automanual/old_delete/6-18.md @@ -0,0 +1,42 @@ + +[前へ](6-17.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-19.md) + +## 6.18. EXIT + +図6-55-EXIT構文 + +![alt text](Image/6-55-Exit.png) + +EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 + +1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 + + 図6-56-EXIT文
+ ![alt text](Image/6-56-Exit.png) + +2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 + +3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 + +4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 + + EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 + + 図6-57-EXIT PARAGRAPH文
+ ![alt text](Image/6-57-Exit.png) + +5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 + +6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 + +7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 + + 図6-58-EXIT PERFORM文
+ ![alt text](Image/6-58-Exit.png) + +8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 + + + +[ページトップへ](6-18.md) + diff --git a/automanual/old_delete/6-19.md b/automanual/old_delete/6-19.md new file mode 100644 index 0000000..0d2cf15 --- /dev/null +++ b/automanual/old_delete/6-19.md @@ -0,0 +1,23 @@ + +[前へ](6-18.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-20.md) + +## 6.19. FREE + +図6-59-FREE構文 + +![alt text](Image/6-59-Free.png) + +FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 + +1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 + +2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 + +3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 + +4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 + + + +[ページトップへ](6-19.md) + diff --git a/automanual/old_delete/6-2.md b/automanual/old_delete/6-2.md new file mode 100644 index 0000000..04d8328 --- /dev/null +++ b/automanual/old_delete/6-2.md @@ -0,0 +1,31 @@ + +[前へ](6-1-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-3.md) + +## 6.2. 記述形式 + +図6-16-記述形式構文 + +![alt text](Image/6-16.png) + +手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 + +手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 + +1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 + +2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 + +3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 + +4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 + +5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 + +6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 + +7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 + + + +[ページトップへ](6-2.md) + diff --git a/automanual/old_delete/6-20.md b/automanual/old_delete/6-20.md new file mode 100644 index 0000000..07d4423 --- /dev/null +++ b/automanual/old_delete/6-20.md @@ -0,0 +1,15 @@ + +[前へ](6-19.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-21.md) + +## 6.20. GENERATE + +図6-60-GENERATE構文 + +![alt text](Image/6-60-Generate.png) + +GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + + + +[ページトップへ](6-20.md) + diff --git a/automanual/old_delete/6-21.md b/automanual/old_delete/6-21.md new file mode 100644 index 0000000..28e1940 --- /dev/null +++ b/automanual/old_delete/6-21.md @@ -0,0 +1,19 @@ + +[前へ](6-20.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-1.md) + +## 6.21. GOBACK + +図6-61-GOBACK構文 + +![alt text](Image/6-61-Goback.png) + +GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 + +1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 + +2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 + + + +[ページトップへ](6-21.md) + diff --git a/automanual/old_delete/6-22-1.md b/automanual/old_delete/6-22-1.md new file mode 100644 index 0000000..e494689 --- /dev/null +++ b/automanual/old_delete/6-22-1.md @@ -0,0 +1,19 @@ + +[前へ](6-21.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-2.md) + +## 6.22. GO TO + +### 6.22.1. GO TO文の書き方1 ― GO TO + +図6-62-GOTO構文 + +![alt text](Image/6-62-Goto.png) + +プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 + +1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 + + + +[ページトップへ](6-22-1.md) + diff --git a/automanual/old_delete/6-22-2.md b/automanual/old_delete/6-22-2.md new file mode 100644 index 0000000..4fdce18 --- /dev/null +++ b/automanual/old_delete/6-22-2.md @@ -0,0 +1,29 @@ + +[前へ](6-22-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-23.md) + +### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON + +図6-63-GOTO DEPENDING ON構文 + +![alt text](Image/6-63-Goto.png) + +文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 + +1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 + +2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 + +3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 + +4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 + + 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE + + ![alt text](Image/6-64-Goto.png) + + 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 + + + +[ページトップへ](6-22-2.md) + diff --git a/automanual/old_delete/6-23.md b/automanual/old_delete/6-23.md new file mode 100644 index 0000000..0a7ad12 --- /dev/null +++ b/automanual/old_delete/6-23.md @@ -0,0 +1,21 @@ + +[前へ](6-22-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-24.md) + +## 6.23. IF + +図6-65-IF構文 + +![alt text](Image/6-65-If.png) + +IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 + +1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 + +3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 + + + +[ページトップへ](6-23.md) + diff --git a/automanual/old_delete/6-24.md b/automanual/old_delete/6-24.md new file mode 100644 index 0000000..3610a40 --- /dev/null +++ b/automanual/old_delete/6-24.md @@ -0,0 +1,43 @@ + +[前へ](6-23.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-25.md) + +## 6.24. INITIALIZE + +図6-66-INITIALIZE構文 + +![alt text](Image/6-66-Initialize.png) + +INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 + +1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 + + - 一意名-1として指定されたすべての基本項目。 + + - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: + + - USAGE INDEX項目は除外される。 + + - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 + + 以上は受け取り項目のリストである。 + +2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 + +3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 + +4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 + +5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 + +6. 各受け取り項目の初期化は、以下のルールに従って行われる。 + + - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 + + - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 + + - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 + + + +[ページトップへ](6-24.md) + diff --git a/automanual/old_delete/6-25.md b/automanual/old_delete/6-25.md new file mode 100644 index 0000000..197bbc3 --- /dev/null +++ b/automanual/old_delete/6-25.md @@ -0,0 +1,15 @@ + +[前へ](6-24.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-26.md) + +## 6.25. INITIATE + +図6-67-INITIATE構文 + +![alt text](Image/6-67-Initiate.png) + +INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 + + + +[ページトップへ](6-25.md) + diff --git a/automanual/old_delete/6-26.md b/automanual/old_delete/6-26.md new file mode 100644 index 0000000..be01541 --- /dev/null +++ b/automanual/old_delete/6-26.md @@ -0,0 +1,88 @@ + +[前へ](6-25.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-27.md) + +## 6.26. INSPECT + +図6-68-INSPECT構文 + +![alt text](Image/6-68-Inspect.png) + +INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 + +1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 + +2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 + +3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 + +INSPECT文のルールは、指定された句によって異なる。 + +**TALLYING句の場合:** + +TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 + +1. 一意名-2は編集不可の数値項目でなければならない。 + +2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 + +3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 + + a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 + +4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 + + 図6-69-INSPECT文TALLYING句の例
+ ![alt text](Image/6-69-Inspect.png) + + 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない + +**REPLACING句の場合:** + +REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 + +1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 + +3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 + +5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +6. ターゲット文字列は次のように識別できる: + + a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 + + b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 + +7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 + +8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 + +**CONVERTING句の場合:** + +CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 + +1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 + +2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 + +3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 + +4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 + +5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 + +6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 + +8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 + + + +[ページトップへ](6-26.md) + diff --git a/automanual/old_delete/6-27.md b/automanual/old_delete/6-27.md new file mode 100644 index 0000000..4218a73 --- /dev/null +++ b/automanual/old_delete/6-27.md @@ -0,0 +1,56 @@ + +[前へ](6-26.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-1.md) + +## 6.27. MERGE + +図6-70-MERGE構文 + +![alt text](Image/6-70-Merge.png) + +MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 + +1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 + +2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 + +3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 + +5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 + + MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 + +6. USING句で指定されたファイルには、以下のルールが適用される。 + + a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 + + b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 + + c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 + +7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 + +8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 + +9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 + +10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 + +11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 + +12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 + +13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** + +14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 + +15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 + +--- +`21` [4.2.2](4-2-2.md)参照。 + + + +[ページトップへ](6-27.md) + diff --git a/automanual/old_delete/6-28-1.md b/automanual/old_delete/6-28-1.md new file mode 100644 index 0000000..0ed83c1 --- /dev/null +++ b/automanual/old_delete/6-28-1.md @@ -0,0 +1,21 @@ + +[前へ](6-27.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-2.md) + +## 6.28. MOVE + +### 6.28.1. MOVE文の書き方1 ― MOVE + +図6-71-MOVE構文 + +![alt text](Image/6-71-Move.png) + +特定の値を一つ以上の受け取りデータ項目に移動することができる。 + +1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 + +2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 + + + +[ページトップへ](6-28-1.md) + diff --git a/automanual/old_delete/6-28-2.md b/automanual/old_delete/6-28-2.md new file mode 100644 index 0000000..37ac84a --- /dev/null +++ b/automanual/old_delete/6-28-2.md @@ -0,0 +1,91 @@ + +[前へ](6-28-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-1.md) + +### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING + +図6-72-MOVE CORRESPONDING構文 + +![alt text](Image/6-72-Move.png) + +同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 + +1. CORRESPONDINGという単語は、CORRと省略される場合がある。 + +2. 一意名-1と一意名-2の両方が集団項目でなければならない。 + +3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: + + a. どちらも同じ名前ではあるがFILLERではない。 + + b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 + + c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 + + d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 + + e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 + +4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 + +この規則は、以下の例題を使うとよく理解できる。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. corrdemo. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 X. + 05 A VALUE 'A' PIC X(1). + 05 G1. + 10 G2. + 15 B VALUE 'B' PIC X(1). + 05 C. + 10 FILLER VALUE 'C' PIC X(1). + 05 G3. + 10 G4. + 15 D VALUE 'D' PIC X(1). + 05 V1 VALUE 'E' PIC X(1). + 05 E REDEFINES V1 PIC X(1). + 05 F VALUE 'F' PIC X(1). + 05 G VALUE ALL 'G'. + 10 G2 OCCURS 4 TIMES PIC X(1). + 05 H VALUE ALL 'H' PIC X(4). + 01 Y. + 02 A PIC X(1). + 02 G1. + 03 G2. + 04 B PIC X(1). + 02 C PIC X(1). + 02 G3. + 03 G5. + 04 D PIC X(1). + 02 E PIC X(1). + 02 V2 PIC X(1). + 02 G PIC X(4). + 02 H OCCURS 4 TIMES PIC X(1). + 66 F RENAMES V2. + PROCEDURE DIVISION. + 100-Main. + MOVE ALL '-' TO Y. + DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. + DISPLAY 'Before: ' Y. + MOVE CORR X TO Y. + DISPLAY ' After: ' Y. + STOP RUN + +DISPLAY文で表示される結果は以下の通りである。 + + Names: ABCDEFGGGGHHHH + Before: -------------- + After: ABC---GGGG---- + +- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 +- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 +- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 +- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 +- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 +- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 + + + +[ページトップへ](6-28-2.md) + diff --git a/automanual/old_delete/6-29-1.md b/automanual/old_delete/6-29-1.md new file mode 100644 index 0000000..240f1c5 --- /dev/null +++ b/automanual/old_delete/6-29-1.md @@ -0,0 +1,25 @@ + +[前へ](6-28-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-2.md) + +## 6.29. MULTIPLY + +### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY + +図6-73-MULTIPLY BY構文 + +![alt text](Image/6-73-Multiply.png) + +算術積を実行する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. それぞれ一意名-2を掛けた一意名-1または定数-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 + +4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + + + +[ページトップへ](6-29-1.md) + diff --git a/automanual/old_delete/6-29-2.md b/automanual/old_delete/6-29-2.md new file mode 100644 index 0000000..ef3fcc0 --- /dev/null +++ b/automanual/old_delete/6-29-2.md @@ -0,0 +1,25 @@ + +[前へ](6-29-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-30.md) + +### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING + +図6-74-MULTIPLY GIVING構文 + +![alt text](Image/6-74-Multiply.png) + +二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1と定数-2は数字定数でなければならない。 + +4. 一意名-1および一意名-2の値は変更できない。 + +5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 + + + +[ページトップへ](6-29-2.md) + diff --git a/automanual/old_delete/6-3.md b/automanual/old_delete/6-3.md new file mode 100644 index 0000000..374bec7 --- /dev/null +++ b/automanual/old_delete/6-3.md @@ -0,0 +1,25 @@ + +[前へ](6-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-1.md) + +## 6.3. 宣言の記述形式 + +図6-17-宣言構文 + +![alt text](Image/6-17.png) + +プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 + +1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 + +2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 + +3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 + +4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 + +5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 + + + +[ページトップへ](6-3.md) + diff --git a/automanual/old_delete/6-30.md b/automanual/old_delete/6-30.md new file mode 100644 index 0000000..8b3366b --- /dev/null +++ b/automanual/old_delete/6-30.md @@ -0,0 +1,23 @@ + +[前へ](6-29-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-31.md) + +## 6.30. NEXT SENTENCE + +図6-75-NEXT SENTENCE構文 + +![alt text](Image/6-75-Nextsentnce.png) + +NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 + +1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 + +2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 + +3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 + +4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 + + + +[ページトップへ](6-30.md) + diff --git a/automanual/old_delete/6-31.md b/automanual/old_delete/6-31.md new file mode 100644 index 0000000..ecbd4f0 --- /dev/null +++ b/automanual/old_delete/6-31.md @@ -0,0 +1,38 @@ + +[前へ](6-30.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-1.md) + +## 6.31. OPEN + +図6-76-OPEN構文 + +![alt text](Image/6-76-Open.png) + +OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 + +1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 + +2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 + +3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 + +4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 + + | オプション | 処理 | + | --- | --- | + | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | + | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | + | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | + +5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 + +6. WITH NO REWIND句とWITH LOCK句は機能しない。 + + WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 + + WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 + + + +[ページトップへ](6-31.md) + diff --git a/automanual/old_delete/6-32-1.md b/automanual/old_delete/6-32-1.md new file mode 100644 index 0000000..46e3439 --- /dev/null +++ b/automanual/old_delete/6-32-1.md @@ -0,0 +1,71 @@ + +[前へ](6-31.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-2.md) + +## 6.32. PERFORM + +### 6.32.1. PERFORM文の書き方1 ― 手続き型 + +図6-77-手続き型PERFORM構文 + +![alt text](Image/6-77-Perform.png) + +制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 + +1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 + +2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 + +3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 +4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 + +5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 + +6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 + +7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 + +8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 + +9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 + +10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 + +11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 + + + 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 + + ![alt text](Image/6-32-1-1.png) + + ``` + 01 PERFORM-DEMO. + 05 PD-ROW OCCURS 3 TIMES. + 10 PD-COL OCCURS 4 TIMES. + 15 PD PIC X(1). + 01 PD-Col-No PIC 9 COMP. + 01 PD-Row-No PIC 9 COMP. + ``` + ![alt text](Image/6-32-1-2.png) + + ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 + PERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 + AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. + ``` + ![alt text](Image/6-32-1-3.png) + + 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 + + ``` + PERFORM 100-Visit-Each-PD WITH TEST AFTER + VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 + VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. + ``` + + + +[ページトップへ](6-32-1.md) + diff --git a/automanual/old_delete/6-32-2.md b/automanual/old_delete/6-32-2.md new file mode 100644 index 0000000..ca9b4df --- /dev/null +++ b/automanual/old_delete/6-32-2.md @@ -0,0 +1,19 @@ + +[前へ](6-32-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-1.md) + +### 6.32.2. PERFORM文の書き方2 ― インライン型 + +図6-78-インライン型PERFORM構文 + +![alt text](Image/6-78-Perform.png) + +PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 + +1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 + +2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 + + + +[ページトップへ](6-32-2.md) + diff --git a/automanual/old_delete/6-33-1.md b/automanual/old_delete/6-33-1.md new file mode 100644 index 0000000..e28bc9b --- /dev/null +++ b/automanual/old_delete/6-33-1.md @@ -0,0 +1,43 @@ + +[前へ](6-32-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-2.md) + +## 6.33. READ + +### 6.33.1. READ文の書き方1 ― 順次読み取り + +図6-79-READ構文(順次読み取り) + +![alt text](Image/6-79-Read.png) + +ファイルから次の(または前の)レコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 + +5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 + +7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 + +8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 + +11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 + + + +[ページトップへ](6-33-1.md) + diff --git a/automanual/old_delete/6-33-2.md b/automanual/old_delete/6-33-2.md new file mode 100644 index 0000000..4887805 --- /dev/null +++ b/automanual/old_delete/6-33-2.md @@ -0,0 +1,51 @@ + +[前へ](6-33-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-34.md) + +### 6.33.2. READ文の書き方2 ― ランダム読み取り + +図6-80-READ構文(ランダム読み取り) + +![alt text](Image/6-80-Read.png) + +ファイルから任意のレコードを取得する。 + +1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 + +2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 + +3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 + +4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ + ``` + READ ファイル名-1 + ``` + ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 + +5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 + + KEY句がない場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 + + KEY句が指定されている場合: + + - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 + + - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 + +6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 + +7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 + +8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 + +10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 + + + +[ページトップへ](6-33-2.md) + diff --git a/automanual/old_delete/6-34.md b/automanual/old_delete/6-34.md new file mode 100644 index 0000000..cb0016c --- /dev/null +++ b/automanual/old_delete/6-34.md @@ -0,0 +1,19 @@ + +[前へ](6-33-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-35.md) + +## 6.34. RELEASE + +図6-81-RELEASE構文 + +![alt text](Image/6-81-Release.png) + +RELEASE文は、整列ファイルに新しいレコードを追加する。 + +1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 + +2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 + + + +[ページトップへ](6-34.md) + diff --git a/automanual/old_delete/6-35.md b/automanual/old_delete/6-35.md new file mode 100644 index 0000000..ed88056 --- /dev/null +++ b/automanual/old_delete/6-35.md @@ -0,0 +1,21 @@ + +[前へ](6-34.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-36.md) + +## 6.35. RETURN + +図6-82-RETURN構文 + +![alt text](Image/6-82-Return.png) + +RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 + +1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 + +2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 + +3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 + + + +[ページトップへ](6-35.md) + diff --git a/automanual/old_delete/6-36.md b/automanual/old_delete/6-36.md new file mode 100644 index 0000000..f591d4a --- /dev/null +++ b/automanual/old_delete/6-36.md @@ -0,0 +1,41 @@ + +[前へ](6-35.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-37.md) + +## 6.36. REWRITE + +図6-83-REWRITE構文 + +![alt text](Image/6-83-Rewrite.png) + +REWRITE文は、ディスクファイル上の論理レコードを置き換える。 + +1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 + +2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 + +3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 + +4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 + +5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 + +6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: + + a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 + + b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 + +7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: + + a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 + + b. レコード名-1のサイズは更新される可能性がある。 + +8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 + +9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 + + + +[ページトップへ](6-36.md) + diff --git a/automanual/old_delete/6-37.md b/automanual/old_delete/6-37.md new file mode 100644 index 0000000..dfe2ac7 --- /dev/null +++ b/automanual/old_delete/6-37.md @@ -0,0 +1,17 @@ + +[前へ](6-36.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-1.md) + +## 6.37. ROLLBACK + +図6-84-ROLLBACK構文 + +![alt text](Image/6-84-Rollback.png) + +ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 + +1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 + + + +[ページトップへ](6-37.md) + diff --git a/automanual/old_delete/6-38-1.md b/automanual/old_delete/6-38-1.md new file mode 100644 index 0000000..76a8fda --- /dev/null +++ b/automanual/old_delete/6-38-1.md @@ -0,0 +1,33 @@ + +[前へ](6-37.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-2.md) + +## 6.38. SEARCH + +### 6.38.1. SEARCH文の書き方1 ― 順次探索 + +図6-85-SEARCH構文(順次探索) + +![alt text](Image/6-85-Search.png) + +SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 + +1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 + +2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 + +3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: + ``` + SET 指標名-1 TO 1 + ``` +4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 + +5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 + +6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 + +7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 +  + + +[ページトップへ](6-38-1.md) + diff --git a/automanual/old_delete/6-38-2.md b/automanual/old_delete/6-38-2.md new file mode 100644 index 0000000..82b1fe2 --- /dev/null +++ b/automanual/old_delete/6-38-2.md @@ -0,0 +1,68 @@ + +[前へ](6-38-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-1.md) + +### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) + +図6-86-SEARCH構文(二分探索) + +![alt text](Image/6-86-Search.png) + +整列されたテーブルに対して二分探索を実行する。 + +1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 + +2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 + + a. テーブルは上記1項の要件を満たしている。 + + b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` + + c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 + + aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 + +3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 + +4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 + +5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 + +6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 + +7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 + +8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` + + a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 + + b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 + + - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 + + - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 + + - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 + + c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 + + d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 + +上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 + +コンピュータ研究者は、二つの探索方法を次のように比較する: + +- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 + +- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 + +探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 + +--- +`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 + +`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 + + + +[ページトップへ](6-38-2.md) + diff --git a/automanual/old_delete/6-39-1.md b/automanual/old_delete/6-39-1.md new file mode 100644 index 0000000..b56f074 --- /dev/null +++ b/automanual/old_delete/6-39-1.md @@ -0,0 +1,29 @@ + +[前へ](6-38-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-2.md) + +## 6.39. SET + +### 6.39.1. SET文の書き方1 ― 環境設定 + +図6-87-SET構文(環境設定) + +![alt text](Image/6-87-Set.png) + +プログラム内から環境値を簡単に設定することができる。 + +1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 + +2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 + + DSIPLAY SET ENVIRONMENT “VARNAME” TO + "VALUE" + “VARNAME” UPON ENVIRONMENT-NAME + END-DISPLAY + DSIPLAY + “VALUE” UPON ENVIRONMENT-VALUE + END-DISPLAY + + + +[ページトップへ](6-39-1.md) + diff --git a/automanual/old_delete/6-39-2.md b/automanual/old_delete/6-39-2.md new file mode 100644 index 0000000..9559ffd --- /dev/null +++ b/automanual/old_delete/6-39-2.md @@ -0,0 +1,23 @@ + +[前へ](6-39-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-3.md) + +### 6.39.2. SET文の書き方2 ― プログラムポインター設定 + +図6-88-SET構文(プログラムポインター設定) + +![alt text](Image/6-88-Set.png) + +手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 + +1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 + +2. program-pointer-1はプログラムポインターとして使用しなければならない。 + +3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 + +4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 + + + +[ページトップへ](6-39-2.md) + diff --git a/automanual/old_delete/6-39-3.md b/automanual/old_delete/6-39-3.md new file mode 100644 index 0000000..6628980 --- /dev/null +++ b/automanual/old_delete/6-39-3.md @@ -0,0 +1,19 @@ + +[前へ](6-39-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-4.md) + +### 6.39.3. SET文の書き方3 ― アドレス設定 + +図6-89-SET構文(アドレス設定) + +![alt text](Image/6-89-Set.png) + +データ項目の内容ではなく、アドレスを処理するために使われる。 + +1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 + +2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 + + + +[ページトップへ](6-39-3.md) + diff --git a/automanual/old_delete/6-39-4.md b/automanual/old_delete/6-39-4.md new file mode 100644 index 0000000..217529d --- /dev/null +++ b/automanual/old_delete/6-39-4.md @@ -0,0 +1,17 @@ + +[前へ](6-39-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-5.md) + +### 6.39.4. SET文の書き方4 ― インデックス設定 + +図6-90-SET構文(インデックス設定) + +![alt text](Image/6-90-Set.png) + +USAGE INDEXデータ項目に値を割り当てる。 + +1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 + + + +[ページトップへ](6-39-4.md) + diff --git a/automanual/old_delete/6-39-5.md b/automanual/old_delete/6-39-5.md new file mode 100644 index 0000000..4ceaa3f --- /dev/null +++ b/automanual/old_delete/6-39-5.md @@ -0,0 +1,19 @@ + +[前へ](6-39-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-6.md) + +### 6.39.5. SET文の書き方5 ― UP/DOWN設定 + +図6-91-SET構文(UP/DOWN設定) + +![alt text](Image/6-91-Set.png) + +インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 + +1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 + +2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 + + + +[ページトップへ](6-39-5.md) + diff --git a/automanual/old_delete/6-39-6.md b/automanual/old_delete/6-39-6.md new file mode 100644 index 0000000..ea4de22 --- /dev/null +++ b/automanual/old_delete/6-39-6.md @@ -0,0 +1,21 @@ + +[前へ](6-39-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-7.md) + +### 6.39.6. SET文の書き方6 ― 条件名設定 + +図6-92-SET構文(条件名設定) + +![alt text](Image/6-92-Set.png) + +レベル88条件名のTRUE/FALSE値を指定することができる。 + +1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 + +2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 + +3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 + + + +[ページトップへ](6-39-6.md) + diff --git a/automanual/old_delete/6-39-7.md b/automanual/old_delete/6-39-7.md new file mode 100644 index 0000000..e2c6054 --- /dev/null +++ b/automanual/old_delete/6-39-7.md @@ -0,0 +1,17 @@ + +[前へ](6-39-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-1.md) + +### 6.39.7. SET文の書き方7 ― スイッチ設定 + +図6-93-SET構文(スイッチ設定) + +![alt text](Image/6-93-Set.png) + +スイッチをオンまたはオフにする。 + +1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 + + + +[ページトップへ](6-39-7.md) + diff --git a/automanual/old_delete/6-4-1.md b/automanual/old_delete/6-4-1.md new file mode 100644 index 0000000..a1ea70c --- /dev/null +++ b/automanual/old_delete/6-4-1.md @@ -0,0 +1,21 @@ + +[前へ](6-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-2.md) + +## 6.4. ACCEPT + +### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り + +図6-18-ACCEPT構文(コンソールからの読み取り) + +![alt text](Image/6-18.png) + +コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 + +1. FROM句を使う場合、指定する呼び名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義の呼び名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 + +2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 + + + +[ページトップへ](6-4-1.md) + diff --git a/automanual/old_delete/6-4-2.md b/automanual/old_delete/6-4-2.md new file mode 100644 index 0000000..53143db --- /dev/null +++ b/automanual/old_delete/6-4-2.md @@ -0,0 +1,32 @@ + +[前へ](6-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-3.md) + +### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 + +図6-19-ACCEPT構文(コマンドライン引数) + +![alt text](Image/6-19.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 + +2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 + + - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 + + - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 + + - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 + +3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 + +4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 + + + +[ページトップへ](6-4-2.md) + diff --git a/automanual/old_delete/6-4-3.md b/automanual/old_delete/6-4-3.md new file mode 100644 index 0000000..edabd0a --- /dev/null +++ b/automanual/old_delete/6-4-3.md @@ -0,0 +1,24 @@ + +[前へ](6-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-4.md) + +### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 + +図6-20-ACCEPT構文(環境変数値の取得) + +![alt text](Image/6-20.png) + +プログラムのコマンドラインから引数を取得するために使用する。 + +1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 + +2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 + +3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + +--- +`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 + + + +[ページトップへ](6-4-3.md) + diff --git a/automanual/old_delete/6-4-4.md b/automanual/old_delete/6-4-4.md new file mode 100644 index 0000000..b08a2f9 --- /dev/null +++ b/automanual/old_delete/6-4-4.md @@ -0,0 +1,27 @@ + +[前へ](6-4-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-5.md) + +### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 + +図6-21-ACCEPT構文(画面データの取得) + +![alt text](Image/6-21.png) + +画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 + +1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 + +2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 + +3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 + +4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 + +5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 + +6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 + + + +[ページトップへ](6-4-4.md) + diff --git a/automanual/old_delete/6-4-5.md b/automanual/old_delete/6-4-5.md new file mode 100644 index 0000000..0d3aff0 --- /dev/null +++ b/automanual/old_delete/6-4-5.md @@ -0,0 +1,21 @@ + +[前へ](6-4-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-6.md) + +### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 + +図6-22-ACCEPT構文(日付/時刻の取得)構文 + +![alt text](Image/6-22.png) + +システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 + +1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 + + 表6-23-ACCEPTオプション(日付/時刻の取得) + + ![alt text](Image/6-23.png) + + + +[ページトップへ](6-4-5.md) + diff --git a/automanual/old_delete/6-4-6.md b/automanual/old_delete/6-4-6.md new file mode 100644 index 0000000..c1426dc --- /dev/null +++ b/automanual/old_delete/6-4-6.md @@ -0,0 +1,17 @@ + +[前へ](6-4-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-7.md) + +### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 + +図6-24-ACCEPT(画面サイズデータの取得)構文 + +![alt text](Image/6-24.png) + +プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 + +1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 + + + +[ページトップへ](6-4-6.md) + diff --git a/automanual/old_delete/6-4-7.md b/automanual/old_delete/6-4-7.md new file mode 100644 index 0000000..653faa9 --- /dev/null +++ b/automanual/old_delete/6-4-7.md @@ -0,0 +1,15 @@ + +[前へ](6-4-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-1.md) + +### 6.4.7. ACCEPT文の例外処理 + +図6-25-ACCEPT例外処理構文 + +![alt text](Image/6-25.png) + +ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 + + + +[ページトップへ](6-4-7.md) + diff --git a/automanual/old_delete/6-40-1.md b/automanual/old_delete/6-40-1.md new file mode 100644 index 0000000..6eaa9f0 --- /dev/null +++ b/automanual/old_delete/6-40-1.md @@ -0,0 +1,89 @@ + +[前へ](6-39-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-2.md) + +## 6.40. SORT + +### 6.40.1. SORT文の書き方1 ― ファイルソート + +図6-94-SORT構文(ファイルソート) + +![alt text](Image/6-94-Sort.png) + +一つ以上のキー項目に従って、大量のデータを整列することができる。 + +1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 + +2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 + +3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 + +4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 + +6. SORT文は次の3段階の働きがある。 + + ステージ1(入力フェーズ): + + a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 + + b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 + + c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 + + d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 + + e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 + + g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 + + h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 + + ステージ2(ソートフェーズ): + + a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + + b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 + + SORT Sort-File + ASCENDING KEY Transaction-Date + ASCENDING KEY Account-Number + DESCENDING KEY Transaction-Amount + . + . + . + + + このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 + + c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 + + ステージ3(出力フェーズ): + + a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 + + b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 + + c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 + + d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 + + e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + + f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 + + g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 + +7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 + +--- +`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 + +`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 + + + +[ページトップへ](6-40-1.md) + diff --git a/automanual/old_delete/6-40-2.md b/automanual/old_delete/6-40-2.md new file mode 100644 index 0000000..a8060ec --- /dev/null +++ b/automanual/old_delete/6-40-2.md @@ -0,0 +1,29 @@ + +[前へ](6-40-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-41.md) + +### 6.40.2. SORT文の書き方2 ― テーブルソート + +図6-95-SORT構文(テーブルソート) + +![alt text](Image/6-95-Set.png) + +一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 + +1. テーブル名データ項目には、OCCURS句が必要である。 + +2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 + +3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 + +4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 + +5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 + +6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 + +7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 + + + +[ページトップへ](6-40-2.md) + diff --git a/automanual/old_delete/6-41.md b/automanual/old_delete/6-41.md new file mode 100644 index 0000000..64090d7 --- /dev/null +++ b/automanual/old_delete/6-41.md @@ -0,0 +1,41 @@ + +[前へ](6-40-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-42.md) + +## 6.41. START + +図6-96-START構文 + +![alt text](Image/6-96-Start.png) + +START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 + +1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 + +2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 + +3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 + +4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 + +5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 + +6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 + +7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 + + a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 + + b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 + +8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 + +9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 + +10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 + +11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 + + + +[ページトップへ](6-41.md) + diff --git a/automanual/old_delete/6-42.md b/automanual/old_delete/6-42.md new file mode 100644 index 0000000..be9019b --- /dev/null +++ b/automanual/old_delete/6-42.md @@ -0,0 +1,26 @@ + +[前へ](6-41.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-43.md) + +## 6.42. STOP + +図6-97-STOP構文 + +![alt text](Image/6-97-Stop.png) + +STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 + +1. RETURNING句とGIVING句は同意義のものとして利用できる。 + +2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 + +3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 + +4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: + + STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE + STOP RUN + + + +[ページトップへ](6-42.md) + diff --git a/automanual/old_delete/6-43.md b/automanual/old_delete/6-43.md new file mode 100644 index 0000000..5c151e9 --- /dev/null +++ b/automanual/old_delete/6-43.md @@ -0,0 +1,37 @@ + +[前へ](6-42.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-1.md) + +## 6.43. STRING + +図6-98-STRING構文 + +![alt text](Image/6-98-String.png) + +STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 + +1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 + +2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 + +3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 + +4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 + +5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 + +6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 + +7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 + +8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 + +9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 + +10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 + +11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 + + + +[ページトップへ](6-43.md) + diff --git a/automanual/old_delete/6-44-1.md b/automanual/old_delete/6-44-1.md new file mode 100644 index 0000000..5623337 --- /dev/null +++ b/automanual/old_delete/6-44-1.md @@ -0,0 +1,23 @@ + +[前へ](6-43.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-2.md) + +## 6.44. SUBTRACT + +### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM + +図6-99-SUBSTRACT構文 + +![alt text](Image/6-99-Subtract.png) + +FROMの前にあるすべての引数(一意名-1または定数-1)の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + + + +[ページトップへ](6-44-1.md) + diff --git a/automanual/old_delete/6-44-2.md b/automanual/old_delete/6-44-2.md new file mode 100644 index 0000000..418f750 --- /dev/null +++ b/automanual/old_delete/6-44-2.md @@ -0,0 +1,23 @@ + +[前へ](6-44-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-3.md) + +### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING + +図6-100-SUBSTRACT GIVING構文 + +![alt text](Image/6-100-Subtract.png) + +FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + + + +[ページトップへ](6-44-2.md) + diff --git a/automanual/old_delete/6-44-3.md b/automanual/old_delete/6-44-3.md new file mode 100644 index 0000000..2fc13d9 --- /dev/null +++ b/automanual/old_delete/6-44-3.md @@ -0,0 +1,19 @@ + +[前へ](6-44-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-45.md) + +### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING + +図6-101-SUBSTRACT CORRESPONDING構文 + +![alt text](Image/6-101-Subtract.png) + +二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 + +1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 + + + +[ページトップへ](6-44-3.md) + diff --git a/automanual/old_delete/6-45.md b/automanual/old_delete/6-45.md new file mode 100644 index 0000000..7479c24 --- /dev/null +++ b/automanual/old_delete/6-45.md @@ -0,0 +1,15 @@ + +[前へ](6-44-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-46.md) + +## 6.45. SUPPRESS + +図6-102-SUPPRESS構文 + +![alt text](Image/6-102-Suppress.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 + + + +[ページトップへ](6-45.md) + diff --git a/automanual/old_delete/6-46.md b/automanual/old_delete/6-46.md new file mode 100644 index 0000000..e7fcdf4 --- /dev/null +++ b/automanual/old_delete/6-46.md @@ -0,0 +1,15 @@ + +[前へ](6-45.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-47.md) + +## 6.46. TERMINATE + +図6-103-TERMINATE構文 + +![alt text](Image/6-103-Terminate.png) + +opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 + + + +[ページトップへ](6-46.md) + diff --git a/automanual/old_delete/6-47.md b/automanual/old_delete/6-47.md new file mode 100644 index 0000000..a0cec1d --- /dev/null +++ b/automanual/old_delete/6-47.md @@ -0,0 +1,31 @@ + +[前へ](6-46.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-48.md) + +## 6.47. TRANSFORM + +図6-104-TRANSFORM構文 + +![alt text](Image/6-104-Transform.png) + +TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 + +1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 + +2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 + +3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 + +4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 + +5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 + +6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 + + 図6-105-機能的なTRANSFORM文 + + ![alt text](Image/6-105-Transform.png) + + + +[ページトップへ](6-47.md) + diff --git a/automanual/old_delete/6-48.md b/automanual/old_delete/6-48.md new file mode 100644 index 0000000..bf31b3e --- /dev/null +++ b/automanual/old_delete/6-48.md @@ -0,0 +1,22 @@ + +[前へ](6-47.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-49.md) + +## 6.48. UNLOCK + +図6-106-UNLOCK構文 + +![alt text](Image/6-106-Unlock.png) + +この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 + +1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 + +2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 + +--- +`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 + + + +[ページトップへ](6-48.md) + diff --git a/automanual/old_delete/6-49.md b/automanual/old_delete/6-49.md new file mode 100644 index 0000000..863faa3 --- /dev/null +++ b/automanual/old_delete/6-49.md @@ -0,0 +1,68 @@ + +[前へ](6-48.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-50.md) + +## 6.49. UNSTRING + +図6-107-UNSTRING構文 + +![alt text](Image/6-107-Unstring.png) + +UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 + +1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 + +2. 定数-1および定数-2は、英数字の定数でなければならない。 + +3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 + +4. 一意名-10の値は0より大きい必要がある。 + +5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 + +6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 + +7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 + +8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 + +9. ソース文字列が部分文字列に解析される例を次に示す: + + ![alt text](Image/6-49-1.png) + + 図6-108-STRING文の例 + + ![alt text](Image/6-108-Unstring.png) + + 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 + + ![alt text](Image/6-49-2.png) + + すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 + + すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 + +10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-3.png) + +11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 + + ![alt text](Image/6-49-4.png) + +12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 + +13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 + +14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 + +15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 + +--- +`27` 空白文字列のMOVEは、空白のMOVEと同じである。 + +`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 + + + +[ページトップへ](6-49.md) + diff --git a/automanual/old_delete/6-5-1.md b/automanual/old_delete/6-5-1.md new file mode 100644 index 0000000..1d1a743 --- /dev/null +++ b/automanual/old_delete/6-5-1.md @@ -0,0 +1,33 @@ + +[前へ](6-4-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-2.md) + +## 6.5. ADD + +### 6.5.1. ADD文の書き方1 ― ADD TO + +図6-26-ADD TO構文 + +![alt text](Image/6-26.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 定数-1は数字定数でなければならない。 + +3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 + +4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 + +5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 + + 図6-27-ON SIZE ERROR句を使用するサンプルプログラム + + ![alt text](Image/6-27.png) + +6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 + + + +[ページトップへ](6-5-1.md) + diff --git a/automanual/old_delete/6-5-2.md b/automanual/old_delete/6-5-2.md new file mode 100644 index 0000000..5a1591e --- /dev/null +++ b/automanual/old_delete/6-5-2.md @@ -0,0 +1,25 @@ + +[前へ](6-5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-3.md) + +### 6.5.2. ADD文の書き方2 ― ADD GIVING + +図6-28-ADD GIVING構文 + +![alt text](Image/6-28.png) + +TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 + +1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 + +2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 + +3. 定数-1は数字定数でなければならない。 + +4. 一意名-2の内容は変更できない。 + +5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + + + +[ページトップへ](6-5-2.md) + diff --git a/automanual/old_delete/6-5-3.md b/automanual/old_delete/6-5-3.md new file mode 100644 index 0000000..03d9d52 --- /dev/null +++ b/automanual/old_delete/6-5-3.md @@ -0,0 +1,19 @@ + +[前へ](6-5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-6.md) + +### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING + +図6-29-ADD CORRESPONDING構文 + +![alt text](Image/6-29.png) + +二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 + +1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 + +2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 + + + +[ページトップへ](6-5-3.md) + diff --git a/automanual/old_delete/6-50.md b/automanual/old_delete/6-50.md new file mode 100644 index 0000000..5f3b6f8 --- /dev/null +++ b/automanual/old_delete/6-50.md @@ -0,0 +1,88 @@ + +[前へ](6-49.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-1.md) + +## 6.50. WRITE + +図6-109-WRITE構文 + +![alt text](Image/6-109-Write.png) + +WRITE文は、OPENファイルに新しいレコードを書き込む。 + +1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 + +2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 + +3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 + +4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 + +5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 + +6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 + +7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 + +8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 + +9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 + +10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 + +11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 + +12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 + +13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: + + a. AFTER ADVANCINGが指定されている場合: + + - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + c. BEFORE ADVANCINGが指定されている場合: + + - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 + + - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 + + d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 + + - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 + +14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 + + FD Report-File + LINAGE IS 66 LINES + ........WITH FOOTER AT 57 + ........LINES AT TOP 3 + ........LINES AT BOTTOM 3 + . + . + . + OPEN OUTPUT Report-File + PERFORM Generate-Page-Header + . + . + . + WRITE Report-Rec AFTER ADVANCING 1 LINE + AT END-OF-PAGE PERFORM Generate-Page-Header + END-WRITE + . + . + . + CLOSE Report-File + +15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 + +16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 + +17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 + + + +[ページトップへ](6-50.md) + diff --git a/automanual/old_delete/6-6.md b/automanual/old_delete/6-6.md new file mode 100644 index 0000000..902885f --- /dev/null +++ b/automanual/old_delete/6-6.md @@ -0,0 +1,49 @@ + +[前へ](6-5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-7.md) + +## 6.6. ALLOCATE + +図6-30-ALLOCATE構文 + +![alt text](Image/6-30.png) + +ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 + +1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 + +2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 + +3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 + +4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 + +5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 +6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 + +7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 + +8. 基本的な使用法は二つあり、最も単純なものは次の例である。 + + ALLOCATE My-01-Item + + `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 + + 二つ目の使用法は以下の通りである。 + + ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. + + SET ADDRESS OF My-01-Item TO The-Pointer. + + ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 + + 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 + +9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 + +--- +`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 + + + +[ページトップへ](6-6.md) + diff --git a/automanual/old_delete/6-7.md b/automanual/old_delete/6-7.md new file mode 100644 index 0000000..27ee31f --- /dev/null +++ b/automanual/old_delete/6-7.md @@ -0,0 +1,54 @@ + +[前へ](6-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-1.md) + +## 6.7. CALL + +図6-31-CALL構文 + +![alt text](Image/6-31.png) + +CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 + +1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 + +2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 + +3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 + +4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 + +5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 + +6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 + +7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 + +8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 + +9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 + +10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 + +11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 + + 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) + + ![alt text](Image/6-32.png) + +12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 + + 図6-33-CALL BY VALUE句 + + ![alt text](Image/6-33.png) + +13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 + +14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 + +--- +`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 + + + +[ページトップへ](6-7.md) + diff --git a/automanual/old_delete/6-8-1.md b/automanual/old_delete/6-8-1.md new file mode 100644 index 0000000..9bd376e --- /dev/null +++ b/automanual/old_delete/6-8-1.md @@ -0,0 +1,19 @@ + +[前へ](6-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-2.md) + +## 6.8. CANCEL + +### 6.8.1. CANCEL文の書き方1 ― CANCEL + +図6-34-CANCEL構文 + +![alt text](Image/6-34.png) + +CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 + +1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 + + + +[ページトップへ](6-8-1.md) + diff --git a/automanual/old_delete/6-8-2.md b/automanual/old_delete/6-8-2.md new file mode 100644 index 0000000..873aba5 --- /dev/null +++ b/automanual/old_delete/6-8-2.md @@ -0,0 +1,15 @@ + +[前へ](6-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-9.md) + +### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL + +図6-35-CANCEL ALL構文 + +![alt text](Image/6-35(cancel).png) + +CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 + + + +[ページトップへ](6-8-2.md) + diff --git a/automanual/old_delete/6-9.md b/automanual/old_delete/6-9.md new file mode 100644 index 0000000..3175531 --- /dev/null +++ b/automanual/old_delete/6-9.md @@ -0,0 +1,29 @@ + +[前へ](6-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-10.md) + +## 6.9. CLOSE + +図6-36-CLOSE構文 + +![alt text](Image/6-36-CLOSE.png) + +CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 + +1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 + +2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 + +3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 + +4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 + +5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 + +6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 + +7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 + + + +[ページトップへ](6-9.md) + diff --git a/automanual/old_delete/7-1.md b/automanual/old_delete/7-1.md new file mode 100644 index 0000000..9396937 --- /dev/null +++ b/automanual/old_delete/7-1.md @@ -0,0 +1,27 @@ + +[前へ](6-50.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-2.md) + +# 7. 日本語の使用 + +日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 + +## 7.1. 英数字項目の日本語 + +文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 + + + 01 データ項目1 PIC X(8) VALUE"顧客code" + + 01 データ項目2 PIC X(10) VALUE"顧客コード" + +データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 + +注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 + +1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 +2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) + + + +[ページトップへ](7-1.md) + diff --git a/automanual/old_delete/7-2.md b/automanual/old_delete/7-2.md new file mode 100644 index 0000000..2a7703d --- /dev/null +++ b/automanual/old_delete/7-2.md @@ -0,0 +1,20 @@ + +[前へ](7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-1.md) + +## 7.2. 日本語項目と表意定数 + +日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 + +表7-1-日本語項目と表意定数の値 + +| 表意定数 | シフトJISコード | +| --- | :--- | +| SPACE(S) | 日本語空白文字 X"8140" | +| HIGH-VALUE(S) | X"FFFF" | +| LOW-VALUE(S) | X"0000" | +| ALL 定数 | 定数の値に依存する | + + + +[ページトップへ](7-2.md) + diff --git a/automanual/old_delete/7-3-1.md b/automanual/old_delete/7-3-1.md new file mode 100644 index 0000000..263bdb1 --- /dev/null +++ b/automanual/old_delete/7-3-1.md @@ -0,0 +1,56 @@ + +[前へ](7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-2.md) + +## 7.3. 各命令文と日本語の取扱い + +### 7.3.1. MOVE文 + +MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 + +表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 + +表7-2-転記の処理方法 + +| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | +| :--- | :--- | :--- | +| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | +| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | +| 非整数 | 日本語,日本語編集 | コンパイルエラー | +| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | +| 日本語,日本語編集 | 英字 | そのまま転記 | +| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | +| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | +| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | + +データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 + +文字には半角カタカナも含まれる。 + +ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 + +受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 + +表7-3-送出し側データ項目の内容に対する処理方法 + +| 送出し側データ項目の内容 | 処理方式 | +| --- | --- | +| 正しい文字 | 全角文字へコード変換 | +| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | +| 正しい日本語文字 | そのまま転記 | +| 不正な日本語文字(≠文字) | そのまま転記 | +| X”00” | X”0000”29 | +| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | +| X”FF” | X”FFFF” | +| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | + +ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 + +--- +`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 + + + +[ページトップへ](7-3-1.md) + diff --git a/automanual/old_delete/7-3-2.md b/automanual/old_delete/7-3-2.md new file mode 100644 index 0000000..b7803a4 --- /dev/null +++ b/automanual/old_delete/7-3-2.md @@ -0,0 +1,13 @@ + +[前へ](7-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-4.md) + +### 7.3.2. ACCEPT/DISPLAY文 + +ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 + +日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 + + + +[ページトップへ](7-3-2.md) + diff --git a/automanual/old_delete/7-4.md b/automanual/old_delete/7-4.md new file mode 100644 index 0000000..228240a --- /dev/null +++ b/automanual/old_delete/7-4.md @@ -0,0 +1,19 @@ + +[前へ](7-3-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-1.md) + +## 7.4. UTF-8の使用 + +opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 + +1. PICTURE句において、「N」1つは3バイトと見なす。 + +2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 + +3. 空白詰めは半角空白で行われる。 + +4. STRING文において、項目の種類が混在した時のチェックを抑止する。 + + + +[ページトップへ](7-4.md) + diff --git a/automanual/old_delete/8-1-1.md b/automanual/old_delete/8-1-1.md new file mode 100644 index 0000000..77ded76 --- /dev/null +++ b/automanual/old_delete/8-1-1.md @@ -0,0 +1,19 @@ + +[前へ](7-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-2.md) + +# 8. opensource COBOLシステムインターフェース + +## 8.1. opensource COBOLコンパイラの使い方(cobc) + +### 8.1.1. 解説 + +プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 +プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 +空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 +opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 +opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 + + + +[ページトップへ](8-1-1.md) + diff --git a/automanual/old_delete/8-1-2.md b/automanual/old_delete/8-1-2.md new file mode 100644 index 0000000..6069ba9 --- /dev/null +++ b/automanual/old_delete/8-1-2.md @@ -0,0 +1,95 @@ + +[前へ](8-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-3.md) + +### 8.1.2. コンパイルオプション + +次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 + + 使い方: cobc [options] file... + オプション: + --help このメッセージを表示します + --version, -V コンパイラのバージョンを表示します + -v コンパイラが起動したプログラムを表示します + -x 実行可能プログラムをビルドします + -m 動的ロード可能モジュールをビルドします(デフォルト) + -std=<方言> 指定した方言に基づいて警告/機能します : + cobol2002 Cobol 2002 + cobol85 Cobol 85 + ibm IBM互換 + mvs MVS互換 + bs2000 BS2000互換 + mf Micro Focus互換 + default 指定しない + config/default.conf および config/*.conf を参照してください + -free 自由形式を使用します + -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します + -fixed 固定形式を使用します(デフォルト) + -O, -O2, -Os 最適化を有功にします + -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします + -debug すべての実行時エラーチェックを有功にします + -o <ファイル> 出力先を <ファイル> にします + -b すべての入力ファイルをひとつに結合します + 動的ロード可能モジュール + -E 前処理のみ; コンパイルやリンクを行いません + -C トランスレートのみ; COBOL から C へ変換します + -S コンパイルのみ; アセンブリファイルを出力します + -c コンパイルとアセンブルを行い、リンクを行いません + -t <ファイル> プログラムリストを <ファイル> に生成します + -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます + -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます + -l ライブラリ をリンクします + -B Cコンパイルフェーズに を追加します + -Q Cリンクフェーズに を追加します + -D Cコンパイラに を渡します + -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください + --list-reserved 予約語の一覧を表示します + --list-intrinsics 組み込み関数の一覧を表示します + --list-mnemonics 作成者語の一覧を表示します + -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) + -MT 依存関係リストで使用される対象ファイルを指定します + -MF <ファイル> 依存関係リストを <ファイル> に生成します + -ext 既定のファイル拡張子を追加します + -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします + -reference_check 実行時の参照チェックを有効にします + -constant(=) $IF 文で評価する定数名 に 値 を設定します + + -W すべての警告を有功にする + -Wall 以下を除くすべての警告を有功にする + -Wobsolete 廃要素が使われていれば警告する + -Warchaic 古い仕様が使われていれば警告する + -Wredefinition データ項目の再定義を警告する + -Wconstant 不適切な定数を警告する + -Wparentheses OR と AND が括弧なしで並んでいれば警告する + -Wstrict-typing タイプの不適合を厳密に警告する + -Wimplicit-define データ項目の再定義を警告する + -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する + (-Wall指定時は適用されません) + -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) + -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) + -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) + -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) + -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) + -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) + + -ftrace トレースコードの生成(実行された節/段落の追跡) + -ftraceall トレースコードの生成(実行された節/段落/文の追跡) + -fsyntax-only 文法チェックのみ。何も出力しない + -fdebugging-line デバッグ行(標識領域に'D')を有効にする + -fsource-location ソース行情報の生成(-debugか-gで有効) + -fimplicit-init Cobolラインタイム初期化の自動実行 + -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) + -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) + -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) + -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) + -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) + -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない + -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す + -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) + -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す + +[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 + + + +[ページトップへ](8-1-2.md) + diff --git a/automanual/old_delete/8-1-3.md b/automanual/old_delete/8-1-3.md new file mode 100644 index 0000000..e7ca77f --- /dev/null +++ b/automanual/old_delete/8-1-3.md @@ -0,0 +1,17 @@ + +[前へ](8-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-4.md) + +### 8.1.3. 実行可能プログラムのコンパイル + +最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 + + cobc –x prog1.cbl prog2.cbl prog3.cbl + +メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 + +これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 + + + +[ページトップへ](8-1-3.md) + diff --git a/automanual/old_delete/8-1-4.md b/automanual/old_delete/8-1-4.md new file mode 100644 index 0000000..3b1b56a --- /dev/null +++ b/automanual/old_delete/8-1-4.md @@ -0,0 +1,42 @@ + +[前へ](8-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-5.md) + +### 8.1.4. 動的にロード可能なサブプログラム + +実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 + + cobc –m sprog1.cbl +または + + cobc –m sprog1.cbl sprog2.cbl sprog3.cbl + +上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 + +次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 + +1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 + +2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 + +3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 + +4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき + + a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 + + b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 + + c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 + + - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 + + - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 + +5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 + +「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 + + + +[ページトップへ](8-1-4.md) + diff --git a/automanual/old_delete/8-1-5.md b/automanual/old_delete/8-1-5.md new file mode 100644 index 0000000..5423e88 --- /dev/null +++ b/automanual/old_delete/8-1-5.md @@ -0,0 +1,23 @@ + +[前へ](8-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-6.md) + +### 8.1.5. 静的サブルーチン + +opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 + + cobc –S sprog1.cbl + +(注:「**-S**」は大文字で表記する) + +これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 + +メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 + + cobc –x mainprog.cbl sprog1.s + +複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 + + + +[ページトップへ](8-1-5.md) + diff --git a/automanual/old_delete/8-1-6.md b/automanual/old_delete/8-1-6.md new file mode 100644 index 0000000..a513ea2 --- /dev/null +++ b/automanual/old_delete/8-1-6.md @@ -0,0 +1,139 @@ + +[前へ](8-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-7.md) + +### 8.1.6. COBOLとCプログラムの結合 + +opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 + +#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 + +COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 + +#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い + +どちらの言語も、文字列を固定長の連続した文字順序として格納する。 + +COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: + + 01 LastName PIC X(15). + +USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 + +実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: + + char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ + +Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 + +#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 + +これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 + +表8-1-Cまたはopensource COBOLのデータ型の一致 + +| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | +| :--- | :--- | :--- | :--- | +|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | +| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | +| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | +| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| +| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | +| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | +| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | +| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | +|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | +|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | +|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | +| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | + + + + +同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 + +様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 + +#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し + +CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 + +図8-2-opensource COBOLのC呼び出し + +![alt text](Image/8-2.png) + +考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 + +COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 + +Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` + +これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + $ cc –c subc.c + $ cobc -x maincob.cbl subc.o + $ maincob + Starting cobmain + Starting subc + Arg1=Arg1 + Arg2=Arg2 + Arg3=123456789 + Back + Arg1=Arg1 + Arg2=Yrg2 + Arg3=+0987654321 + Returned value=+000000002 + $ + + + +null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 + +[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 + +#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し + +ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 + +図8-3-Cのopensource COBOL呼び出し + +![alt text](Image/8-3.png) + +Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 + +「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 + +Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 + +コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 + + C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl + C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob + C:\Users\Gary\Documents\Programs> mainc.exe + Starting mainc... + Starting cobsub.cbl + Arg1=Arg1 + Arg2=Arg2 + Arg3=+0123456789 + Back + Arg1=Xrg1 + Arg2=Xrg2 + Arg3=987654321 + Returned value=2 + C:\Users\Gary\Documents\Programs> + + +第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 + +ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 + +--- +`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 + +`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 + +`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 + + + +[ページトップへ](8-1-6.md) + diff --git a/automanual/old_delete/8-1-7.md b/automanual/old_delete/8-1-7.md new file mode 100644 index 0000000..cc22abd --- /dev/null +++ b/automanual/old_delete/8-1-7.md @@ -0,0 +1,36 @@ + +[前へ](8-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-8.md) + +### 8.1.7. 重要な環境変数 + +次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 + +表8-4-環境変数コンパイラ + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | +| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | +| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | +| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | +|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | +| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | +| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | +| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | +| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | +| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | +| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | +|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | +|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | +| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | +|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | + +--- +`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 + + + +[ページトップへ](8-1-7.md) + diff --git a/automanual/old_delete/8-1-8.md b/automanual/old_delete/8-1-8.md new file mode 100644 index 0000000..34316e0 --- /dev/null +++ b/automanual/old_delete/8-1-8.md @@ -0,0 +1,31 @@ + +[前へ](8-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-9.md) + +### 8.1.8. コンパイル時のコピーブックの検索 + +opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 + +- コンパイルされるプログラムが存在するフォルダ。 +- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 +- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 +- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 + +上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 + +- XXXXXXXX.CPY +- XXXXXXXX.CBL +- XXXXXXXX.COB +- XXXXXXXX.cpy +- XXXXXXXX.cbl +- XXXXXXXX.cob +- XXXXXXXX + +UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 + +--- +`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 + + + +[ページトップへ](8-1-8.md) + diff --git a/automanual/old_delete/8-1-9.md b/automanual/old_delete/8-1-9.md new file mode 100644 index 0000000..b805f5e --- /dev/null +++ b/automanual/old_delete/8-1-9.md @@ -0,0 +1,123 @@ + +[前へ](8-1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-1.md) + +### 8.1.9. コンパイラ構成ファイルの使い方 + +opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 + +以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 + +``` +# COBOL compiler configuration -*- sh -*- + +# Value: any string +name: "opensource COBOL" + +# Value: int +tab-width: 8 +text-column: 72 + +# Value: 'cobol2002', 'mf', 'ibm' +# +assign-clause: mf + +# If yes, file names are resolved at run time using environment variables. +# For example, given ASSIGN TO "DATAFILE", the actual file name will be +# 1. the value of environment variable 'DD_DATAFILE' or +# 2. the value of environment variable 'dd_DATAFILE' or +# 3. the value of environment variable 'DATAFILE' or +# 4. the literal "DATAFILE" +# If no, the value of the assign clause is the file name. +# +# Value: 'yes', 'no' +filename-mapping: yes + +# Value: 'yes', 'no' +pretty-display: yes + +# Value: 'yes', 'no' +auto-initialize: yes + +# Value: 'yes', 'no' +complex-odo: no + +# Value: 'yes', 'no' +indirect-redefines: no + +# Binary byte size - defines the allocated bytes according to PIC +# Value: signed unsigned bytes +# ------ -------- ----- +# '2-4-8' 1 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1-2-4-8' 1 - 2 1 +# 3 - 4 2 +# 5 - 9 4 +# 10 - 18 8 +# +# '1--8' 1 - 2 1 - 2   1 +# 3 - 4 3 - 4 2 +# 5 - 6 5 - 7 3 +# 7 - 9 8 - 9 4 +# 10 - 11 10 - 12 5 +# 12 - 14 13 - 14 6 +# 15 - 16 15 - 16 7 +# 17 - 18 17 - 18 8 +binary-size: 1-2-4-8 + +# Value: 'yes', 'no' +binary-truncate: yes + +# Value: 'native', 'big-endian' +binary-byteorder: big-endian + +# Value: 'yes', 'no' +larger-redefines-ok: no + +# Value: 'yes', 'no' +relaxed-syntax-check: no + +# Perform type OSVS - If yes, the exit point of any currently executing perform +# is recognized if reached. +# Value: 'yes', 'no' +perform-osvs: no + +# If yes, linkage-section items remain allocated +# between invocations. +# Value: 'yes', 'no' +sticky-linkage: no + +# If yes, allow non-matching level numbers +# Value: 'yes', 'no' +relax-level-hierarchy: no + +# not-reserved: +# Value: Word to be taken out of the reserved words list +# (case independent) + +# Dialect features +# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' +author-paragraph: obsolete +memory-size-clause: obsolete +multiple-file-tape-clause: obsolete +label-records-clause: obsolete +value-of-clause: obsolete +data-records-clause: obsolete +top-level-occurs-clause: skip +synchronized-clause: ok +goto-statement-without-name: obsolete +stop-literal-statement: obsolete +debugging-line: obsolete +padding-character-clause: obsolete +next-sentence-phrase: archaic +eject-statement: skip +entry-statement: obsolete +move-noninteger-to-alphanumeric: error +odo-without-to: ok +``` + + + +[ページトップへ](8-1-9.md) + diff --git a/automanual/old_delete/8-2-1.md b/automanual/old_delete/8-2-1.md new file mode 100644 index 0000000..65ffe25 --- /dev/null +++ b/automanual/old_delete/8-2-1.md @@ -0,0 +1,31 @@ + +[前へ](8-1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-2.md) + +## 8.2. opensource COBOLプログラムの実行 + +### 8.2.1. プログラムの直接実行 + +「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 + +これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 + +これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 + +プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 + +プログラムの直接実行構文は次の通りである。 + + [path]program [arguments] + +例: +``` + /usr/local/printaccount ACCT=6625378 + または + C:\Users\Me\Documents\Programs\printaccount.exe + ACCT=6625378 +``` + + + +[ページトップへ](8-2-1.md) + diff --git a/automanual/old_delete/8-2-2.md b/automanual/old_delete/8-2-2.md new file mode 100644 index 0000000..0f38d99 --- /dev/null +++ b/automanual/old_delete/8-2-2.md @@ -0,0 +1,29 @@ + +[前へ](8-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-3.md) + +### 8.2.2. 「cobcrun」ユーティリティの使用 + +「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 + +opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 + +この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: + + [path]cobcrun program [arguments] + +プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 + +cobcrunの使用例: + + cd /usr/local + cobcrun printaccount ACCT=6625378 + または + cd C:\Users\Me\Documents\Programs + cobcrun printaccount.exe ACCT=6625378 + +cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 + + + +[ページトップへ](8-2-2.md) + diff --git a/automanual/old_delete/8-2-3.md b/automanual/old_delete/8-2-3.md new file mode 100644 index 0000000..24086ac --- /dev/null +++ b/automanual/old_delete/8-2-3.md @@ -0,0 +1,14 @@ + +[前へ](8-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-4.md) + +### 8.2.3. プログラムの引数 + +プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 + +- ACCEPT ・・・ FROM COMMAND-LINE +- ACCEPT ・・・ FROM ARGUMENT-VALUE + + + +[ページトップへ](8-2-3.md) + diff --git a/automanual/old_delete/8-2-4.md b/automanual/old_delete/8-2-4.md new file mode 100644 index 0000000..835d6ae --- /dev/null +++ b/automanual/old_delete/8-2-4.md @@ -0,0 +1,31 @@ + +[前へ](8-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-3-1.md) + +### 8.2.4. 重要な環境変数 + +次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 + +表8-5-実行時環境変数 + +|環境変数 | 使い方 | +| :--- | :--- | +|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| +|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | +|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| +|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | +|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| +|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| +|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| +|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| +|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| + +--- +`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 +`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 +`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 + + + +[ページトップへ](8-2-4.md) + diff --git a/automanual/old_delete/8-3-1.md b/automanual/old_delete/8-3-1.md new file mode 100644 index 0000000..985fe6d --- /dev/null +++ b/automanual/old_delete/8-3-1.md @@ -0,0 +1,756 @@ + +[前へ](8-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-1.md) + +## 8.3. 組み込みサブルーチン + +### 8.3.1. 「名前による呼び出し」ルーチン + +opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 + +これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 + + +- 現在のディレクトリの変更 +- ファイルのコピー +- ディレクトリの作成 +- ファイルの作成、開く、閉じる、読み取り、書き込み +- ディレクトリ(フォルダ)の削除 +- ファイルの削除 +- サブルーチンに渡された引数の数の決定 +- ファイル情報の取得(サイズと最終変更日時) +- サブルーチンに渡される引数の長さ(バイト単位)の取得 +- 項目の左揃え、右揃え、または中央揃えの決定 +- ファイルの移動(破壊的な「コピー」) +- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする +- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする + + 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない +- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する + +次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 + +#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* + +このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 + +*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 + +statusは次のいずれかの値を受け取る。 + +| | | +| --- | --- | +| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | +| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | +| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | + + +#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 + +[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 + +#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +第3引数は必須ではあるが、使用されない。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 + +#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +第2引数は必須ではあるが、使用されない。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 + +#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* + +このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 File-Info. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date + 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time + +変更時刻の小数点以下2桁は常に0である。 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 + +#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” + +C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 + +- なし 「R」と同じように扱われる +- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる +- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる +- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる +- それ以外 「R」として扱われる + +#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* + +このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 + +与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 + +| | | +| --- | --- | +| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | +| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | +| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | + +``` + 01 PATTERN PIC X(5) VALUE "*". + 01 DIRECTORY PIC X(256) VALUE + "./list". + 01 FILENAME PIC X(30). + 01 MYDIR PIC 9(8) COMP-5. + PROCEDURE DIVISION. + CALL "C$LIST-DIRECTORY" USING 1, + DIRECTORY, + PATTERN + END-CALL. + MOVE RETURN-CODE TO MYDIR. + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL. + PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES + DISPLAY FUNCTION TRIM(FILENAME) + CALL "C$LIST-DIRECTORY" USING 2, + MYDIR, + FILENAME + END-CALL + END-PERFORM. + CALL "C$LIST-DIRECTORY" USING 3, MYDIR + END-CALL. +``` + +#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 + +#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* + +C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 + +メインプログラムからCALLされた場合、戻り値は常に0になる。 + +[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 + +#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* + +このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 + +サイズは、RETURN-CODE特殊レジスタに返される。 + +指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 + +#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* + +C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 + +1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 + +[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 + +#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 + +#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 + +#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「AND」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* + +このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 + +ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 + +操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 + +[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 + +#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* + +このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 + + 01 Argument-2. + 05 File-Size-In-Bytes PIC 9(18) COMP. + 05 Mod-DD PIC 9(2) COMP. *> Modification Time + 05 Mod-MO PIC 9(2) COMP. + 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date + 05 Mod-HH PIC 9(2) COMP. + 05 Mod-MM PIC 9(2) COMP. + 05 Mod-SS PIC 9(2) COMP. + 05 FILLER PIC 9(2) COMP. *> This will always be 00 + +サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 + +[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 + +#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* + +CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 + +*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 + +サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 + +#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* + +このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 + +どちらのファイルパス引数も、英数字定数または一意名にすることができる。 + +ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 + +#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* + +このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 + +指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 + +RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 + +#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* + +CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 + +引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` + +後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 + +サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 + +[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 + +#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* + +CBL_DELETE_DIRを使って空のディレクトリを削除する。 + +唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 + +指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 + +RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 + +#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* + +このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 + +ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 + +[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 + +#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* + +このルーチンは、一般的なエラー処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 + +一度に有効にできるユーザ定義のエラー手続きは1つだけである。 + +エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 + +エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoerrproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Err-Proc. + SET Err-Proc-Address TO ENTRY "999-Err" + CALL "CBL_ERROR_PROC" + USING Err-Proc-Install, Err-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not' & + 'register Error Procedure' + END-IF + . + 099-Now-Test-Err-Proc. + CALL "Tilt" END-CALL + GOBACK + . + 999-Err-Proc. + ENTRY "999-Err" + DISPLAY + '** A Runtime Error Has Occurred **' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* + +このルーチンは、一般的な終了処理ルーチンを登録する。 + +*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 + +*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 + +成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 + +「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 + +一度に有効にできるユーザ定義の終了手続きは1つだけである。 + +終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 + +終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 + +以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 + + IDENTIFICATION DIVISION. + PROGRAM-ID. demoexitproc. + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + 78 Exit-Proc-Install VALUE 0. + 01 Current-Date PIC X(8). + 01 Current-Time PIC X(8). + 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. + 01 Formatted-Date PIC XXXX/XX/XX. + 01 Formatted-Time PIC XX/XX/XX. + PROCEDURE DIVISION. + 000-Register-Exit-Proc. + SET Exit-Proc-Address TO ENTRY "999-Exit" + CALL "CBL_EXIT_PROC" + USING Exit-Proc-Install, Exit-Proc-Address + END-CALL + IF RETURN-CODE NOT = 0 + DISPLAY 'Error: Could not register Exit Procedure' + END-IF + 099-Now-Test-Exit-Proc. + DISPLAY + 'Executing a STOP RUN...' + END-DISPLAY + GOBACK + . + 999-Exit-Proc. + ENTRY "999-Exit" + DISPLAY + '*** STOP RUN has been executed ***' + END-DISPLAY + ACCEPT + Current-Date FROM DATE YYYYMMDD + END-ACCEPT + ACCEPT + Current-Time FROM TIME + END-ACCEPT + MOVE Current-Date TO Formatted-Date + MOVE Current-Time TO Formatted-Time + INSPECT Formatted-Time REPLACING ALL '/' BY ':' + DISPLAY + '*** ' Formatted-Date ' ' Formatted-Time ' ***' + END-DISPLAY + GOBACK + . + +プログラムの出力結果は・・・ +``` +** A Runtime Error Has Occurred ** + *** 2009/08/28 10:35:10 *** +libcob: Cannot find module 'Tilt' + +``` + +#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「EQ」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* + +このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 + +このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 + +#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* + +現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 + +第1引数は使用されないが、**BY VALUE**で指定する必要がある。 + +*length*引数は**BY VALUE**で指定する必要がある。 + +*buffer*引数は**BY REFERENCE**で指定する必要がある。 + +*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 + +*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 + +ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 + +#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「IMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 1 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NIMP」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* + +このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 + +項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 + +byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「NOT」プロセスを示している。 + +| 古い引数2ビット | 新しい引数2ビット | +| :---: | :---: | +| 0 | 1 | +| 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* + +CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 + +item-1として次の集団項目を定義する。 + + 01 KEISEN. + 02 KEI-CMD PIC 9(1) COMP-X. + 02 KEI-LINE PIC 9(2) COMP-X. + 02 KEI-COL PIC 9(2) COMP-X. + 02 KEI-LNG1 PIC 9(2) COMP-X. + 02 KEI-LNG2 PIC 9(2) COMP-X. + 02 KEI-COLOR PIC 9(2) COMP-X. + 02 KEI-PRN PIC 9(2) COMP-X. + +各項目の意味を以下に示す。 + +| | | +| --- | --- | +| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| +| KEI-LINE | 開始ライン(1~24) | +| KEI-COL | 開始カラム(1~80) | +| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | +| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | +| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | +| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | + +#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* + +CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 + +*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 + +1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 + +[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 + +#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* + +このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 + +*file-path*引数は、英数字定数またはデータ項目である。 + +*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 + +- 1 = 入力 (読み取り専用) +- 2 = 出力 (書き込み専用) +- 3 = 入力または出力 + +第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 + +最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 + +RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 + +[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 + +#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「OR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 1 | + + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer + +このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 + +*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* + +このサブルーチンを使用してファイル名を変更できる。 + +*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 + +このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 + +ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 + +#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* + +このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 + +#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* + +C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 + +*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 + +*convert-length*が負またはゼロの場合、変換は実行されない。 + +[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 + +#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* + +このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 + +*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 + +*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 + +*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 +唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 + +完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 + +#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* + +このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 + +項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 + +*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 + +下の真理値表は「XOR」プロセスを示している。 + +| 引数1ビット | 引数2ビット | 新しい引数2ビット | +| :---: | :---: | :---: | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 + +結果のゼロがRETURN-CODEレジスタに戻される。 + +#### 8.3.1.42. CALL “SYSTEM” USING *command* + +このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 + +CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 + +コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 + +Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 + +ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 + +実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 + +--- +`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
+`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
+`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
+ + + +[ページトップへ](8-3-1.md) + diff --git a/automanual/old_delete/9-1.md b/automanual/old_delete/9-1.md new file mode 100644 index 0000000..e974737 --- /dev/null +++ b/automanual/old_delete/9-1.md @@ -0,0 +1,58 @@ + +[前へ](8-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-2.md) + +# 9. サンプルプログラム + +## 9.1. FileStat-Msgs.cpy – ファイル状態コード + +このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 + +コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 + +``` + COPY FileStat-Msgs + REPLACING STATUS BY Input-File-Status + MSG BY Error-Message. +``` + +以下は、コピーブック「FileStat-Msgs.cpy」である。 + +``` + EVALUATE STATUS + WHEN 00 MOVE 'SUCCESS ' TO MSG + WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG + WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG + WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG + WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG + WHEN 10 MOVE 'END OF FILE ' TO MSG + WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG + WHEN 21 MOVE 'KEY INVALID ' TO MSG + WHEN 22 MOVE 'KEY EXISTS ' TO MSG + WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG + WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG + WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG + WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG + WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG + WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG + WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG + WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG + WHEN 41 MOVE 'ALREADY OPEN ' TO MSG + WHEN 42 MOVE 'NOT OPEN ' TO MSG + WHEN 43 MOVE 'READ NOT DONE ' TO MSG + WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG + WHEN 46 MOVE 'READ ERROR ' TO MSG + WHEN 47 MOVE 'INPUT DENIED ' TO MSG + WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG + WHEN 49 MOVE 'I/O DENIED ' TO MSG + WHEN 51 MOVE 'RECORD LOCKED ' TO MSG + WHEN 52 MOVE 'END-OF-PAGE ' TO MSG + WHEN 57 MOVE 'I/O LINAGE ' TO MSG + WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG + WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG + END-EVALUATE. +``` + + + +[ページトップへ](9-1.md) + diff --git a/automanual/old_delete/9-2.md b/automanual/old_delete/9-2.md new file mode 100644 index 0000000..2726e55 --- /dev/null +++ b/automanual/old_delete/9-2.md @@ -0,0 +1,205 @@ + +[前へ](9-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](credit.md) + +## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン + +次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 + +``` +IDENTIFICATION DIVISION. +PROGRAM-ID. COBDUMP. +***************************************************************** +** This is an OpenCOBOL subroutine that will generate a ** +** formatted Hex/Char dump of a storage area. To use this ** +** subroutine, simply CALL it as follows: ** +** ** +** CALL "COBDUMP" USING ** +** [ ] ** +** ** +** If specified, the argument specifies how many ** +** bytes of are to be dumped. If absent, all of ** +** will be dumped (i.e. LENGTH() will ** +** be assumed for ). ** +** ** +** >>> Note that the subroutine name MUST be specified in <<< ** +** >>> UPPERCASE <<< ** +** ** +** The dump is generated to STDERR, so you may pipe it to a ** +** file when you execute your program using "2> file". ** +** ** +** AUTHOR: GARY L. CUTLER ** +** CutlerGL@gmail.c ** +** ** +** NOTE: The author has a sentimental attachment to ** +** this subroutine - it's been around since 1971 ** +** and it's been converted to and run on 10 dif- ** +** ferent operating system/compiler environments ** +** ** +** DATE-WRITTEN: October 14, 1971 ** +** ** +***************************************************************** +** DATE CHANGE DESCRIPTION ** +** ====== ==================================================== ** +** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** +** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** +** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** +** SCREEN SECTION enhancements ** +** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** +** GC0983 Converted to IBM VS COBOL - COBOL '74 ** +** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** +** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** +** extensions ** +** GC0703 Converted to Unisys Universal Compiling System (UCS) ** +** COBOL (UCOB) - COBOL '85 ** +** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** +** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** +** 2002 features ** +** GC0410 Enhanced to make 2nd argument (buffer length) ** +** optional ** +***************************************************************** +ENVIRONMENT DIVISION. +CONFIGURATION SECTION. +REPOSITORY. + FUNCTION ALL INTRINSIC. +DATA DIVISION. +WORKING-STORAGE SECTION. +78 Undisplayable-Char-Symbol VALUE X'F9'. +01 Addr-Pointer USAGE POINTER. +01 Addr-Number REDEFINES Addr-Pointer + USAGE BINARY-LONG. + +01 Addr-Sub USAGE BINARY-CHAR. + +01 Addr-Value USAGE BINARY-LONG. + +01 Buffer-Length USAGE BINARY-LONG. + +01 Buffer-Sub COMP-5 PIC 9(4). + +01 Hex-Digits VALUE '0123456789ABCDEF'. +05 Hex-Digit OCCURS 16 TIMES PIC X(1). + +01 Left-Nibble COMP-5 PIC 9(1). +01 Nibble REDEFINES Left-Nibble + BINARY-CHAR. +01 Output-Detail. +05 OD-Addr. +10 OD-Addr-Hex OCCURS 8 TIMES PIC X. +05 FILLER PIC X(1). +05 OD-Byte PIC Z(3)9. +05 FILLER PIC X(1). +05 OD-Hex OCCURS 16 TIMES. +10 OD-Hex-1 PIC X. +10 OD-Hex-2 PIC X. +10 FILLER PIC X. +05 OD-ASCII OCCURS 16 TIMES + PIC X. +01 Output-Sub COMP-5 PIC 9(2). + +01 Output-Header-1. + 05 FILLER PIC X(80) VALUE + '<-Addr-> Byte ' & + '<---------------- Hexadecimal ----------------> ' & + '<---- Char ---->'. +01 Output-Header-2. + 05 FILLER PIC X(80) VALUE + '======== ==== ' & + '=============================================== ' & + '================'. +01 PIC-XX. +05 FILLER PIC X VALUE LOW-VALUES. +05 PIC-X PIC X. +01 PIC-Halfword REDEFINES PIC-XX + PIC 9(4) COMP-X. +01 PIC-X10. +05 FILLER PIC X(2). +05 PIC-X8 PIC X(8). +01 Right-Nibble COMP-5 PIC 9(1). + +LINKAGE SECTION. +01 Buffer PIC X ANY LENGTH. + +01 Buffer-Len USAGE BINARY-LONG. +PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. +000-COBDUMP. + IF NUMBER-OF-CALL-PARAMETERS = 1 + MOVE LENGTH(Buffer) TO Buffer-Length + ELSE + MOVE Buffer-Len TO Buffer-Length + END-IF + MOVE SPACES TO Output-Detail + SET Addr-Pointer TO ADDRESS OF Buffer + PERFORM 100-Generate-Address + MOVE 0 TO Output-Sub + DISPLAY + Output-Header-1 UPON SYSERR + END-DISPLAY + DISPLAY + Output-Header-2 UPON SYSERR + END-DISPLAY + PERFORM VARYING Buffer-Sub FROM 1 BY 1 + UNTIL Buffer-Sub > Buffer-Length + ADD 1 + TO Output-Sub + END-ADD + IF Output-Sub = 1 + MOVE Buffer-Sub TO OD-Byte + END-IF + MOVE Buffer (Buffer-Sub : 1) TO PIC-X + IF (PIC-X < ' ') + OR (PIC-X > '~') + MOVE Undisplayable-Char-Symbol + TO OD-ASCII (Output-Sub) + ELSE + MOVE PIC-X + TO OD-ASCII (Output-Sub) + END-IF + DIVIDE PIC-Halfword BY 16 + GIVING Left-Nibble + REMAINDER Right-Nibble + END-DIVIDE + ADD 1 TO Left-Nibble + Right-Nibble + END-ADD + MOVE Hex-Digit (Left-Nibble) + TO OD-Hex-1 (Output-Sub) + MOVE Hex-Digit (Right-Nibble) + TO OD-Hex-2 (Output-Sub) + IF Output-Sub = 16 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + MOVE SPACES TO Output-Detail + MOVE 0 TO Output-Sub + SET Addr-Pointer UP BY 16 + PERFORM 100-Generate-Address + END-IF +END-PERFORM +IF Output-Sub > 0 + DISPLAY + Output-Detail UPON SYSERR + END-DISPLAY + END-IF + EXIT PROGRAM + . +100-Generate-Address. + MOVE 8 TO Addr-Sub + MOVE Addr-Number TO Addr-Value + MOVE ALL '0' TO OD-Addr + PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 + DIVIDE Addr-Value BY 16 + GIVING Addr-Value + REMAINDER Nibble + END-DIVIDE + ADD 1 TO Nibble + MOVE Hex-Digit (Nibble) + TO OD-Addr-Hex (Addr-Sub) + SUBTRACT 1 FROM Addr-Sub +END-PERFORM +. +``` + + + +[ページトップへ](9-2.md) + diff --git a/automanual/old_delete/TOC.md b/automanual/old_delete/TOC.md new file mode 100644 index 0000000..8e89598 --- /dev/null +++ b/automanual/old_delete/TOC.md @@ -0,0 +1,239 @@ +目次 +1. [まえがき](1-1.md) + - [1.1. opensource COBOLとは](1-1.md#11-opensource-cobolとは) + - [1.2. COBOL/opensource COBOLの重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) + - [1.2.1. COBOLプログラムの構文](1-2-1.md#121-cobolプログラムの構文) + - [1.2.2. コピーブック](1-2-2.md) + - [1.2.3. 構造化データ](1-2-3.md) + - [1.2.4. ファイル](1-2-4.md) + - [1.2.5. 表操作](1-2-5.md) + - [1.2.6. データの並び替えと結合](1-2-6.md) + - [1.2.7. 文字列操作](1-2-7.md) + - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) + - [1.3. 構文規則](1-3.md) + - [1.4. ソースコードの形式](1-4.md) + - [1.5. カンマ/セミコロンの使い方](1-5.md) + - [1.6. COPY文の使い方](1-6.md) + - [1.7. 定数の使い方](1-7-1.md) + - [1.7.1. 数字定数](1-7-1.md#171-数字定数) + - [1.7.2. 英数字定数](1-7-2.md) + - [1.7.3. 日本語定数](1-7-3.md) + - [1.8. 表意定数の使い方](1-8.md) + - [1.9. ユーザ定義名](1-9.md) + - [1.10. LENGTH OFの使い方](1-10.md) +2. [opensource COBOLのプログラム形式](2-1.md) + - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) + - [2.2. ネストされたユーザ定義関数](2-2.md) +3. [見出し部](3.md) +4. [環境部](4-1-1.md) + - [4.1. 構成節](4-1-1.md#41-構成節) + - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) + - [4.1.2. 実行用計算機段落](4-1-2.md) + - [4.1.3. リポジトリ段落](4-1-3.md) + - [4.1.4. 特殊名段落](4-1-4.md) + - [4.2. 入出力節](4-2-1-1.md) + - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) + - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) + - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) + - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) + - [4.2.2. 入出力管理段落](4-2-2.md) +5. [データ部](5-1.md) + - [5.1. ファイル記述](5-1.md#51-ファイル記述) + - [5.2. 整列用記述](5-2.md) + - [5.3. データ記述の形式](5-3.md) + - [5.4. 条件名](5-4.md) + - [5.5. 定数記述](5-5.md) + - [5.6. 画面記述](5-6.md) +6. [手続き部](6-1-1.md) + - [6.1. 構成要素](6-1-1.md#61-構成要素) + - [6.1.1. 表の参照](6-1-1.md#611-表の参照) + - [6.1.2. データ名の修飾](6-1-2.md) + - [6.1.3. 部分参照](6-1-3.md) + - [6.1.4. 式](6-1-4-1.md) + - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) + - [6.1.4.2. 条件式](6-1-4-2.md) + - [6.1.5. ピリオド(.)](6-1-5.md) + - [6.1.6. 動詞/END-動詞](6-1-6.md) + - [6.1.7. 特殊レジスタ](6-1-7.md) + - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) + - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) + - [6.1.8.2. レコードロック](6-1-8-2.md) + - [6.2. 記述形式](6-2.md) + - [6.3. 宣言の記述形式](6-3.md) + - [6.4. ACCEPT](6-4-1.md) + - [6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) + - [6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得](6-4-2.md) + - [6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得](6-4-3.md) + - [6.4.4. ACCEPT文の書き方4 ― 画面データの取得](6-4-4.md) + - [6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得](6-4-5.md) + - [6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得](6-4-6.md) + - [6.4.7. ACCEPT文の例外処理](6-4-7.md) + - [6.5. ADD](6-5-1.md) + - [6.5.1. ADD文の書き方1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) + - [6.5.2. ADD文の書き方2 ― ADD GIVING](6-5-2.md) + - [6.5.3. ADD文の書き方3 ― ADD CORRESPONDING](6-5-3.md) + - [6.6. ALLOCATE](6-6.md) + - [6.7. CALL](6-7.md) + - [6.8. CANCEL](6-8-1.md) + - [6.8.1. CANCEL文の書き方1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) + - [6.8.2. CANCEL文の書き方2 ― CANCEL ALL](6-8-2.md) + - [6.9. CLOSE](6-9.md) + - [6.10. COMMIT](6-10.md) + - [6.11. COMPUTE](6-11.md) + - [6.12. CONTINUE](6-12.md) + - [6.13. DELETE](6-13-1.md) + - [6.13.1. DELETE文の書き方1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) + - [6.13.2. DELETE文の書き方2 ― DELETE FILE](6-13-2.md) + - [6.14. DISPLAY](6-14-1.md) + - [6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) + - [6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス](6-14-2.md) + - [6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定](6-14-3.md) + - [6.14.4. DISPLAY文の書き方4 ― 画面データ](6-14-4.md) + - [6.14.5. DISPLAY文の例外処理](6-14-5.md) + - [6.15. DIVIDE](6-15-1.md) + - [6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) + - [6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING](6-15-2.md) + - [6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING](6-15-3.md) + - [6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER](6-15-4.md) + - [6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER](6-15-5.md) + - [6.16. ENTRY](6-16.md) + - [6.17. EVALUATE](6-17.md) + - [6.18. EXIT](6-18.md) + - [6.19. FREE](6-19.md) + - [6.20. GENERATE](6-20.md) + - [6.21. GOBACK](6-21.md) + - [6.22. GO TO](6-22-1.md) + - [6.22.1. GO TO文の書き方1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) + - [6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON](6-22-2.md) + - [6.23. IF](6-23.md) + - [6.24. INITIALIZE](6-24.md) + - [6.25. INITIATE](6-25.md) + - [6.26. INSPECT](6-26.md) + - [6.27. MERGE](6-27.md) + - [6.28. MOVE](6-28-1.md) + - [6.28.1. MOVE文の書き方1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) + - [6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING](6-28-2.md) + - [6.29. MULTIPLY](6-29-1.md) + - [6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) + - [6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING](6-29-2.md) + - [6.30. NEXT SENTENCE](6-30.md) + - [6.31. OPEN](6-31.md) + - [6.32. PERFORM](6-32-1.md) + - [6.32.1. PERFORM文の書き方1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) + - [6.32.2. PERFORM文の書き方2 ― インライン型](6-32-2.md) + - [6.33. READ](6-33-1.md) + - [6.33.1. READ文の書き方1 ― 順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) + - [6.33.2. READ文の書き方2 ― ランダム読み取り](6-33-2.md) + - [6.34. RELEASE](6-34.md) + - [6.35. RETURN](6-35.md) + - [6.36. REWRITE](6-36.md) + - [6.37. ROLLBACK](6-37.md) + - [6.38. SEARCH](6-38-1.md) + - [6.38.1. SEARCH文の書き方1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) + - [6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL)](6-38-2.md) + - [6.39. SET](6-39-1.md) + - [6.39.1. SET文の書き方1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) + - [6.39.2. SET文の書き方2 ― プログラムポインター設定](6-39-2.md) + - [6.39.3. SET文の書き方3 ― アドレス設定](6-39-3.md) + - [6.39.4. SET文の書き方4 ― インデックス設定](6-39-4.md) + - [6.39.5. SET文の書き方5 ― UP/DOWN設定](6-39-5.md) + - [6.39.6. SET文の書き方6 ― 条件名設定](6-39-6.md) + - [6.39.7. SET文の書き方7 ― スイッチ設定](6-39-7.md) + - [6.40. SORT](6-40-1.md) + - [6.40.1. SORT文の書き方1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) + - [6.40.2. SORT文の書き方2 ― テーブルソート](6-40-2.md) + - [6.41. START](6-41.md) + - [6.42. STOP](6-42.md) + - [6.43. STRING](6-43.md) + - [6.44. SUBTRACT](6-44-1.md) + - [6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) + - [6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING](6-44-2.md) + - [6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING](6-44-3.md) + - [6.45. SUPPRESS](6-45.md) + - [6.46. TERMINATE](6-46.md) + - [6.47. TRANSFORM](6-47.md) + - [6.48. UNLOCK](6-48.md) + - [6.49. UNSTRING](6-49.md) + - [6.50. WRITE](6-50.md) +7. [日本語の使用](7-1.md) + - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) + - [7.2. 日本語項目と表意定数](7-2.md) + - [7.3. 各命令文と日本語の取扱い](7-3-1.md) + - [7.3.1. MOVE文](7-3-1.md#731-move文) + - [7.3.2. ACCEPT/DISPLAY文](7-3-2.md) + - [7.4. UTF-8の使用](7-4.md) +8. [opensource COBOLシステムインターフェース](8-1-1.md) + - [8.1. opensource COBOLコンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) + - [8.1.1. 解説](8-1-1.md#811-解説) + - [8.1.2. コンパイルオプション](8-1-2.md) + - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) + - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) + - [8.1.5. 静的サブルーチン](8-1-5.md) + - [8.1.6. COBOLとCプログラムの結合](8-1-6.md) + - [8.1.6.1. opensource COBOLランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) + - [8.1.6.2. opensource COBOLとCの文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) + - [8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) + - [8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) + - [8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) + - [8.1.7. 重要な環境変数](8-1-7.md) + - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) + - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) + - [8.2. opensource COBOLプログラムの実行](8-2-1.md) + - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) + - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) + - [8.2.3. プログラムの引数](8-2-3.md) + - [8.2.4. 重要な環境変数](8-2-4.md) + - [8.3. 組み込みサブルーチン](8-3-1.md) + - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) + - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) + - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) + - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) + - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8314-call-cdelete-using-file-path-0) + - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) + - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) + - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) + - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) + - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) + - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) + - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) + - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) + - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) + - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) + - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) + - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) + - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) + - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) + - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) + - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) + - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) + - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) + - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) + - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) + - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) + - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) + - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) + - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) + - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) + - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) + - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) + - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) + - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) + - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) + - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) + - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) + - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) + - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) + - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) + - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) +9. [サンプルプログラム](9-1.md) + - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) + - [9.2. COBDUMP – 16進数/文字データダンプサブルーチン](9-2.md) + +[クレジット](credit.md) + + + +[ページトップへ](TOC.md) + diff --git a/automanual/old_delete/credit.md b/automanual/old_delete/credit.md new file mode 100644 index 0000000..aff9f44 --- /dev/null +++ b/automanual/old_delete/credit.md @@ -0,0 +1,39 @@ + +[前へ](9-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/次へ + +
+ +# クレジット + +opensource COBOL Programmer's Guide + +【制作】
+OSSコンソーシアム オープンCOBOLソリューション部会 + +【原著】
+Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") + +【翻訳・執筆】
+東京システムハウス株式会社 島田桃花 + +【マークダウン化】
+東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 + +【監修】
+東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
+株式会社SIT11 飯島裕一 + +【協力】(50音順)
+OVOL ICTソリューションズ株式会社
+株式会社SIT11
+株式会社CIJ
+サン情報サービス株式会社
+ +【発行】
+OSSコンソーシアム オープンCOBOLソリューション部会
+URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) + + + +[ページトップへ](credit.md) + diff --git a/automanual/opensourcecobol.github.io.code-workspace b/automanual/opensourcecobol.github.io.code-workspace new file mode 100644 index 0000000..36af5d8 --- /dev/null +++ b/automanual/opensourcecobol.github.io.code-workspace @@ -0,0 +1,20 @@ +{ + "folders": [ + { + "path": ".." + }, + { + "path": "../../../opensourcecobol4j-1.1.1" + } + ], + "settings": { + "coboleditor.metadata_symbols": [], + "coboleditor.metadata_entrypoints": [], + "coboleditor.metadata_types": [], + "coboleditor.metadata_files": [ + "1719534595000,tests/cobol85/DB/DB103M.CBL", + "1722229028318,automanual/AUTOMANUAL.cbl" + ], + "coboleditor.metadata_knowncopybooks": [] + } +} \ No newline at end of file From 8a6a11afdb3b59462748d41e928ed04568fe6a29 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 27 Jan 2025 14:13:58 +0900 Subject: [PATCH 02/40] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/list.txt => list.txt | 0 markdown/markdown.code-workspace => markdown.code-workspace | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename markdown/list.txt => list.txt (100%) rename markdown/markdown.code-workspace => markdown.code-workspace (100%) diff --git a/markdown/list.txt b/list.txt similarity index 100% rename from markdown/list.txt rename to list.txt diff --git a/markdown/markdown.code-workspace b/markdown.code-workspace similarity index 100% rename from markdown/markdown.code-workspace rename to markdown.code-workspace From 6f5ec791315aac1a87b406f3f4885c0f37f038b9 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 27 Jan 2025 14:15:55 +0900 Subject: [PATCH 03/40] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- automanual/AUTODELETE$1.class | Bin 1212 -> 0 bytes automanual/AUTODELETE$2.class | Bin 1212 -> 0 bytes automanual/AUTODELETE$3.class | Bin 1212 -> 0 bytes automanual/AUTODELETE$4.class | Bin 3085 -> 0 bytes automanual/AUTODELETE$5.class | Bin 3257 -> 0 bytes automanual/AUTODELETE$6.class | Bin 1430 -> 0 bytes automanual/AUTODELETE$7.class | Bin 1498 -> 0 bytes automanual/AUTODELETE.cbl | 94 --- automanual/AUTODELETE.class | Bin 8503 -> 0 bytes automanual/AUTODELETE.java | 544 ------------- automanual/AUTODELETE_2.cbl | 95 --- automanual/AUTOMANUAL.cbl | 177 ---- automanual/AUTOMANUAL_original.cbl | 129 --- automanual/cob4j_convert.bat | 151 ---- automanual/cob4j_convert2.bat | 151 ---- automanual/new/1-1.md | 22 - automanual/new/1-10.md | 27 - automanual/new/1-2-1.md | 19 - automanual/new/1-2-2.md | 13 - automanual/new/1-2-3.md | 11 - automanual/new/1-2-4.md | 22 - automanual/new/1-2-5.md | 15 - automanual/new/1-2-6.md | 14 - automanual/new/1-2-7.md | 31 - automanual/new/1-2-8.md | 25 - automanual/new/1-3.md | 23 - automanual/new/1-4.md | 33 - automanual/new/1-5.md | 19 - automanual/new/1-6.md | 37 - automanual/new/1-7-1.md | 19 - automanual/new/1-7-2.md | 41 - automanual/new/1-7-3.md | 13 - automanual/new/1-8.md | 24 - automanual/new/1-9.md | 15 - automanual/new/2-1.md | 46 -- automanual/new/2-2.md | 19 - automanual/new/3.md | 28 - automanual/new/4-1-1.md | 41 - automanual/new/4-1-2.md | 23 - automanual/new/4-1-3.md | 19 - automanual/new/4-1-4.md | 114 --- automanual/new/4-2-1-1.md | 112 --- automanual/new/4-2-1-2.md | 29 - automanual/new/4-2-1-3.md | 31 - automanual/new/4-2-2.md | 22 - automanual/new/5-1.md | 57 -- automanual/new/5-2.md | 26 - automanual/new/5-3.md | 302 ------- automanual/new/5-4.md | 25 - automanual/new/5-5.md | 19 - automanual/new/5-6.md | 105 --- automanual/new/6-1-1.md | 38 - automanual/new/6-1-2.md | 54 -- automanual/new/6-1-3.md | 30 - automanual/new/6-1-4-1.md | 57 -- automanual/new/6-1-4-2.md | 148 ---- automanual/new/6-1-5.md | 52 -- automanual/new/6-1-6.md | 46 -- automanual/new/6-1-7.md | 24 - automanual/new/6-1-8-1.md | 34 - automanual/new/6-1-8-2.md | 25 - automanual/new/6-10.md | 17 - automanual/new/6-11.md | 19 - automanual/new/6-12.md | 33 - automanual/new/6-13-1.md | 31 - automanual/new/6-13-2.md | 21 - automanual/new/6-14-1.md | 23 - automanual/new/6-14-2.md | 17 - automanual/new/6-14-3.md | 29 - automanual/new/6-14-4.md | 23 - automanual/new/6-14-5.md | 15 - automanual/new/6-15-1.md | 25 - automanual/new/6-15-2.md | 25 - automanual/new/6-15-3.md | 25 - automanual/new/6-15-4.md | 25 - automanual/new/6-15-5.md | 25 - automanual/new/6-16.md | 21 - automanual/new/6-17.md | 59 -- automanual/new/6-18.md | 42 - automanual/new/6-19.md | 23 - automanual/new/6-2.md | 31 - automanual/new/6-20.md | 15 - automanual/new/6-21.md | 19 - automanual/new/6-22-1.md | 19 - automanual/new/6-22-2.md | 29 - automanual/new/6-23.md | 21 - automanual/new/6-24.md | 43 - automanual/new/6-25.md | 15 - automanual/new/6-26.md | 88 -- automanual/new/6-27.md | 56 -- automanual/new/6-28-1.md | 21 - automanual/new/6-28-2.md | 91 --- automanual/new/6-29-1.md | 25 - automanual/new/6-29-2.md | 25 - automanual/new/6-3.md | 25 - automanual/new/6-30.md | 23 - automanual/new/6-31.md | 38 - automanual/new/6-32-1.md | 71 -- automanual/new/6-32-2.md | 19 - automanual/new/6-33-1.md | 43 - automanual/new/6-33-2.md | 51 -- automanual/new/6-34.md | 19 - automanual/new/6-35.md | 21 - automanual/new/6-36.md | 41 - automanual/new/6-37.md | 17 - automanual/new/6-38-1.md | 33 - automanual/new/6-38-2.md | 68 -- automanual/new/6-39-1.md | 29 - automanual/new/6-39-2.md | 23 - automanual/new/6-39-3.md | 19 - automanual/new/6-39-4.md | 17 - automanual/new/6-39-5.md | 18 - automanual/new/6-39-6.md | 21 - automanual/new/6-39-7.md | 17 - automanual/new/6-4-1.md | 21 - automanual/new/6-4-2.md | 32 - automanual/new/6-4-3.md | 24 - automanual/new/6-4-4.md | 27 - automanual/new/6-4-5.md | 21 - automanual/new/6-4-6.md | 17 - automanual/new/6-4-7.md | 15 - automanual/new/6-40-1.md | 89 --- automanual/new/6-40-2.md | 29 - automanual/new/6-41.md | 41 - automanual/new/6-42.md | 26 - automanual/new/6-43.md | 37 - automanual/new/6-44-1.md | 23 - automanual/new/6-44-2.md | 23 - automanual/new/6-44-3.md | 19 - automanual/new/6-45.md | 15 - automanual/new/6-46.md | 15 - automanual/new/6-47.md | 31 - automanual/new/6-48.md | 22 - automanual/new/6-49.md | 68 -- automanual/new/6-5-1.md | 33 - automanual/new/6-5-2.md | 25 - automanual/new/6-5-3.md | 19 - automanual/new/6-50.md | 88 -- automanual/new/6-6.md | 49 -- automanual/new/6-7.md | 54 -- automanual/new/6-8-1.md | 19 - automanual/new/6-8-2.md | 15 - automanual/new/6-9.md | 29 - automanual/new/7-1.md | 27 - automanual/new/7-2.md | 20 - automanual/new/7-3-1.md | 56 -- automanual/new/7-3-2.md | 13 - automanual/new/7-4.md | 19 - automanual/new/8-1-1.md | 19 - automanual/new/8-1-2.md | 95 --- automanual/new/8-1-3.md | 17 - automanual/new/8-1-4.md | 42 - automanual/new/8-1-5.md | 23 - automanual/new/8-1-6.md | 139 ---- automanual/new/8-1-7.md | 36 - automanual/new/8-1-8.md | 31 - automanual/new/8-1-9.md | 123 --- automanual/new/8-2-1.md | 31 - automanual/new/8-2-2.md | 29 - automanual/new/8-2-3.md | 14 - automanual/new/8-2-4.md | 31 - automanual/new/8-3-1.md | 756 ------------------ automanual/new/9-1.md | 58 -- automanual/new/9-2.md | 205 ----- automanual/new/TOC.md | 238 ------ automanual/new/credit.md | 36 - automanual/new_delete/1-1.md | 15 - automanual/new_delete/1-10.md | 20 - automanual/new_delete/1-2-1.md | 12 - automanual/new_delete/1-2-2.md | 6 - automanual/new_delete/1-2-3.md | 4 - automanual/new_delete/1-2-4.md | 15 - automanual/new_delete/1-2-5.md | 8 - automanual/new_delete/1-2-6.md | 8 - automanual/new_delete/1-2-7.md | 25 - automanual/new_delete/1-2-8.md | 18 - automanual/new_delete/1-3.md | 16 - automanual/new_delete/1-4.md | 26 - automanual/new_delete/1-5.md | 12 - automanual/new_delete/1-6.md | 30 - automanual/new_delete/1-7-1.md | 12 - automanual/new_delete/1-7-2.md | 34 - automanual/new_delete/1-7-3.md | 6 - automanual/new_delete/1-8.md | 17 - automanual/new_delete/1-9.md | 8 - automanual/new_delete/2-1.md | 39 - automanual/new_delete/2-2.md | 12 - automanual/new_delete/3.md | 21 - automanual/new_delete/4-1-1.md | 34 - automanual/new_delete/4-1-2.md | 16 - automanual/new_delete/4-1-3.md | 12 - automanual/new_delete/4-1-4.md | 107 --- automanual/new_delete/4-2-1-1.md | 105 --- automanual/new_delete/4-2-1-2.md | 22 - automanual/new_delete/4-2-1-3.md | 24 - automanual/new_delete/4-2-2.md | 15 - automanual/new_delete/5-1.md | 50 -- automanual/new_delete/5-2.md | 19 - automanual/new_delete/5-3.md | 295 ------- automanual/new_delete/5-4.md | 18 - automanual/new_delete/5-5.md | 12 - automanual/new_delete/5-6.md | 98 --- automanual/new_delete/6-1-1.md | 31 - automanual/new_delete/6-1-2.md | 47 -- automanual/new_delete/6-1-3.md | 23 - automanual/new_delete/6-1-4-1.md | 50 -- automanual/new_delete/6-1-4-2.md | 141 ---- automanual/new_delete/6-1-5.md | 45 -- automanual/new_delete/6-1-6.md | 39 - automanual/new_delete/6-1-7.md | 17 - automanual/new_delete/6-1-8-1.md | 27 - automanual/new_delete/6-1-8-2.md | 18 - automanual/new_delete/6-10.md | 10 - automanual/new_delete/6-11.md | 12 - automanual/new_delete/6-12.md | 26 - automanual/new_delete/6-13-1.md | 24 - automanual/new_delete/6-13-2.md | 14 - automanual/new_delete/6-14-1.md | 16 - automanual/new_delete/6-14-2.md | 10 - automanual/new_delete/6-14-3.md | 22 - automanual/new_delete/6-14-4.md | 16 - automanual/new_delete/6-14-5.md | 8 - automanual/new_delete/6-15-1.md | 18 - automanual/new_delete/6-15-2.md | 18 - automanual/new_delete/6-15-3.md | 18 - automanual/new_delete/6-15-4.md | 18 - automanual/new_delete/6-15-5.md | 18 - automanual/new_delete/6-16.md | 14 - automanual/new_delete/6-17.md | 52 -- automanual/new_delete/6-18.md | 35 - automanual/new_delete/6-19.md | 16 - automanual/new_delete/6-2.md | 24 - automanual/new_delete/6-20.md | 8 - automanual/new_delete/6-21.md | 12 - automanual/new_delete/6-22-1.md | 12 - automanual/new_delete/6-22-2.md | 22 - automanual/new_delete/6-23.md | 14 - automanual/new_delete/6-24.md | 36 - automanual/new_delete/6-25.md | 8 - automanual/new_delete/6-26.md | 81 -- automanual/new_delete/6-27.md | 49 -- automanual/new_delete/6-28-1.md | 14 - automanual/new_delete/6-28-2.md | 84 -- automanual/new_delete/6-29-1.md | 18 - automanual/new_delete/6-29-2.md | 18 - automanual/new_delete/6-3.md | 18 - automanual/new_delete/6-30.md | 16 - automanual/new_delete/6-31.md | 31 - automanual/new_delete/6-32-1.md | 64 -- automanual/new_delete/6-32-2.md | 12 - automanual/new_delete/6-33-1.md | 36 - automanual/new_delete/6-33-2.md | 44 - automanual/new_delete/6-34.md | 12 - automanual/new_delete/6-35.md | 14 - automanual/new_delete/6-36.md | 34 - automanual/new_delete/6-37.md | 10 - automanual/new_delete/6-38-1.md | 26 - automanual/new_delete/6-38-2.md | 61 -- automanual/new_delete/6-39-1.md | 22 - automanual/new_delete/6-39-2.md | 16 - automanual/new_delete/6-39-3.md | 12 - automanual/new_delete/6-39-4.md | 10 - automanual/new_delete/6-39-5.md | 11 - automanual/new_delete/6-39-6.md | 14 - automanual/new_delete/6-39-7.md | 10 - automanual/new_delete/6-4-1.md | 14 - automanual/new_delete/6-4-2.md | 25 - automanual/new_delete/6-4-3.md | 17 - automanual/new_delete/6-4-4.md | 20 - automanual/new_delete/6-4-5.md | 14 - automanual/new_delete/6-4-6.md | 10 - automanual/new_delete/6-4-7.md | 8 - automanual/new_delete/6-40-1.md | 82 -- automanual/new_delete/6-40-2.md | 22 - automanual/new_delete/6-41.md | 34 - automanual/new_delete/6-42.md | 19 - automanual/new_delete/6-43.md | 30 - automanual/new_delete/6-44-1.md | 16 - automanual/new_delete/6-44-2.md | 16 - automanual/new_delete/6-44-3.md | 12 - automanual/new_delete/6-45.md | 8 - automanual/new_delete/6-46.md | 8 - automanual/new_delete/6-47.md | 24 - automanual/new_delete/6-48.md | 15 - automanual/new_delete/6-49.md | 61 -- automanual/new_delete/6-5-1.md | 26 - automanual/new_delete/6-5-2.md | 18 - automanual/new_delete/6-5-3.md | 12 - automanual/new_delete/6-50.md | 81 -- automanual/new_delete/6-6.md | 42 - automanual/new_delete/6-7.md | 47 -- automanual/new_delete/6-8-1.md | 12 - automanual/new_delete/6-8-2.md | 8 - automanual/new_delete/6-9.md | 22 - automanual/new_delete/7-1.md | 20 - automanual/new_delete/7-2.md | 13 - automanual/new_delete/7-3-1.md | 49 -- automanual/new_delete/7-3-2.md | 6 - automanual/new_delete/7-4.md | 12 - automanual/new_delete/8-1-1.md | 12 - automanual/new_delete/8-1-2.md | 88 -- automanual/new_delete/8-1-3.md | 10 - automanual/new_delete/8-1-4.md | 35 - automanual/new_delete/8-1-5.md | 16 - automanual/new_delete/8-1-6.md | 132 --- automanual/new_delete/8-1-7.md | 29 - automanual/new_delete/8-1-8.md | 24 - automanual/new_delete/8-1-9.md | 116 --- automanual/new_delete/8-2-1.md | 24 - automanual/new_delete/8-2-2.md | 22 - automanual/new_delete/8-2-3.md | 7 - automanual/new_delete/8-2-4.md | 24 - automanual/new_delete/8-3-1.md | 749 ----------------- automanual/new_delete/9-1.md | 51 -- automanual/new_delete/9-2.md | 198 ----- automanual/new_delete/TOC.md | 236 ------ automanual/new_delete/credit.md | 29 - automanual/old/1-1.md | 15 - automanual/old/1-10.md | 20 - automanual/old/1-2-1.md | 12 - automanual/old/1-2-2.md | 6 - automanual/old/1-2-3.md | 4 - automanual/old/1-2-4.md | 15 - automanual/old/1-2-5.md | 8 - automanual/old/1-2-6.md | 8 - automanual/old/1-2-7.md | 25 - automanual/old/1-2-8.md | 18 - automanual/old/1-3.md | 16 - automanual/old/1-4.md | 26 - automanual/old/1-5.md | 12 - automanual/old/1-6.md | 30 - automanual/old/1-7-1.md | 12 - automanual/old/1-7-2.md | 34 - automanual/old/1-7-3.md | 6 - automanual/old/1-8.md | 17 - automanual/old/1-9.md | 8 - automanual/old/2-1.md | 39 - automanual/old/2-2.md | 12 - automanual/old/3.md | 21 - automanual/old/4-1-1.md | 34 - automanual/old/4-1-2.md | 16 - automanual/old/4-1-3.md | 12 - automanual/old/4-1-4.md | 107 --- automanual/old/4-2-1-1.md | 105 --- automanual/old/4-2-1-2.md | 22 - automanual/old/4-2-1-3.md | 24 - automanual/old/4-2-2.md | 15 - automanual/old/5-1.md | 50 -- automanual/old/5-2.md | 19 - automanual/old/5-3.md | 295 ------- automanual/old/5-4.md | 18 - automanual/old/5-5.md | 12 - automanual/old/5-6.md | 98 --- automanual/old/6-1-1.md | 31 - automanual/old/6-1-2.md | 47 -- automanual/old/6-1-3.md | 23 - automanual/old/6-1-4-1.md | 50 -- automanual/old/6-1-4-2.md | 141 ---- automanual/old/6-1-5.md | 45 -- automanual/old/6-1-6.md | 39 - automanual/old/6-1-7.md | 17 - automanual/old/6-1-8-1.md | 27 - automanual/old/6-1-8-2.md | 18 - automanual/old/6-10.md | 10 - automanual/old/6-11.md | 12 - automanual/old/6-12.md | 26 - automanual/old/6-13-1.md | 24 - automanual/old/6-13-2.md | 14 - automanual/old/6-14-1.md | 16 - automanual/old/6-14-2.md | 10 - automanual/old/6-14-3.md | 22 - automanual/old/6-14-4.md | 16 - automanual/old/6-14-5.md | 8 - automanual/old/6-15-1.md | 18 - automanual/old/6-15-2.md | 18 - automanual/old/6-15-3.md | 18 - automanual/old/6-15-4.md | 18 - automanual/old/6-15-5.md | 18 - automanual/old/6-16.md | 14 - automanual/old/6-17.md | 52 -- automanual/old/6-18.md | 35 - automanual/old/6-19.md | 16 - automanual/old/6-2.md | 24 - automanual/old/6-20.md | 8 - automanual/old/6-21.md | 12 - automanual/old/6-22-1.md | 12 - automanual/old/6-22-2.md | 22 - automanual/old/6-23.md | 14 - automanual/old/6-24.md | 36 - automanual/old/6-25.md | 8 - automanual/old/6-26.md | 81 -- automanual/old/6-27.md | 49 -- automanual/old/6-28-1.md | 14 - automanual/old/6-28-2.md | 84 -- automanual/old/6-29-1.md | 18 - automanual/old/6-29-2.md | 18 - automanual/old/6-3.md | 18 - automanual/old/6-30.md | 16 - automanual/old/6-31.md | 31 - automanual/old/6-32-1.md | 64 -- automanual/old/6-32-2.md | 12 - automanual/old/6-33-1.md | 36 - automanual/old/6-33-2.md | 44 - automanual/old/6-34.md | 12 - automanual/old/6-35.md | 14 - automanual/old/6-36.md | 34 - automanual/old/6-37.md | 10 - automanual/old/6-38-1.md | 26 - automanual/old/6-38-2.md | 61 -- automanual/old/6-39-1.md | 22 - automanual/old/6-39-2.md | 16 - automanual/old/6-39-3.md | 12 - automanual/old/6-39-4.md | 10 - automanual/old/6-39-5.md | 12 - automanual/old/6-39-6.md | 14 - automanual/old/6-39-7.md | 10 - automanual/old/6-4-1.md | 14 - automanual/old/6-4-2.md | 25 - automanual/old/6-4-3.md | 17 - automanual/old/6-4-4.md | 20 - automanual/old/6-4-5.md | 14 - automanual/old/6-4-6.md | 10 - automanual/old/6-4-7.md | 8 - automanual/old/6-40-1.md | 82 -- automanual/old/6-40-2.md | 22 - automanual/old/6-41.md | 34 - automanual/old/6-42.md | 19 - automanual/old/6-43.md | 30 - automanual/old/6-44-1.md | 16 - automanual/old/6-44-2.md | 16 - automanual/old/6-44-3.md | 12 - automanual/old/6-45.md | 8 - automanual/old/6-46.md | 8 - automanual/old/6-47.md | 24 - automanual/old/6-48.md | 15 - automanual/old/6-49.md | 61 -- automanual/old/6-5-1.md | 26 - automanual/old/6-5-2.md | 18 - automanual/old/6-5-3.md | 12 - automanual/old/6-50.md | 81 -- automanual/old/6-6.md | 42 - automanual/old/6-7.md | 47 -- automanual/old/6-8-1.md | 12 - automanual/old/6-8-2.md | 8 - automanual/old/6-9.md | 22 - automanual/old/7-1.md | 20 - automanual/old/7-2.md | 13 - automanual/old/7-3-1.md | 49 -- automanual/old/7-3-2.md | 6 - automanual/old/7-4.md | 12 - automanual/old/8-1-1.md | 12 - automanual/old/8-1-2.md | 88 -- automanual/old/8-1-3.md | 10 - automanual/old/8-1-4.md | 35 - automanual/old/8-1-5.md | 16 - automanual/old/8-1-6.md | 132 --- automanual/old/8-1-7.md | 29 - automanual/old/8-1-8.md | 24 - automanual/old/8-1-9.md | 116 --- automanual/old/8-2-1.md | 24 - automanual/old/8-2-2.md | 22 - automanual/old/8-2-3.md | 7 - automanual/old/8-2-4.md | 24 - automanual/old/8-3-1.md | 749 ----------------- automanual/old/9-1.md | 51 -- automanual/old/9-2.md | 198 ----- automanual/old/TOC.md | 234 ------ automanual/old/credit.md | 29 - automanual/old/list.txt | 153 ---- automanual/old/markdown.code-workspace | 16 - automanual/old/opensourcecobol.png | Bin 92095 -> 0 bytes automanual/old_delete/1-1.md | 22 - automanual/old_delete/1-10.md | 27 - automanual/old_delete/1-2-1.md | 19 - automanual/old_delete/1-2-2.md | 13 - automanual/old_delete/1-2-3.md | 11 - automanual/old_delete/1-2-4.md | 22 - automanual/old_delete/1-2-5.md | 15 - automanual/old_delete/1-2-6.md | 15 - automanual/old_delete/1-2-7.md | 32 - automanual/old_delete/1-2-8.md | 25 - automanual/old_delete/1-3.md | 23 - automanual/old_delete/1-4.md | 33 - automanual/old_delete/1-5.md | 19 - automanual/old_delete/1-6.md | 37 - automanual/old_delete/1-7-1.md | 19 - automanual/old_delete/1-7-2.md | 41 - automanual/old_delete/1-7-3.md | 13 - automanual/old_delete/1-8.md | 24 - automanual/old_delete/1-9.md | 15 - automanual/old_delete/2-1.md | 46 -- automanual/old_delete/2-2.md | 19 - automanual/old_delete/3.md | 28 - automanual/old_delete/4-1-1.md | 41 - automanual/old_delete/4-1-2.md | 23 - automanual/old_delete/4-1-3.md | 19 - automanual/old_delete/4-1-4.md | 114 --- automanual/old_delete/4-2-1-1.md | 112 --- automanual/old_delete/4-2-1-2.md | 29 - automanual/old_delete/4-2-1-3.md | 31 - automanual/old_delete/4-2-2.md | 22 - automanual/old_delete/5-1.md | 57 -- automanual/old_delete/5-2.md | 26 - automanual/old_delete/5-3.md | 302 ------- automanual/old_delete/5-4.md | 25 - automanual/old_delete/5-5.md | 19 - automanual/old_delete/5-6.md | 105 --- automanual/old_delete/6-1-1.md | 38 - automanual/old_delete/6-1-2.md | 54 -- automanual/old_delete/6-1-3.md | 30 - automanual/old_delete/6-1-4-1.md | 57 -- automanual/old_delete/6-1-4-2.md | 148 ---- automanual/old_delete/6-1-5.md | 52 -- automanual/old_delete/6-1-6.md | 47 -- automanual/old_delete/6-1-7.md | 24 - automanual/old_delete/6-1-8-1.md | 34 - automanual/old_delete/6-1-8-2.md | 25 - automanual/old_delete/6-10.md | 17 - automanual/old_delete/6-11.md | 19 - automanual/old_delete/6-12.md | 33 - automanual/old_delete/6-13-1.md | 31 - automanual/old_delete/6-13-2.md | 21 - automanual/old_delete/6-14-1.md | 23 - automanual/old_delete/6-14-2.md | 17 - automanual/old_delete/6-14-3.md | 29 - automanual/old_delete/6-14-4.md | 23 - automanual/old_delete/6-14-5.md | 15 - automanual/old_delete/6-15-1.md | 25 - automanual/old_delete/6-15-2.md | 25 - automanual/old_delete/6-15-3.md | 25 - automanual/old_delete/6-15-4.md | 25 - automanual/old_delete/6-15-5.md | 25 - automanual/old_delete/6-16.md | 21 - automanual/old_delete/6-17.md | 59 -- automanual/old_delete/6-18.md | 42 - automanual/old_delete/6-19.md | 23 - automanual/old_delete/6-2.md | 31 - automanual/old_delete/6-20.md | 15 - automanual/old_delete/6-21.md | 19 - automanual/old_delete/6-22-1.md | 19 - automanual/old_delete/6-22-2.md | 29 - automanual/old_delete/6-23.md | 21 - automanual/old_delete/6-24.md | 43 - automanual/old_delete/6-25.md | 15 - automanual/old_delete/6-26.md | 88 -- automanual/old_delete/6-27.md | 56 -- automanual/old_delete/6-28-1.md | 21 - automanual/old_delete/6-28-2.md | 91 --- automanual/old_delete/6-29-1.md | 25 - automanual/old_delete/6-29-2.md | 25 - automanual/old_delete/6-3.md | 25 - automanual/old_delete/6-30.md | 23 - automanual/old_delete/6-31.md | 38 - automanual/old_delete/6-32-1.md | 71 -- automanual/old_delete/6-32-2.md | 19 - automanual/old_delete/6-33-1.md | 43 - automanual/old_delete/6-33-2.md | 51 -- automanual/old_delete/6-34.md | 19 - automanual/old_delete/6-35.md | 21 - automanual/old_delete/6-36.md | 41 - automanual/old_delete/6-37.md | 17 - automanual/old_delete/6-38-1.md | 33 - automanual/old_delete/6-38-2.md | 68 -- automanual/old_delete/6-39-1.md | 29 - automanual/old_delete/6-39-2.md | 23 - automanual/old_delete/6-39-3.md | 19 - automanual/old_delete/6-39-4.md | 17 - automanual/old_delete/6-39-5.md | 19 - automanual/old_delete/6-39-6.md | 21 - automanual/old_delete/6-39-7.md | 17 - automanual/old_delete/6-4-1.md | 21 - automanual/old_delete/6-4-2.md | 32 - automanual/old_delete/6-4-3.md | 24 - automanual/old_delete/6-4-4.md | 27 - automanual/old_delete/6-4-5.md | 21 - automanual/old_delete/6-4-6.md | 17 - automanual/old_delete/6-4-7.md | 15 - automanual/old_delete/6-40-1.md | 89 --- automanual/old_delete/6-40-2.md | 29 - automanual/old_delete/6-41.md | 41 - automanual/old_delete/6-42.md | 26 - automanual/old_delete/6-43.md | 37 - automanual/old_delete/6-44-1.md | 23 - automanual/old_delete/6-44-2.md | 23 - automanual/old_delete/6-44-3.md | 19 - automanual/old_delete/6-45.md | 15 - automanual/old_delete/6-46.md | 15 - automanual/old_delete/6-47.md | 31 - automanual/old_delete/6-48.md | 22 - automanual/old_delete/6-49.md | 68 -- automanual/old_delete/6-5-1.md | 33 - automanual/old_delete/6-5-2.md | 25 - automanual/old_delete/6-5-3.md | 19 - automanual/old_delete/6-50.md | 88 -- automanual/old_delete/6-6.md | 49 -- automanual/old_delete/6-7.md | 54 -- automanual/old_delete/6-8-1.md | 19 - automanual/old_delete/6-8-2.md | 15 - automanual/old_delete/6-9.md | 29 - automanual/old_delete/7-1.md | 27 - automanual/old_delete/7-2.md | 20 - automanual/old_delete/7-3-1.md | 56 -- automanual/old_delete/7-3-2.md | 13 - automanual/old_delete/7-4.md | 19 - automanual/old_delete/8-1-1.md | 19 - automanual/old_delete/8-1-2.md | 95 --- automanual/old_delete/8-1-3.md | 17 - automanual/old_delete/8-1-4.md | 42 - automanual/old_delete/8-1-5.md | 23 - automanual/old_delete/8-1-6.md | 139 ---- automanual/old_delete/8-1-7.md | 36 - automanual/old_delete/8-1-8.md | 31 - automanual/old_delete/8-1-9.md | 123 --- automanual/old_delete/8-2-1.md | 31 - automanual/old_delete/8-2-2.md | 29 - automanual/old_delete/8-2-3.md | 14 - automanual/old_delete/8-2-4.md | 31 - automanual/old_delete/8-3-1.md | 756 ------------------ automanual/old_delete/9-1.md | 58 -- automanual/old_delete/9-2.md | 205 ----- automanual/old_delete/TOC.md | 239 ------ automanual/old_delete/credit.md | 39 - .../opensourcecobol.github.io.code-workspace | 20 - 623 files changed, 25605 deletions(-) delete mode 100644 automanual/AUTODELETE$1.class delete mode 100644 automanual/AUTODELETE$2.class delete mode 100644 automanual/AUTODELETE$3.class delete mode 100644 automanual/AUTODELETE$4.class delete mode 100644 automanual/AUTODELETE$5.class delete mode 100644 automanual/AUTODELETE$6.class delete mode 100644 automanual/AUTODELETE$7.class delete mode 100644 automanual/AUTODELETE.cbl delete mode 100644 automanual/AUTODELETE.class delete mode 100644 automanual/AUTODELETE.java delete mode 100644 automanual/AUTODELETE_2.cbl delete mode 100644 automanual/AUTOMANUAL.cbl delete mode 100644 automanual/AUTOMANUAL_original.cbl delete mode 100755 automanual/cob4j_convert.bat delete mode 100755 automanual/cob4j_convert2.bat delete mode 100644 automanual/new/1-1.md delete mode 100644 automanual/new/1-10.md delete mode 100644 automanual/new/1-2-1.md delete mode 100644 automanual/new/1-2-2.md delete mode 100644 automanual/new/1-2-3.md delete mode 100644 automanual/new/1-2-4.md delete mode 100644 automanual/new/1-2-5.md delete mode 100644 automanual/new/1-2-6.md delete mode 100644 automanual/new/1-2-7.md delete mode 100644 automanual/new/1-2-8.md delete mode 100644 automanual/new/1-3.md delete mode 100644 automanual/new/1-4.md delete mode 100644 automanual/new/1-5.md delete mode 100644 automanual/new/1-6.md delete mode 100644 automanual/new/1-7-1.md delete mode 100644 automanual/new/1-7-2.md delete mode 100644 automanual/new/1-7-3.md delete mode 100644 automanual/new/1-8.md delete mode 100644 automanual/new/1-9.md delete mode 100644 automanual/new/2-1.md delete mode 100644 automanual/new/2-2.md delete mode 100644 automanual/new/3.md delete mode 100644 automanual/new/4-1-1.md delete mode 100644 automanual/new/4-1-2.md delete mode 100644 automanual/new/4-1-3.md delete mode 100644 automanual/new/4-1-4.md delete mode 100644 automanual/new/4-2-1-1.md delete mode 100644 automanual/new/4-2-1-2.md delete mode 100644 automanual/new/4-2-1-3.md delete mode 100644 automanual/new/4-2-2.md delete mode 100644 automanual/new/5-1.md delete mode 100644 automanual/new/5-2.md delete mode 100644 automanual/new/5-3.md delete mode 100644 automanual/new/5-4.md delete mode 100644 automanual/new/5-5.md delete mode 100644 automanual/new/5-6.md delete mode 100644 automanual/new/6-1-1.md delete mode 100644 automanual/new/6-1-2.md delete mode 100644 automanual/new/6-1-3.md delete mode 100644 automanual/new/6-1-4-1.md delete mode 100644 automanual/new/6-1-4-2.md delete mode 100644 automanual/new/6-1-5.md delete mode 100644 automanual/new/6-1-6.md delete mode 100644 automanual/new/6-1-7.md delete mode 100644 automanual/new/6-1-8-1.md delete mode 100644 automanual/new/6-1-8-2.md delete mode 100644 automanual/new/6-10.md delete mode 100644 automanual/new/6-11.md delete mode 100644 automanual/new/6-12.md delete mode 100644 automanual/new/6-13-1.md delete mode 100644 automanual/new/6-13-2.md delete mode 100644 automanual/new/6-14-1.md delete mode 100644 automanual/new/6-14-2.md delete mode 100644 automanual/new/6-14-3.md delete mode 100644 automanual/new/6-14-4.md delete mode 100644 automanual/new/6-14-5.md delete mode 100644 automanual/new/6-15-1.md delete mode 100644 automanual/new/6-15-2.md delete mode 100644 automanual/new/6-15-3.md delete mode 100644 automanual/new/6-15-4.md delete mode 100644 automanual/new/6-15-5.md delete mode 100644 automanual/new/6-16.md delete mode 100644 automanual/new/6-17.md delete mode 100644 automanual/new/6-18.md delete mode 100644 automanual/new/6-19.md delete mode 100644 automanual/new/6-2.md delete mode 100644 automanual/new/6-20.md delete mode 100644 automanual/new/6-21.md delete mode 100644 automanual/new/6-22-1.md delete mode 100644 automanual/new/6-22-2.md delete mode 100644 automanual/new/6-23.md delete mode 100644 automanual/new/6-24.md delete mode 100644 automanual/new/6-25.md delete mode 100644 automanual/new/6-26.md delete mode 100644 automanual/new/6-27.md delete mode 100644 automanual/new/6-28-1.md delete mode 100644 automanual/new/6-28-2.md delete mode 100644 automanual/new/6-29-1.md delete mode 100644 automanual/new/6-29-2.md delete mode 100644 automanual/new/6-3.md delete mode 100644 automanual/new/6-30.md delete mode 100644 automanual/new/6-31.md delete mode 100644 automanual/new/6-32-1.md delete mode 100644 automanual/new/6-32-2.md delete mode 100644 automanual/new/6-33-1.md delete mode 100644 automanual/new/6-33-2.md delete mode 100644 automanual/new/6-34.md delete mode 100644 automanual/new/6-35.md delete mode 100644 automanual/new/6-36.md delete mode 100644 automanual/new/6-37.md delete mode 100644 automanual/new/6-38-1.md delete mode 100644 automanual/new/6-38-2.md delete mode 100644 automanual/new/6-39-1.md delete mode 100644 automanual/new/6-39-2.md delete mode 100644 automanual/new/6-39-3.md delete mode 100644 automanual/new/6-39-4.md delete mode 100644 automanual/new/6-39-5.md delete mode 100644 automanual/new/6-39-6.md delete mode 100644 automanual/new/6-39-7.md delete mode 100644 automanual/new/6-4-1.md delete mode 100644 automanual/new/6-4-2.md delete mode 100644 automanual/new/6-4-3.md delete mode 100644 automanual/new/6-4-4.md delete mode 100644 automanual/new/6-4-5.md delete mode 100644 automanual/new/6-4-6.md delete mode 100644 automanual/new/6-4-7.md delete mode 100644 automanual/new/6-40-1.md delete mode 100644 automanual/new/6-40-2.md delete mode 100644 automanual/new/6-41.md delete mode 100644 automanual/new/6-42.md delete mode 100644 automanual/new/6-43.md delete mode 100644 automanual/new/6-44-1.md delete mode 100644 automanual/new/6-44-2.md delete mode 100644 automanual/new/6-44-3.md delete mode 100644 automanual/new/6-45.md delete mode 100644 automanual/new/6-46.md delete mode 100644 automanual/new/6-47.md delete mode 100644 automanual/new/6-48.md delete mode 100644 automanual/new/6-49.md delete mode 100644 automanual/new/6-5-1.md delete mode 100644 automanual/new/6-5-2.md delete mode 100644 automanual/new/6-5-3.md delete mode 100644 automanual/new/6-50.md delete mode 100644 automanual/new/6-6.md delete mode 100644 automanual/new/6-7.md delete mode 100644 automanual/new/6-8-1.md delete mode 100644 automanual/new/6-8-2.md delete mode 100644 automanual/new/6-9.md delete mode 100644 automanual/new/7-1.md delete mode 100644 automanual/new/7-2.md delete mode 100644 automanual/new/7-3-1.md delete mode 100644 automanual/new/7-3-2.md delete mode 100644 automanual/new/7-4.md delete mode 100644 automanual/new/8-1-1.md delete mode 100644 automanual/new/8-1-2.md delete mode 100644 automanual/new/8-1-3.md delete mode 100644 automanual/new/8-1-4.md delete mode 100644 automanual/new/8-1-5.md delete mode 100644 automanual/new/8-1-6.md delete mode 100644 automanual/new/8-1-7.md delete mode 100644 automanual/new/8-1-8.md delete mode 100644 automanual/new/8-1-9.md delete mode 100644 automanual/new/8-2-1.md delete mode 100644 automanual/new/8-2-2.md delete mode 100644 automanual/new/8-2-3.md delete mode 100644 automanual/new/8-2-4.md delete mode 100644 automanual/new/8-3-1.md delete mode 100644 automanual/new/9-1.md delete mode 100644 automanual/new/9-2.md delete mode 100644 automanual/new/TOC.md delete mode 100644 automanual/new/credit.md delete mode 100644 automanual/new_delete/1-1.md delete mode 100644 automanual/new_delete/1-10.md delete mode 100644 automanual/new_delete/1-2-1.md delete mode 100644 automanual/new_delete/1-2-2.md delete mode 100644 automanual/new_delete/1-2-3.md delete mode 100644 automanual/new_delete/1-2-4.md delete mode 100644 automanual/new_delete/1-2-5.md delete mode 100644 automanual/new_delete/1-2-6.md delete mode 100644 automanual/new_delete/1-2-7.md delete mode 100644 automanual/new_delete/1-2-8.md delete mode 100644 automanual/new_delete/1-3.md delete mode 100644 automanual/new_delete/1-4.md delete mode 100644 automanual/new_delete/1-5.md delete mode 100644 automanual/new_delete/1-6.md delete mode 100644 automanual/new_delete/1-7-1.md delete mode 100644 automanual/new_delete/1-7-2.md delete mode 100644 automanual/new_delete/1-7-3.md delete mode 100644 automanual/new_delete/1-8.md delete mode 100644 automanual/new_delete/1-9.md delete mode 100644 automanual/new_delete/2-1.md delete mode 100644 automanual/new_delete/2-2.md delete mode 100644 automanual/new_delete/3.md delete mode 100644 automanual/new_delete/4-1-1.md delete mode 100644 automanual/new_delete/4-1-2.md delete mode 100644 automanual/new_delete/4-1-3.md delete mode 100644 automanual/new_delete/4-1-4.md delete mode 100644 automanual/new_delete/4-2-1-1.md delete mode 100644 automanual/new_delete/4-2-1-2.md delete mode 100644 automanual/new_delete/4-2-1-3.md delete mode 100644 automanual/new_delete/4-2-2.md delete mode 100644 automanual/new_delete/5-1.md delete mode 100644 automanual/new_delete/5-2.md delete mode 100644 automanual/new_delete/5-3.md delete mode 100644 automanual/new_delete/5-4.md delete mode 100644 automanual/new_delete/5-5.md delete mode 100644 automanual/new_delete/5-6.md delete mode 100644 automanual/new_delete/6-1-1.md delete mode 100644 automanual/new_delete/6-1-2.md delete mode 100644 automanual/new_delete/6-1-3.md delete mode 100644 automanual/new_delete/6-1-4-1.md delete mode 100644 automanual/new_delete/6-1-4-2.md delete mode 100644 automanual/new_delete/6-1-5.md delete mode 100644 automanual/new_delete/6-1-6.md delete mode 100644 automanual/new_delete/6-1-7.md delete mode 100644 automanual/new_delete/6-1-8-1.md delete mode 100644 automanual/new_delete/6-1-8-2.md delete mode 100644 automanual/new_delete/6-10.md delete mode 100644 automanual/new_delete/6-11.md delete mode 100644 automanual/new_delete/6-12.md delete mode 100644 automanual/new_delete/6-13-1.md delete mode 100644 automanual/new_delete/6-13-2.md delete mode 100644 automanual/new_delete/6-14-1.md delete mode 100644 automanual/new_delete/6-14-2.md delete mode 100644 automanual/new_delete/6-14-3.md delete mode 100644 automanual/new_delete/6-14-4.md delete mode 100644 automanual/new_delete/6-14-5.md delete mode 100644 automanual/new_delete/6-15-1.md delete mode 100644 automanual/new_delete/6-15-2.md delete mode 100644 automanual/new_delete/6-15-3.md delete mode 100644 automanual/new_delete/6-15-4.md delete mode 100644 automanual/new_delete/6-15-5.md delete mode 100644 automanual/new_delete/6-16.md delete mode 100644 automanual/new_delete/6-17.md delete mode 100644 automanual/new_delete/6-18.md delete mode 100644 automanual/new_delete/6-19.md delete mode 100644 automanual/new_delete/6-2.md delete mode 100644 automanual/new_delete/6-20.md delete mode 100644 automanual/new_delete/6-21.md delete mode 100644 automanual/new_delete/6-22-1.md delete mode 100644 automanual/new_delete/6-22-2.md delete mode 100644 automanual/new_delete/6-23.md delete mode 100644 automanual/new_delete/6-24.md delete mode 100644 automanual/new_delete/6-25.md delete mode 100644 automanual/new_delete/6-26.md delete mode 100644 automanual/new_delete/6-27.md delete mode 100644 automanual/new_delete/6-28-1.md delete mode 100644 automanual/new_delete/6-28-2.md delete mode 100644 automanual/new_delete/6-29-1.md delete mode 100644 automanual/new_delete/6-29-2.md delete mode 100644 automanual/new_delete/6-3.md delete mode 100644 automanual/new_delete/6-30.md delete mode 100644 automanual/new_delete/6-31.md delete mode 100644 automanual/new_delete/6-32-1.md delete mode 100644 automanual/new_delete/6-32-2.md delete mode 100644 automanual/new_delete/6-33-1.md delete mode 100644 automanual/new_delete/6-33-2.md delete mode 100644 automanual/new_delete/6-34.md delete mode 100644 automanual/new_delete/6-35.md delete mode 100644 automanual/new_delete/6-36.md delete mode 100644 automanual/new_delete/6-37.md delete mode 100644 automanual/new_delete/6-38-1.md delete mode 100644 automanual/new_delete/6-38-2.md delete mode 100644 automanual/new_delete/6-39-1.md delete mode 100644 automanual/new_delete/6-39-2.md delete mode 100644 automanual/new_delete/6-39-3.md delete mode 100644 automanual/new_delete/6-39-4.md delete mode 100644 automanual/new_delete/6-39-5.md delete mode 100644 automanual/new_delete/6-39-6.md delete mode 100644 automanual/new_delete/6-39-7.md delete mode 100644 automanual/new_delete/6-4-1.md delete mode 100644 automanual/new_delete/6-4-2.md delete mode 100644 automanual/new_delete/6-4-3.md delete mode 100644 automanual/new_delete/6-4-4.md delete mode 100644 automanual/new_delete/6-4-5.md delete mode 100644 automanual/new_delete/6-4-6.md delete mode 100644 automanual/new_delete/6-4-7.md delete mode 100644 automanual/new_delete/6-40-1.md delete mode 100644 automanual/new_delete/6-40-2.md delete mode 100644 automanual/new_delete/6-41.md delete mode 100644 automanual/new_delete/6-42.md delete mode 100644 automanual/new_delete/6-43.md delete mode 100644 automanual/new_delete/6-44-1.md delete mode 100644 automanual/new_delete/6-44-2.md delete mode 100644 automanual/new_delete/6-44-3.md delete mode 100644 automanual/new_delete/6-45.md delete mode 100644 automanual/new_delete/6-46.md delete mode 100644 automanual/new_delete/6-47.md delete mode 100644 automanual/new_delete/6-48.md delete mode 100644 automanual/new_delete/6-49.md delete mode 100644 automanual/new_delete/6-5-1.md delete mode 100644 automanual/new_delete/6-5-2.md delete mode 100644 automanual/new_delete/6-5-3.md delete mode 100644 automanual/new_delete/6-50.md delete mode 100644 automanual/new_delete/6-6.md delete mode 100644 automanual/new_delete/6-7.md delete mode 100644 automanual/new_delete/6-8-1.md delete mode 100644 automanual/new_delete/6-8-2.md delete mode 100644 automanual/new_delete/6-9.md delete mode 100644 automanual/new_delete/7-1.md delete mode 100644 automanual/new_delete/7-2.md delete mode 100644 automanual/new_delete/7-3-1.md delete mode 100644 automanual/new_delete/7-3-2.md delete mode 100644 automanual/new_delete/7-4.md delete mode 100644 automanual/new_delete/8-1-1.md delete mode 100644 automanual/new_delete/8-1-2.md delete mode 100644 automanual/new_delete/8-1-3.md delete mode 100644 automanual/new_delete/8-1-4.md delete mode 100644 automanual/new_delete/8-1-5.md delete mode 100644 automanual/new_delete/8-1-6.md delete mode 100644 automanual/new_delete/8-1-7.md delete mode 100644 automanual/new_delete/8-1-8.md delete mode 100644 automanual/new_delete/8-1-9.md delete mode 100644 automanual/new_delete/8-2-1.md delete mode 100644 automanual/new_delete/8-2-2.md delete mode 100644 automanual/new_delete/8-2-3.md delete mode 100644 automanual/new_delete/8-2-4.md delete mode 100644 automanual/new_delete/8-3-1.md delete mode 100644 automanual/new_delete/9-1.md delete mode 100644 automanual/new_delete/9-2.md delete mode 100644 automanual/new_delete/TOC.md delete mode 100644 automanual/new_delete/credit.md delete mode 100644 automanual/old/1-1.md delete mode 100644 automanual/old/1-10.md delete mode 100644 automanual/old/1-2-1.md delete mode 100644 automanual/old/1-2-2.md delete mode 100644 automanual/old/1-2-3.md delete mode 100644 automanual/old/1-2-4.md delete mode 100644 automanual/old/1-2-5.md delete mode 100644 automanual/old/1-2-6.md delete mode 100644 automanual/old/1-2-7.md delete mode 100644 automanual/old/1-2-8.md delete mode 100644 automanual/old/1-3.md delete mode 100644 automanual/old/1-4.md delete mode 100644 automanual/old/1-5.md delete mode 100644 automanual/old/1-6.md delete mode 100644 automanual/old/1-7-1.md delete mode 100644 automanual/old/1-7-2.md delete mode 100644 automanual/old/1-7-3.md delete mode 100644 automanual/old/1-8.md delete mode 100644 automanual/old/1-9.md delete mode 100644 automanual/old/2-1.md delete mode 100644 automanual/old/2-2.md delete mode 100644 automanual/old/3.md delete mode 100644 automanual/old/4-1-1.md delete mode 100644 automanual/old/4-1-2.md delete mode 100644 automanual/old/4-1-3.md delete mode 100644 automanual/old/4-1-4.md delete mode 100644 automanual/old/4-2-1-1.md delete mode 100644 automanual/old/4-2-1-2.md delete mode 100644 automanual/old/4-2-1-3.md delete mode 100644 automanual/old/4-2-2.md delete mode 100644 automanual/old/5-1.md delete mode 100644 automanual/old/5-2.md delete mode 100644 automanual/old/5-3.md delete mode 100644 automanual/old/5-4.md delete mode 100644 automanual/old/5-5.md delete mode 100644 automanual/old/5-6.md delete mode 100644 automanual/old/6-1-1.md delete mode 100644 automanual/old/6-1-2.md delete mode 100644 automanual/old/6-1-3.md delete mode 100644 automanual/old/6-1-4-1.md delete mode 100644 automanual/old/6-1-4-2.md delete mode 100644 automanual/old/6-1-5.md delete mode 100644 automanual/old/6-1-6.md delete mode 100644 automanual/old/6-1-7.md delete mode 100644 automanual/old/6-1-8-1.md delete mode 100644 automanual/old/6-1-8-2.md delete mode 100644 automanual/old/6-10.md delete mode 100644 automanual/old/6-11.md delete mode 100644 automanual/old/6-12.md delete mode 100644 automanual/old/6-13-1.md delete mode 100644 automanual/old/6-13-2.md delete mode 100644 automanual/old/6-14-1.md delete mode 100644 automanual/old/6-14-2.md delete mode 100644 automanual/old/6-14-3.md delete mode 100644 automanual/old/6-14-4.md delete mode 100644 automanual/old/6-14-5.md delete mode 100644 automanual/old/6-15-1.md delete mode 100644 automanual/old/6-15-2.md delete mode 100644 automanual/old/6-15-3.md delete mode 100644 automanual/old/6-15-4.md delete mode 100644 automanual/old/6-15-5.md delete mode 100644 automanual/old/6-16.md delete mode 100644 automanual/old/6-17.md delete mode 100644 automanual/old/6-18.md delete mode 100644 automanual/old/6-19.md delete mode 100644 automanual/old/6-2.md delete mode 100644 automanual/old/6-20.md delete mode 100644 automanual/old/6-21.md delete mode 100644 automanual/old/6-22-1.md delete mode 100644 automanual/old/6-22-2.md delete mode 100644 automanual/old/6-23.md delete mode 100644 automanual/old/6-24.md delete mode 100644 automanual/old/6-25.md delete mode 100644 automanual/old/6-26.md delete mode 100644 automanual/old/6-27.md delete mode 100644 automanual/old/6-28-1.md delete mode 100644 automanual/old/6-28-2.md delete mode 100644 automanual/old/6-29-1.md delete mode 100644 automanual/old/6-29-2.md delete mode 100644 automanual/old/6-3.md delete mode 100644 automanual/old/6-30.md delete mode 100644 automanual/old/6-31.md delete mode 100644 automanual/old/6-32-1.md delete mode 100644 automanual/old/6-32-2.md delete mode 100644 automanual/old/6-33-1.md delete mode 100644 automanual/old/6-33-2.md delete mode 100644 automanual/old/6-34.md delete mode 100644 automanual/old/6-35.md delete mode 100644 automanual/old/6-36.md delete mode 100644 automanual/old/6-37.md delete mode 100644 automanual/old/6-38-1.md delete mode 100644 automanual/old/6-38-2.md delete mode 100644 automanual/old/6-39-1.md delete mode 100644 automanual/old/6-39-2.md delete mode 100644 automanual/old/6-39-3.md delete mode 100644 automanual/old/6-39-4.md delete mode 100644 automanual/old/6-39-5.md delete mode 100644 automanual/old/6-39-6.md delete mode 100644 automanual/old/6-39-7.md delete mode 100644 automanual/old/6-4-1.md delete mode 100644 automanual/old/6-4-2.md delete mode 100644 automanual/old/6-4-3.md delete mode 100644 automanual/old/6-4-4.md delete mode 100644 automanual/old/6-4-5.md delete mode 100644 automanual/old/6-4-6.md delete mode 100644 automanual/old/6-4-7.md delete mode 100644 automanual/old/6-40-1.md delete mode 100644 automanual/old/6-40-2.md delete mode 100644 automanual/old/6-41.md delete mode 100644 automanual/old/6-42.md delete mode 100644 automanual/old/6-43.md delete mode 100644 automanual/old/6-44-1.md delete mode 100644 automanual/old/6-44-2.md delete mode 100644 automanual/old/6-44-3.md delete mode 100644 automanual/old/6-45.md delete mode 100644 automanual/old/6-46.md delete mode 100644 automanual/old/6-47.md delete mode 100644 automanual/old/6-48.md delete mode 100644 automanual/old/6-49.md delete mode 100644 automanual/old/6-5-1.md delete mode 100644 automanual/old/6-5-2.md delete mode 100644 automanual/old/6-5-3.md delete mode 100644 automanual/old/6-50.md delete mode 100644 automanual/old/6-6.md delete mode 100644 automanual/old/6-7.md delete mode 100644 automanual/old/6-8-1.md delete mode 100644 automanual/old/6-8-2.md delete mode 100644 automanual/old/6-9.md delete mode 100644 automanual/old/7-1.md delete mode 100644 automanual/old/7-2.md delete mode 100644 automanual/old/7-3-1.md delete mode 100644 automanual/old/7-3-2.md delete mode 100644 automanual/old/7-4.md delete mode 100644 automanual/old/8-1-1.md delete mode 100644 automanual/old/8-1-2.md delete mode 100644 automanual/old/8-1-3.md delete mode 100644 automanual/old/8-1-4.md delete mode 100644 automanual/old/8-1-5.md delete mode 100644 automanual/old/8-1-6.md delete mode 100644 automanual/old/8-1-7.md delete mode 100644 automanual/old/8-1-8.md delete mode 100644 automanual/old/8-1-9.md delete mode 100644 automanual/old/8-2-1.md delete mode 100644 automanual/old/8-2-2.md delete mode 100644 automanual/old/8-2-3.md delete mode 100644 automanual/old/8-2-4.md delete mode 100644 automanual/old/8-3-1.md delete mode 100644 automanual/old/9-1.md delete mode 100644 automanual/old/9-2.md delete mode 100644 automanual/old/TOC.md delete mode 100644 automanual/old/credit.md delete mode 100644 automanual/old/list.txt delete mode 100644 automanual/old/markdown.code-workspace delete mode 100644 automanual/old/opensourcecobol.png delete mode 100644 automanual/old_delete/1-1.md delete mode 100644 automanual/old_delete/1-10.md delete mode 100644 automanual/old_delete/1-2-1.md delete mode 100644 automanual/old_delete/1-2-2.md delete mode 100644 automanual/old_delete/1-2-3.md delete mode 100644 automanual/old_delete/1-2-4.md delete mode 100644 automanual/old_delete/1-2-5.md delete mode 100644 automanual/old_delete/1-2-6.md delete mode 100644 automanual/old_delete/1-2-7.md delete mode 100644 automanual/old_delete/1-2-8.md delete mode 100644 automanual/old_delete/1-3.md delete mode 100644 automanual/old_delete/1-4.md delete mode 100644 automanual/old_delete/1-5.md delete mode 100644 automanual/old_delete/1-6.md delete mode 100644 automanual/old_delete/1-7-1.md delete mode 100644 automanual/old_delete/1-7-2.md delete mode 100644 automanual/old_delete/1-7-3.md delete mode 100644 automanual/old_delete/1-8.md delete mode 100644 automanual/old_delete/1-9.md delete mode 100644 automanual/old_delete/2-1.md delete mode 100644 automanual/old_delete/2-2.md delete mode 100644 automanual/old_delete/3.md delete mode 100644 automanual/old_delete/4-1-1.md delete mode 100644 automanual/old_delete/4-1-2.md delete mode 100644 automanual/old_delete/4-1-3.md delete mode 100644 automanual/old_delete/4-1-4.md delete mode 100644 automanual/old_delete/4-2-1-1.md delete mode 100644 automanual/old_delete/4-2-1-2.md delete mode 100644 automanual/old_delete/4-2-1-3.md delete mode 100644 automanual/old_delete/4-2-2.md delete mode 100644 automanual/old_delete/5-1.md delete mode 100644 automanual/old_delete/5-2.md delete mode 100644 automanual/old_delete/5-3.md delete mode 100644 automanual/old_delete/5-4.md delete mode 100644 automanual/old_delete/5-5.md delete mode 100644 automanual/old_delete/5-6.md delete mode 100644 automanual/old_delete/6-1-1.md delete mode 100644 automanual/old_delete/6-1-2.md delete mode 100644 automanual/old_delete/6-1-3.md delete mode 100644 automanual/old_delete/6-1-4-1.md delete mode 100644 automanual/old_delete/6-1-4-2.md delete mode 100644 automanual/old_delete/6-1-5.md delete mode 100644 automanual/old_delete/6-1-6.md delete mode 100644 automanual/old_delete/6-1-7.md delete mode 100644 automanual/old_delete/6-1-8-1.md delete mode 100644 automanual/old_delete/6-1-8-2.md delete mode 100644 automanual/old_delete/6-10.md delete mode 100644 automanual/old_delete/6-11.md delete mode 100644 automanual/old_delete/6-12.md delete mode 100644 automanual/old_delete/6-13-1.md delete mode 100644 automanual/old_delete/6-13-2.md delete mode 100644 automanual/old_delete/6-14-1.md delete mode 100644 automanual/old_delete/6-14-2.md delete mode 100644 automanual/old_delete/6-14-3.md delete mode 100644 automanual/old_delete/6-14-4.md delete mode 100644 automanual/old_delete/6-14-5.md delete mode 100644 automanual/old_delete/6-15-1.md delete mode 100644 automanual/old_delete/6-15-2.md delete mode 100644 automanual/old_delete/6-15-3.md delete mode 100644 automanual/old_delete/6-15-4.md delete mode 100644 automanual/old_delete/6-15-5.md delete mode 100644 automanual/old_delete/6-16.md delete mode 100644 automanual/old_delete/6-17.md delete mode 100644 automanual/old_delete/6-18.md delete mode 100644 automanual/old_delete/6-19.md delete mode 100644 automanual/old_delete/6-2.md delete mode 100644 automanual/old_delete/6-20.md delete mode 100644 automanual/old_delete/6-21.md delete mode 100644 automanual/old_delete/6-22-1.md delete mode 100644 automanual/old_delete/6-22-2.md delete mode 100644 automanual/old_delete/6-23.md delete mode 100644 automanual/old_delete/6-24.md delete mode 100644 automanual/old_delete/6-25.md delete mode 100644 automanual/old_delete/6-26.md delete mode 100644 automanual/old_delete/6-27.md delete mode 100644 automanual/old_delete/6-28-1.md delete mode 100644 automanual/old_delete/6-28-2.md delete mode 100644 automanual/old_delete/6-29-1.md delete mode 100644 automanual/old_delete/6-29-2.md delete mode 100644 automanual/old_delete/6-3.md delete mode 100644 automanual/old_delete/6-30.md delete mode 100644 automanual/old_delete/6-31.md delete mode 100644 automanual/old_delete/6-32-1.md delete mode 100644 automanual/old_delete/6-32-2.md delete mode 100644 automanual/old_delete/6-33-1.md delete mode 100644 automanual/old_delete/6-33-2.md delete mode 100644 automanual/old_delete/6-34.md delete mode 100644 automanual/old_delete/6-35.md delete mode 100644 automanual/old_delete/6-36.md delete mode 100644 automanual/old_delete/6-37.md delete mode 100644 automanual/old_delete/6-38-1.md delete mode 100644 automanual/old_delete/6-38-2.md delete mode 100644 automanual/old_delete/6-39-1.md delete mode 100644 automanual/old_delete/6-39-2.md delete mode 100644 automanual/old_delete/6-39-3.md delete mode 100644 automanual/old_delete/6-39-4.md delete mode 100644 automanual/old_delete/6-39-5.md delete mode 100644 automanual/old_delete/6-39-6.md delete mode 100644 automanual/old_delete/6-39-7.md delete mode 100644 automanual/old_delete/6-4-1.md delete mode 100644 automanual/old_delete/6-4-2.md delete mode 100644 automanual/old_delete/6-4-3.md delete mode 100644 automanual/old_delete/6-4-4.md delete mode 100644 automanual/old_delete/6-4-5.md delete mode 100644 automanual/old_delete/6-4-6.md delete mode 100644 automanual/old_delete/6-4-7.md delete mode 100644 automanual/old_delete/6-40-1.md delete mode 100644 automanual/old_delete/6-40-2.md delete mode 100644 automanual/old_delete/6-41.md delete mode 100644 automanual/old_delete/6-42.md delete mode 100644 automanual/old_delete/6-43.md delete mode 100644 automanual/old_delete/6-44-1.md delete mode 100644 automanual/old_delete/6-44-2.md delete mode 100644 automanual/old_delete/6-44-3.md delete mode 100644 automanual/old_delete/6-45.md delete mode 100644 automanual/old_delete/6-46.md delete mode 100644 automanual/old_delete/6-47.md delete mode 100644 automanual/old_delete/6-48.md delete mode 100644 automanual/old_delete/6-49.md delete mode 100644 automanual/old_delete/6-5-1.md delete mode 100644 automanual/old_delete/6-5-2.md delete mode 100644 automanual/old_delete/6-5-3.md delete mode 100644 automanual/old_delete/6-50.md delete mode 100644 automanual/old_delete/6-6.md delete mode 100644 automanual/old_delete/6-7.md delete mode 100644 automanual/old_delete/6-8-1.md delete mode 100644 automanual/old_delete/6-8-2.md delete mode 100644 automanual/old_delete/6-9.md delete mode 100644 automanual/old_delete/7-1.md delete mode 100644 automanual/old_delete/7-2.md delete mode 100644 automanual/old_delete/7-3-1.md delete mode 100644 automanual/old_delete/7-3-2.md delete mode 100644 automanual/old_delete/7-4.md delete mode 100644 automanual/old_delete/8-1-1.md delete mode 100644 automanual/old_delete/8-1-2.md delete mode 100644 automanual/old_delete/8-1-3.md delete mode 100644 automanual/old_delete/8-1-4.md delete mode 100644 automanual/old_delete/8-1-5.md delete mode 100644 automanual/old_delete/8-1-6.md delete mode 100644 automanual/old_delete/8-1-7.md delete mode 100644 automanual/old_delete/8-1-8.md delete mode 100644 automanual/old_delete/8-1-9.md delete mode 100644 automanual/old_delete/8-2-1.md delete mode 100644 automanual/old_delete/8-2-2.md delete mode 100644 automanual/old_delete/8-2-3.md delete mode 100644 automanual/old_delete/8-2-4.md delete mode 100644 automanual/old_delete/8-3-1.md delete mode 100644 automanual/old_delete/9-1.md delete mode 100644 automanual/old_delete/9-2.md delete mode 100644 automanual/old_delete/TOC.md delete mode 100644 automanual/old_delete/credit.md delete mode 100644 automanual/opensourcecobol.github.io.code-workspace diff --git a/automanual/AUTODELETE$1.class b/automanual/AUTODELETE$1.class deleted file mode 100644 index e544d5938524a8f3b6c6f190c97052a1887f0bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1212 zcmb_b!EVz)5Ph43I0-HZ0Sbiz1yXQQS_20VN>!DHv{W(;Y62Hdw!5SooZZOYAov(0 zJ^`d65C=Yhk3x)HDTzc6$ik96vrqG8o_A(`{r>S2z$4fOt`?EUwGs?mFM?sIgd4bN z;Ff_JLtY<>sCJLRbe_EIb)L4JcCXzed|gPPHw-K@6dl*&LGQzeQ`oMQJZuGS6!C~* z-sDj$0K(qdeA=gp| zRI2O<$@j)XkB2?i3kb=EW63aY)t!O+&b7x{1a@bng_3SSnoI5XK2MI3f!hY|7_dlv zSM;T;#~~$naUyj+rR?TLT(q0~D_i)0oJ5Ws9glqA z%D&z42He-p6Sn|MwCo10KC4vXks>ccZwY5;^~>bdkVTHH*;x6COk;8N8?s;M%uu0k zo-FW@zGqRT$e6KA8DeyWq4#Jh|u ZWOGTP#ROrPBU`1Y(MOdl=cnI6TwIcGkUV?!eMKCOva1*x- z+%`~S$m^p()$TKx&f}N8&Xcy&?zNkQZw4aJTLxAbijM2?u=ioaDQr&&9<@SODXtg} ztZCYwGZ@)YDPIa@%Mlk!#*xo`>B-Oz1CN}6?aSd%3cHnnEh%&)!`iq&v;K-9*OG@+ zs_X=U@5e)rM?KdI3CTvWU|6u~&cJ==+OZBoyED>(6mCeGOYQeQPmjvL9Rqg_Sfsui z^o6VAh!VUwmAW~j?B-Tdw446pZjcBpPwsF%kw{2e_@PvR=s)NBNFFj2_PNr}q|(Hl zgqtX!XrhF=i3U~;+%vI;b-M6LOl^bV!E86ouss`b(i(==KcwK}7MyhWAQn0p@^NPv zc4o-(RPMO`+o>e8Na<=hA~{o8cCG(3u?3oV?F30rAHAM+ni#5ok2OO^zG1MelaUWy z(YHI^fcv_6>K0&`mffJ$XO&7aQsiamE#WM!ewn-)vdED&8>?TDX)LXML-q@u87lP6 zlLbD~_Z+GenJ`u;LxRpXj*&S=Zf@f{<~|cJP5FfLgcOK!0T;1=OLWTMGL>3Py(_p% ZHkT$^N)d*6vQ>&YLxRoiMJk>?e*ko0St0-c diff --git a/automanual/AUTODELETE$3.class b/automanual/AUTODELETE$3.class deleted file mode 100644 index ff9cc21fbf309c4d48debfde1fff0c8764a2211b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1212 zcmb_bQESss6#i~oo3>`QR-I0#PVF@9+#(8!bd0&$%|Tpct-kn_WY;b=y|?7vivA`+ z6efxf{s4cJc#=U|a1Rm;Bzy$>T!VY@=`s1>?OamBE2 z&C+(A!N`_M`BErbj<`^A9QoXro(%0U@W>h1z8nsvuv;#rDcEqOqt z%1$8o-gxNosONeiA=zjw80M|IGjQLz_E-m@-5KdX3O6LprS^NDCr4%Awt+haEK=VM z`oh)Yh!VUwk-DBzc5@>x+D-m(JBS6Ar+2s(OC+Q%{7|Yu^q+HmC=VD4dtB*fQfcB& z!%Y-WG*Lp`L<1`Z?wVM|8eRA_ruKm0VY(Y;*i1*9wuYhg4=MPh1;-uU9}67}`J^)p zTPd>a$Sv1@JCh`hl&+Q|k~5QK+xkxvTcC;8P7wF>@$0nH#8CZvtQj)$4TEJJk9_Eg zzTNQ#+}F($w*X7D>;|nqt5o8VA}>R431?{a%jDINMUJf5Sow-fV{!ExvR~-TP@!+0 zEbx)OXHlidn6XS5Vsx%?gv=3g`TO5->N5eelutNENP#HlaRKwVNT&=gQK^N*yNoMj Yb4jAb1YwvXTcxPeB-q?spyJ8%2Yn`4G5`Po diff --git a/automanual/AUTODELETE$4.class b/automanual/AUTODELETE$4.class deleted file mode 100644 index 2b8f97c0fea55b32b1a95726da4d0c145a414744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3085 zcmb_eS#KLv6#gc5GO@XBmO>zEbqB(l({kiS5?lB&Bv+pnw^VuboN9GiK(x z3tQRB4nl$#ccuB?f5LRO-jBBwY1O+?8*o9#U?GEE+?2*tdVeCarE+cX~Dxr7?2_z-7 zPcHlAK}s&S%H_5&(ioG_co-8n5W)uBF1H8ek_jV=L-NYQaycS#cgW>V6?dsPs-R6w z8gAbv1uPvql%0qt(ur(hnDDy|%Mg21+^ry#*7DrUo~m#nOIa3oMorCixl6Z1=Ch^J zQxfiK;^a5B#gB-Az7Ycn>KN&UkN58dBkox=lAql?juubklYX zt2D;Nq+L+ZKF(dS-*yG@*2x*x;5vr2xQ{_YUWLw30B0zoq+*i6z!bwVd15k@VKLaK zFx-zkg9EO@We{>>ORg%8Gn_z);iSZ!l6(&^Jcx%F9>yaoPBT1;#~2>R6AVw{48v2B z=4pm!@GQe~c%Gpj0}L<7vlo%4P^fF$w^hOR=6tVUZ*z?GprJ%*Km?x)20!)=RxM$a z`CN=B7->SvK6`{>Zk~{4RLKatLh8(ul8pRMxfCkq#^Sm0*jR$hYZkv-Iac?5ULhV2_TD`Cn^1znmh6LFL>U$Y7_t*O*SE=3zzCOY!DiF7=d zOr;aK1F`IW1-lv+={+n?PbJekT8Y#1b~Nxj&p3;DsiYJQ(;PV^WJPR^q*9)C#l_lf zYv6+U#W5osDic%{$QJ~ps2)?YT$0&*&3t)rZW?7na4JE;hDx_9uQU;*R4h35pQHz3@`1-pjNn3w4Jg75oy}SDKc79^NF;@qzp;lnq(Ilo@5tl z(yM8%0+h~9*{}&}q5oRkNHf+=1oa_+Abr`ux_8hruxi731m2=OIhEEn`U2CmQfnnj z;!s{DdcrE|z&W&>L$HQcA8PAd)1_brvj^>g8bb6B`=^)Hz^1XRhUIg7tcDJM)47nf zYawg*f3dcc&>5^a6MFS^bo$aRZy&7TiZ=sqqsK>F84UQqRWsR5} zTz#ZYys9FfCn+dPbd8|d3jYF|&W(YLpk IV#NFX4KyZ^WdHyG diff --git a/automanual/AUTODELETE$5.class b/automanual/AUTODELETE$5.class deleted file mode 100644 index 60d31aac8efcbe0e45fed6f8044028ce68c370bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3257 zcmb_e+jA3T6#t#1?KWX)LqsZfkcw$*3FQtgy(CQ`8j?Z+<)&eiZrUyBZrt5)6BRFb zzakI9la3GgrgEu_5573#gMWp8fHOY&fE3TS8=5k-Gnry$a=!DOJ@@aN^L>9z|MDw< zowzDtj}OnH+m8+C@qw_{k6!fo(T@Qix)2exr~re0#4sej?i1VnLLx4}i(>nd00}Sf z+pu6cAht;XQhp5Mpui3ZkQN{#z+nN72rweRQ7_hm1a?dqIxfHoKThIh39m@V5*qAr z&1&6DkP`!kGpWH?B9@7DGrdRCHM>{BDS|Jdaw5V8?YO(pyY_WJ^ zq7*hPD{tsl*eI#GWt7dlnm2MrFY~Od zn`%yIx|%Fc=2SDI97H7pH9{fBJw@s<8WG z=klua*^;10$Vtd^G-+*2SM0LM3Ww)Z)w94bx_j9Pf7*$8ND~e>S97{axXhH8o-Z1f zrjH#^?Qvt2(3n&$d%t1XEL&xl(Te9}Y{aMx6$J@nGRC1vn2>QAMH!ROWf&;Qcon7u zONNcIj59bZ;~dV*xPaGWbYhc?izvu=U4S?6ri@E4WxOSX-j?wW-j#7#P~H;^?+fe$ z0X`JlkA(h@#r6{cKE-D;KF1dlzLaqVUvW89J#O7j*s-wlC-g5&uv$3WPc^7eX9~it zze8o+)+W`NIw3?Bpk<#C;kuipWFfAkZKK5Q%+fLx`k(qKkjsvwv$5o0HZ_zTiYH=( zJ++khsA4N_o(36X2Tf&6s(YVe%Q5TA|#d*m)Gl3ZOjb~GdK{t-AwZu{2UUcISUC9CX3PM9Rokrx$b|h$G55M|3C_C2;*#4m@k}Wnzk^VzN39W}T;&#|!QoY9hEsu_dOSG#X>RF|lGc4!-6snfynWHvc) zB%V#jqM3Lq>3rm&%Pc#bge7AmStkna5XRjO;pnP#7kBEu{;a8qKD_uuF4i=m=1G-v z*Vl{NklpBivStvy5PbYmK=2p^LWpA&4+dw$(I0^*B18h*Ij*eQ}Ew}bPbyrE~%$)5Uj`tj!j|FjR&{g ztsH2$i^WrD8oBY{TbI=AE`i{ZsfR*Oxum62c$$q~!wPp_Aun^u*B^4XR7@OvgzK5P zg_l1joOJwK>I%0!3^(b7JAJrle9`;RrV_HOor#>t(a=uau@4=M|%Nl82=Y7xQ`Wlo@>a1E~>*$YCu0N zLW+XOQ47kn65r8U{6HIUliKhnb>c7T!r#Q4w1@oEL#t^o@A?=xF8aLUQJ12ARJ#*)t`SbVJZvcyUmB9d}b!2cigDKq8aUWS7H}D|F z9_n}mQ$tQeo}phIdSP~+!Kl36t!;0VDy3SfK=_I$JhiG}h9Oh29q!k@v^Z@m3&De; zZ-*fd8LDQtTe;F`SuzY=DMCxOxCmtwxZIVF^ex|W$Y@xuY&NB^iZNJ}LIu*#wi6U` zdkpEKJfKv=6;JT3sOj*aW;;G1eL*A`#?4%%VSlu(NO``s-BO+uwojb((r1?^%TU8( z4YL~Ni2aUN7q*H53h@41*OeY=7gpn>JINV0y_n!|r-pMeMM6r#^=0UZ`a7-;<$(r^ zVPK1g>a7fw0UehO7??Nk1Wz?QGw>WQ3@l*Lz!F|+ST<0=3KhN+I=jHI&|9S$)_Qa7 zToFU@0wH+&Do$^@8VTh!dHaSK)_aKZMy}iLQCE;&sO%`&B061B^iFLVHqHOk#)Hm& zwN%@!ZtWLIR}9M+X|n@c*{2oTAd9F5cAZn3EnT2m=lW8&c|z^keiRGH%#|62)L|e$ zb)7$LmJ{8z5|J#&BI!xT#B=nlG8t0x1A}Rvs@Atf-P(2<+*O5hg^X!>zB2TZv5}Ej zA7rKIH!uQ*D`aKShjfhOXTF2wCue^m^^Mk)oyLBe!Rj<##Tf03J?3deD8}-~V8`hD zf%FM3ouK~&+Sj(H9_L|47-SOH2pu5raa^Z|bAnbW+@!3x5^EB-X-?DQ3fxJMDGbv* PO1lP$`_S41c_-gLQ&*VM diff --git a/automanual/AUTODELETE$7.class b/automanual/AUTODELETE$7.class deleted file mode 100644 index 2dd0f7c64b93ce842607e615afe85e6ad869d2ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1498 zcmb_c>rN9v6#k~IEL|3gRZ$c#Xw?OT1yN9n3e+Mb1q`kJCEM+^Y~9W@djX7z58_j( z(b)LI2k@bcXSar8X)DW$u>DvO}7<8wiFGeWFk|4@@KQZO7PY`nD9NLop8) zebaigWj6m@SMx^}kB&VBvkK-E+^1}cc1@Um;1b}=Q=yi7Oe6c0f>4W5&g*s<& znJ{G1Po+C<&|^11?;aZ-4p~D|jQ&GNgW()W8N`vG zU7MWx3N|@5{SC2C^i2h!wU2f%kJbwqp_`$_Iw6o2qn{D~f<)r|2dFLdC0bBg=x-tU zkq%>#c{+q<2N+<77-C0Avv;^ir*W_}E|Jhr;wUcDqdOKET_uBSk#wCR2YrpxdNb0D T<1FoIf=*FJ!z-hdS@io2!Of^_ diff --git a/automanual/AUTODELETE.cbl b/automanual/AUTODELETE.cbl deleted file mode 100644 index 9fe88c5..0000000 --- a/automanual/AUTODELETE.cbl +++ /dev/null @@ -1,94 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. AUTODELETE. - AUTHOR. M SHIMADA. - DATE-WRITTEN. 2024-09-04. - ****************************************************************** - ENVIRONMENT DIVISION. - ****************************************************************** - *-------------------------------------* - INPUT-OUTPUT SECTION. - *-------------------------------------* - FILE-CONTROL. - SELECT OLDFILE ASSIGN TO DYNAMIC - OLD-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS OLD-STS. - SELECT NEWFILE ASSIGN TO DYNAMIC - NEW-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS NEW-STS. - ****************************************************************** - DATA DIVISION. - ****************************************************************** - *-------------------------------------* - FILE SECTION. - *-------------------------------------* - FD OLDFILE. - 01 OLD-REC PIC X(50000). - FD NEWFILE. - 01 NEW-REC PIC X(50000). - *-------------------------------------* - WORKING-STORAGE SECTION. - *-------------------------------------* - 77 OLD-STS PIC X(02). - 77 NEW-STS PIC X(02). - 77 OLD-FILE-PATH PIC X(256). - 77 NEW-FILE-PATH PIC X(256). - 77 MD-NAME PIC X(250). - *ファイルの終端を示すフラグ - 77 WS-END-OF-FILE PIC X VALUE 'N'. - 77 WS-IN-NAVI-SECTION PIC X VALUE 'N'. - ****************************************************************** - PROCEDURE DIVISION. - ****************************************************************** - *-------------------------------------* - MAIN-CONTROL SECTION. - *-------------------------------------* - MAIN-000. - *実行コマンドの引数からファイル名を取得する - ACCEPT MD-NAME FROM COMMAND-LINE. - *変換前後のファイルをフォルダ分けするためディレクトリを追加する - MOVE SPACE TO OLD-FILE-PATH. - STRING "old_delete/" DELIMITED BY SIZE - MD-NAME DELIMITED BY SPACE - INTO OLD-FILE-PATH. - MOVE SPACE TO NEW-FILE-PATH. - STRING "new_delete/" DELIMITED BY SIZE - MD-NAME DELIMITED BY SPACE - INTO NEW-FILE-PATH. - - IF OLD-FILE-PATH = SPACE GO TO MAIN-900. - - OPEN INPUT OLDFILE - OUTPUT NEWFILE. - MAIN-100. - PERFORM UNTIL WS-END-OF-FILE = 'Y' - *1行ずつ読み込む - READ OLDFILE INTO OLD-REC - *終わったら、ファイルの終端を示すフラグを'Y'にする - AT END - MOVE 'Y' TO WS-END-OF-FILE - NOT AT END - *からの記述を削除する - IF OLD-REC = "" - OR "" - MOVE 'Y' TO WS-IN-NAVI-SECTION - EXIT PERFORM CYCLE - END-IF - IF OLD-REC = "" - OR "" - MOVE 'N' TO WS-IN-NAVI-SECTION - EXIT PERFORM CYCLE - END-IF - *書き込み - IF WS-IN-NAVI-SECTION = 'N' - WRITE NEW-REC FROM OLD-REC - END-IF - END-READ - END-PERFORM. - - CLOSE NEWFILE. - CLOSE OLDFILE. - - MAIN-900. - STOP RUN. diff --git a/automanual/AUTODELETE.class b/automanual/AUTODELETE.class deleted file mode 100644 index edf9154c916173333b31a4cb37de3550a918faab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8503 zcmc&(33yZ2l|DzZ{p9CoEJOesC&UmE!~qP2bI(2J`n6xY@I@k8$9L;w(w}Pdy5K+4=+8C!3!SRyFKfa7l}3N9lZXCB zn7oan zZDC9g%*gd5vN@&=``)T$0rbtJZ46UC932b}?HcTh2Ku{$OdBg1Y9yA6IRE0IV2}Uzmmkd@AqQ2msX`))C6%7xCnLwl2p&J~z(jDj=x{3)BX)TjL zzqdQu*VzkGG4!5rG}zZ2?cb(!m@ZJFP#-jQhoa$NU?|kzSNzIgFraAIh)D}QD)u^b zN5vEG9M0x4v3O4H@wS9zkI2;3P}Ao*s;pOELi0Jx;C$R!21ixV4UW8Q(vY0J45OuG z@Qg-Nv0UN^Jk%YJUZLRS3a(Xf4b!Z6bagakT^k*-Y%2#v2->4*d!#6E$D-{_n=4*} z(%d_9xlCd>pOgKs#==DLZP&i80s|A25Jo7x8Y?AA?bFOrqE*ujsy%qdm6+C4V%BKF zwj7__21<6MI6^d=i{}cn%AsmCA;1K+)9;XCNsod_EowpFQ ziLr8aw6_xu7U=IA8tm^8sf(#`x-{zOtXj27+TCx~-tM$ly;=JPr@fkKz8&qhMq_z9 z7Y$}I=}h#hSZc(!GBSJ(b~%$zF>Ucz6bEKLyvq=pssiZ|I7dTIB4zdElfzbKNP-PQ zU_6$JTQ)xAU$z^eCz0)p7d+0t3?Wjpj#_cJ0MmN^vPw29pD4sLD~maWtsM5NuC(@1 zrYrrSw>cXfixNE(yQ};mnPGi67mFY6jg1v1Rx5@Fo!~4gyER5o(t}6i)>tlq?bmn+ z>ynHmu)gzTePc&rZFVempe+oyPaW7K>rvAom&O(-3YPT&l5+vFBW@QO^{~1w#5=LZ zrOB?8F){rzr-j8i6 zt)ap1;;2El)B6p+hQ4LcokGQU*r2;W(cJ>>5pb`74+3zUM+~};-VgUJTv`VG4jnh> zF?z_L579#!TLzEv0VotAg+b4X!f%PfBLI9*%={hK4$QH_YA68Yov?WAKf9{d5^_j&c>; zD&;J$xpH=$!SChw8T1FTA2-u2Vh+6E1G3q72)JLs0|Nd~R6a%@*Z3xbZ)T`IDBJn4 zfDa3JRKVi`PGGa4a;rhl2>WT-`=^Ealu%Cz_1i){Dby#0dP1mA2=!5Vh-qOdT=eB_ zdmx=i<*ZEEF5SkrGhL`cdP{4I=!~7EqcL3d1B{4xNolZ9YQ#F)pU?G=cBS*Fk!*29 zrbTB4`xQEyD%kK+Tu~WL@s^j(yaTsq$D-EORP0Ei#Y&B=Zf)IS@SS|uS@L$snS4c6 zT&9_vD4!#AH0w$!N*e-VDL(<{EzQ1v_>dKc-&PW*;^(B!__i7Ay zsl$oOC6ZRz>UUIlYn_R@rSK^i3D@{5xjf6yVxh#Sq+4l6yUUXHihItG^}e0Hp+F!I z!q3b%Y9%*U*?g>cA}O0V3$;}UcQ29`E0aKZ)n0+8Pfr|?r^fAc7FYCEKaBhT3qEDW z42vU)LDg73dk{6%`EIL>VPvh`Kqh@46HA6rPtC;=n7%68Q0}Cqf}NX;9kvR|ziow7ejK-$x6feKzOJ{ke!r={@X3l2 z&*=-a!#cJJ9v#?=|9kfW0aTO;Paj5VsF8d!iIuKDVC4p_Tt1U>vT~%}NMNx*tz=q(xXn~bogf`d~Y#&#hX!(<%asFOm^pDEYgE6%(1Ee>7CR+jX{hAn&O z*ci@1Z5dr{iyZk|CH_`!@;T#T;RgLZr37eG=i(kMU>PBJimV`Vkg493F5 z4HYb3DYB}&zj*j(l^uS(dN57Ag%GKN#(CX5g>Zu}7PAoX-1863OgG}5u4u>4T8dwr z0q%4j$7-%~s1oV60Th!tl$2I1iA|cL&f0V_&iHp=|C?W(^>|)EVLFs9Tm$pU z&;6OAbzc`P!b|iqV!Do2Mn(mmn)3aTw&zm3Zwi|7-_k}sJ0YFhORJ@bcIo?DU6a# zVdU+=I(?+TBMnz_B<2buRaY3vyTVB46-I)uFbV_UCduIyMpmyd@_dDn`74ZCKw*>! zz%D6K6-EK6Fsf9AQ7-~7pp#fnrstIGdGO<9`~>(@W&9-g&zJEpfS)SkzX1NlGX9HX zfcp}C8DDq_U$~guu!u-A-ODG4Pk?0l3SbSe7{l~3oh~RZg|bNNOqcsbazTI3v&9bb zM+_NHrxqx^La!D&$q>@XN*eLkCcz7_wl3v3wE_ldZkyR z6+w+w>ezX_z`)X%(7GSE3V1Q*w6=NmBwa2OzT#1u1GMhTw7#!(f;RLX|K$(G%bnRR zfa?+8L^|J0v-uWk;#+AU--cbdU45~ZTt6dSqi@fn-$y489PB%^0*g~i-=*&rytTV< zjxIE@O&j4?Q)EU?(I)qqQ-u{T9jtk9T;e;an(xBj@b0EYzK5FmUW|ojl){LwV|+Pe zPnoBv!xWD+y`C3oeZ)OQnak{kfHl=bX^hc6b+0ca0u;NteBnU%%EZrNuV{ijGnJ(96;65IE`y^IC?|1 zEl^yQqMOU;i%j^=;5dZ^?;NKg%yF0L6OS6g@9s(3GfwYt1Urj@MUEg`6hs`sU{SEt ztOh-|$nRDB{35^4gw^00i;|Xtq^T&m%tQzQx1cC_r|GRbN&6lCUE>s0{53^BW_o=m zX}HM86+cqsEz|2gNux#nfZ`7p`NVN*>^Vt?ef9(;kCUP3H0Wn>dWaw7hv|^QPgAOJ zo*tkjkUR$G{s_*~M{$;(pym7|{v`ht1^8*&$?r2oc+(x zqkNJ+#m~_cKaUseae5tb`A3M`Kj%qq;Lr0Seu3BUOB~>@;HCa$JmQ|lBjzi73%?3m zzQGUkSNReC8b1O0X?~5L;ji{Ryy_G{n;o;%g8QcPk?A kdm!zCK|6ruC*&Y#I6uJx?keD|1-#k8h_&nax~)zB2iR5-SpWb4 diff --git a/automanual/AUTODELETE.java b/automanual/AUTODELETE.java deleted file mode 100644 index 632af1d..0000000 --- a/automanual/AUTODELETE.java +++ /dev/null @@ -1,544 +0,0 @@ -/* Generated by opensource COBOL 4J 1.1.2 */ -import java.io.UnsupportedEncodingException; -import jp.osscons.opensourcecobol.libcobj.*; -import jp.osscons.opensourcecobol.libcobj.common.*; -import jp.osscons.opensourcecobol.libcobj.data.*; -import jp.osscons.opensourcecobol.libcobj.exceptions.*; -import jp.osscons.opensourcecobol.libcobj.termio.*; -import jp.osscons.opensourcecobol.libcobj.call.*; -import jp.osscons.opensourcecobol.libcobj.file.*; -import jp.osscons.opensourcecobol.libcobj.ui.*; -import java.util.Optional; -import java.lang.NullPointerException; -import java.lang.IndexOutOfBoundsException; - -public class AUTODELETE implements CobolRunnable { - - private boolean initialized = false; - private CobolModule module; - private int entry; - - private CobolRunnable cob_unifunc; - - - @Override - public int run(CobolDataStorage... argStorages) { - return AUTODELETE_(0, argStorages); - } - - @Override - public void cancel() { - AUTODELETE_(-1); - } - - @Override - public boolean isActive() { - return false; - } - - public CobolResultSet execute () { - int returnCode = run_module(0); - return new CobolResultSet(returnCode); - } - - public int AUTODELETE_ (int entry, CobolDataStorage ...argStorages) { - this.entry = entry; - return this.run_module(entry); - } - - int run_module (int entry) { - this.module = new CobolModule(null, null, null, null, 0, '.', '$', ',', 1, 1, 1, 0, null ); - - /* Start of function code */ - - /* CANCEL callback handling */ - if (entry < 0) { - if (!this.initialized) { - CobolDecimal.cobInitNumeric(); - return 0; - } - h_OLDFILE.close (0, null); - h_NEWFILE.close (0, null); - this.initialized = false; - return 0; - } - - /* Push module stack */ - CobolModule.push (module); - - /* Initialize program */ - if (!this.initialized) { - module.setProgramId("AUTODELETE"); - - b_RETURN_CODE.set((int)0); - b_OLD_STS.fillBytes(' ', 2); - b_NEW_STS.fillBytes(' ', 2); - b_OLD_FILE_PATH.fillBytes(' ', 256); - b_NEW_FILE_PATH.fillBytes(' ', 256); - b_MD_NAME.fillBytes(' ', 250); - b_WS_END_OF_FILE.setByte(0, 'N'); b_WS_IN_NAVI_SECTION.setByte(0, 'N'); - h_OLDFILE = CobolFileFactory.makeCobolFileInstance( - /* select_name = */ "OLDFILE", - /* file_status = */ h_OLDFILE_status, - /* assign = */ f_OLD_FILE_PATH, - /* record = */ f_OLDFILE_record, - /* record_size = */ null, - /* record_min = */ 0, - /* record_max = */ 50000, - /* nkeys = */ 0, - /* keys = */ null, - /* organization = */ (char)1, - /* access_mode = */ (char)1, - /* lock_mode = */ (char)0, - /* open_mode = */ (char)0, - /* flag_optional = */ false, - /* last_open_mode = */ (char)0, - /* special = */ (char)0, - /* flag_nonexistent = */ false, - /* flag_end_of_file = */ false, - /* flag_begin_of_file = */ false, - /* flag_first_read = */ (char)0, - /* flag_read_done = */ false, - /* flag_select_features = */ (char)1, - /* flag_needs_nl = */ false, - /* flag_needs_top = */ false, - /* file_version = */ (char)0 - ); - h_NEWFILE = CobolFileFactory.makeCobolFileInstance( - /* select_name = */ "NEWFILE", - /* file_status = */ h_NEWFILE_status, - /* assign = */ f_NEW_FILE_PATH, - /* record = */ f_NEWFILE_record, - /* record_size = */ null, - /* record_min = */ 0, - /* record_max = */ 50000, - /* nkeys = */ 0, - /* keys = */ null, - /* organization = */ (char)1, - /* access_mode = */ (char)1, - /* lock_mode = */ (char)0, - /* open_mode = */ (char)0, - /* flag_optional = */ false, - /* last_open_mode = */ (char)0, - /* special = */ (char)0, - /* flag_nonexistent = */ false, - /* flag_end_of_file = */ false, - /* flag_begin_of_file = */ false, - /* flag_first_read = */ (char)0, - /* flag_read_done = */ false, - /* flag_select_features = */ (char)1, - /* flag_needs_nl = */ false, - /* flag_needs_top = */ false, - /* file_version = */ (char)0 - ); - - this.initialized = true; - } - /* PROCEDURE DIVISION */ - try{ - CobolStopRunException.dummy(); - CobolGoBackException.dummy(); - /* Entry dispatch */ - execEntry(l_AUTODELETE); - - } catch(CobolGoBackException e) { - return e.getReturnCode(); - } catch(CobolStopRunException e) { - CobolStopRunException.stopRun(); - System.exit(e.getReturnCode()); - } - /* Pop module stack */ - CobolModule.pop(); - - /* Program return */ - return b_RETURN_CODE.intValue(); - } - public CobolControl[] contList = { - new CobolControl(0, CobolControl.LabelType.label) { - public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - - return Optional.of(contList[l_AUTODELETE]); - } - }, - /* Entry AUTODELETE */ - new CobolControl(l_AUTODELETE, CobolControl.LabelType.label) { - public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - - return Optional.of(contList[l_MAIN_CONTROL]); - } - }, - /* MAIN-CONTROL SECTION */ - new CobolControl(l_MAIN_CONTROL, CobolControl.LabelType.section) { - public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - - return Optional.of(contList[l_MAIN_CONTROL__MAIN_000]); - } - }, - /* MAIN-000 */ - new CobolControl(l_MAIN_CONTROL__MAIN_000, CobolControl.LabelType.label) { - public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - /* AUTODELETE.cbl:49: ACCEPT */ - { - CobolTerminal.acceptCommandLine (f_MD_NAME); - } - /* AUTODELETE.cbl:51: MOVE */ - { - b_OLD_FILE_PATH.fillBytes (32, 256); - } - /* AUTODELETE.cbl:52: STRING */ - { - CobolString.stringInit (f_OLD_FILE_PATH, 0); - CobolString.stringDelimited (0); - CobolString.stringAppend (c_1_old_delete); - CobolString.stringDelimited (CobolConstant.space); - CobolString.stringAppend (f_MD_NAME); - CobolString.stringFinish (); - } - /* AUTODELETE.cbl:55: MOVE */ - { - b_NEW_FILE_PATH.fillBytes (32, 256); - } - /* AUTODELETE.cbl:56: STRING */ - { - CobolString.stringInit (f_NEW_FILE_PATH, 0); - CobolString.stringDelimited (0); - CobolString.stringAppend (c_2_new_delete); - CobolString.stringDelimited (CobolConstant.space); - CobolString.stringAppend (f_MD_NAME); - CobolString.stringFinish (); - } - /* AUTODELETE.cbl:60: IF */ - { - if (((long)f_OLD_FILE_PATH.compareTo (CobolConstant.space) == 0L)) - { - /* AUTODELETE.cbl:60: GO TO */ - { - if(true) return Optional.of(contList[l_MAIN_CONTROL__MAIN_900 ]); - - } - } - } - /* AUTODELETE.cbl:62: OPEN */ - { - CobolRuntimeException.code = 0; - { - h_OLDFILE.open (1, 0, f_OLD_STS); - } - if (CobolRuntimeException.code != 0) - { - /* PERFORM Default Error Handler */ - CobolControl.perform(contList, l_Default_Error_Handler).run(); - } - CobolRuntimeException.code = 0; - { - h_NEWFILE.open (2, 1, f_NEW_STS); - } - if (CobolRuntimeException.code != 0) - { - /* PERFORM Default Error Handler */ - CobolControl.perform(contList, l_Default_Error_Handler).run(); - } - } - - return Optional.of(contList[l_MAIN_CONTROL__MAIN_100]); - } - }, - /* MAIN-100 */ - new CobolControl(l_MAIN_CONTROL__MAIN_100, CobolControl.LabelType.label) { - public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - /* AUTODELETE.cbl:65: PERFORM */ - for (;;) - { - if (((long)(Byte.toUnsignedInt(b_WS_END_OF_FILE.getByte(0)) - (int)89) == 0L)) - break; - { - /* AUTODELETE.cbl:67: READ */ - CobolRuntimeException.code = 0; - { - h_OLDFILE.read (0, f_OLD_STS, 1); - } - if (CobolRuntimeException.code != 0) - { - if (CobolRuntimeException.code == 0x0501) - { - { - /* AUTODELETE.cbl:70: MOVE */ - { - b_WS_END_OF_FILE.setByte(89); - } - } - } - else - { - /* PERFORM Default Error Handler */ - CobolControl.perform(contList, l_Default_Error_Handler).run(); - } - } - else - { - b_OLD_REC.setBytes (b_OLDFILE_record, 50000); - { - /* AUTODELETE.cbl:73: IF */ - { - if ((((long)f_OLD_REC.compareTo (c_3) == 0L) || ((long)f_OLD_REC.compareTo (c_4) == 0L))) - { - /* AUTODELETE.cbl:75: MOVE */ - { - b_WS_IN_NAVI_SECTION.setByte(89); - } - /* AUTODELETE.cbl:76: EXIT */ - { - if(true) continue; - } - } - } - /* AUTODELETE.cbl:78: IF */ - { - if ((((long)f_OLD_REC.compareTo (c_5) == 0L) || ((long)f_OLD_REC.compareTo (c_6) == 0L))) - { - /* AUTODELETE.cbl:80: MOVE */ - { - b_WS_IN_NAVI_SECTION.setByte(78); - } - /* AUTODELETE.cbl:81: EXIT */ - { - if(true) continue; - } - } - } - /* AUTODELETE.cbl:84: IF */ - { - if (((long)(Byte.toUnsignedInt(b_WS_IN_NAVI_SECTION.getByte(0)) - (int)78) == 0L)) - { - /* AUTODELETE.cbl:85: WRITE */ - CobolRuntimeException.code = 0; - { - b_NEW_REC.setBytes (b_OLD_REC, 50000); - h_NEWFILE.write (f_NEW_REC, 2162689, f_NEW_STS); - } - if (CobolRuntimeException.code != 0) - { - /* PERFORM Default Error Handler */ - CobolControl.perform(contList, l_Default_Error_Handler).run(); - } - } - } - } - } - } - } - /* AUTODELETE.cbl:90: CLOSE */ - { - CobolRuntimeException.code = 0; - { - h_NEWFILE.close (0, f_NEW_STS); - } - if (CobolRuntimeException.code != 0) - { - /* PERFORM Default Error Handler */ - CobolControl.perform(contList, l_Default_Error_Handler).run(); - } - } - /* AUTODELETE.cbl:91: CLOSE */ - { - CobolRuntimeException.code = 0; - { - h_OLDFILE.close (0, f_OLD_STS); - } - if (CobolRuntimeException.code != 0) - { - /* PERFORM Default Error Handler */ - CobolControl.perform(contList, l_Default_Error_Handler).run(); - } - } - - return Optional.of(contList[l_MAIN_CONTROL__MAIN_900]); - } - }, - /* MAIN-900 */ - new CobolControl(l_MAIN_CONTROL__MAIN_900, CobolControl.LabelType.label) { - public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - /* AUTODELETE.cbl:94: STOP */ - { - CobolStopRunException.throwException (b_RETURN_CODE.intValue()); - } - - - return Optional.of(CobolControl.pure()); - } - }, - /* Default Error Handler */ - new CobolControl(l_Default_Error_Handler, CobolControl.LabelType.label) { - public Optional run() throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - - if ((CobolFile.errorFile.flag_select_features & CobolFile.COB_SELECT_FILE_STATUS) == 0) { - CobolFile.defaultErrorHandle (); - CobolStopRunException.stopRunAndThrow (1); - } - - return Optional.of(CobolControl.pure()); - } - }, - CobolControl.pure() - }; - public void execEntry(int start) throws CobolRuntimeException, CobolGoBackException, CobolStopRunException { - Optional nextLabel = Optional.of(contList[start]); - while(nextLabel.isPresent()) { - CobolControl section = nextLabel.get(); - nextLabel = section.run(); - } - } - - public static void main(String[] args) - { - CobolUtil.cob_init(args, false); - CobolDecimal.cobInitNumeric(); - new AUTODELETE().AUTODELETE_(0); - CobolStopRunException.stopRun(); - } - - public AUTODELETE() - { - init(); - } - - public void init() - { - try { - /* Data storage */ - - cob_unifunc = null; - - /* PROGRAM-ID : AUTODELETE */ - b_RETURN_CODE = new CobolDataStorage(4); /* RETURN-CODE */ - b_OLDFILE_record = new CobolDataStorage(50000); /* OLDFILE_record */ - b_NEWFILE_record = new CobolDataStorage(50000); /* NEWFILE_record */ - b_OLD_STS = new CobolDataStorage(2); /* OLD-STS */ - b_NEW_STS = new CobolDataStorage(2); /* NEW-STS */ - b_OLD_FILE_PATH = new CobolDataStorage(256); /* OLD-FILE-PATH */ - b_NEW_FILE_PATH = new CobolDataStorage(256); /* NEW-FILE-PATH */ - b_MD_NAME = new CobolDataStorage(250); /* MD-NAME */ - b_WS_END_OF_FILE = new CobolDataStorage(1); /* WS-END-OF-FILE */ - b_WS_IN_NAVI_SECTION = new CobolDataStorage(1); /* WS-IN-NAVI-SECTION */ - b_NEW_REC = b_NEWFILE_record; - b_OLD_REC = b_OLDFILE_record; - - /* End of data storage */ - - - initAttr(); - - /* Fields */ - - /* PROGRAM-ID : AUTODELETE */ - f_OLD_REC = CobolFieldFactory.makeCobolField(50000, b_OLD_REC, a_1); /* OLD-REC */ - f_OLDFILE_record = CobolFieldFactory.makeCobolField(50000, b_OLDFILE_record, a_1); /* OLDFILE_record */ - f_NEW_REC = CobolFieldFactory.makeCobolField(50000, b_NEW_REC, a_1); /* NEW-REC */ - f_NEWFILE_record = CobolFieldFactory.makeCobolField(50000, b_NEWFILE_record, a_1); /* NEWFILE_record */ - f_OLD_STS = CobolFieldFactory.makeCobolField(2, b_OLD_STS, a_1); /* OLD-STS */ - f_NEW_STS = CobolFieldFactory.makeCobolField(2, b_NEW_STS, a_1); /* NEW-STS */ - f_OLD_FILE_PATH = CobolFieldFactory.makeCobolField(256, b_OLD_FILE_PATH, a_1); /* OLD-FILE-PATH */ - f_NEW_FILE_PATH = CobolFieldFactory.makeCobolField(256, b_NEW_FILE_PATH, a_1); /* NEW-FILE-PATH */ - f_MD_NAME = CobolFieldFactory.makeCobolField(250, b_MD_NAME, a_1); /* MD-NAME */ - - /* End of fields */ - - - /* Constants */ - - c_1_old_delete = CobolFieldFactory.makeCobolField(11, str_0_old_delete, a_1); - c_2_new_delete = CobolFieldFactory.makeCobolField(11, str_1_new_delete, a_1); - c_3 = CobolFieldFactory.makeCobolField(18, str_2, a_1); - c_4 = CobolFieldFactory.makeCobolField(18, str_3, a_1); - c_5 = CobolFieldFactory.makeCobolField(16, str_4, a_1); - c_6 = CobolFieldFactory.makeCobolField(16, str_5, a_1); - - } catch(NullPointerException e) { - System.out.println("Error - NullpointerException"); - } catch(IndexOutOfBoundsException e) { - System.out.println("Error - IndexOutOfBoundsException"); - } - } - - private void initAttr() { - /* Attributes */ - - a_1 = new CobolFieldAttribute (33, 0, 0, 0, null); - - } - - /* Data storage */ - - /* PROGRAM-ID : AUTODELETE */ - private CobolDataStorage b_RETURN_CODE; /* RETURN-CODE */ - private CobolDataStorage b_OLDFILE_record; /* OLDFILE_record */ - private CobolDataStorage b_NEWFILE_record; /* NEWFILE_record */ - private CobolDataStorage b_OLD_STS; /* OLD-STS */ - private CobolDataStorage b_NEW_STS; /* NEW-STS */ - private CobolDataStorage b_OLD_FILE_PATH; /* OLD-FILE-PATH */ - private CobolDataStorage b_NEW_FILE_PATH; /* NEW-FILE-PATH */ - private CobolDataStorage b_MD_NAME; /* MD-NAME */ - private CobolDataStorage b_WS_END_OF_FILE; /* WS-END-OF-FILE */ - private CobolDataStorage b_WS_IN_NAVI_SECTION; /* WS-IN-NAVI-SECTION */ - private CobolDataStorage b_NEW_REC; - private CobolDataStorage b_OLD_REC; - - /* End of data storage */ - - - /* Fields */ - - /* PROGRAM-ID : AUTODELETE */ - private AbstractCobolField f_OLD_REC; /* OLD-REC */ - private AbstractCobolField f_OLDFILE_record; /* OLDFILE_record */ - private AbstractCobolField f_NEW_REC; /* NEW-REC */ - private AbstractCobolField f_NEWFILE_record; /* NEWFILE_record */ - private AbstractCobolField f_OLD_STS; /* OLD-STS */ - private AbstractCobolField f_NEW_STS; /* NEW-STS */ - private AbstractCobolField f_OLD_FILE_PATH; /* OLD-FILE-PATH */ - private AbstractCobolField f_NEW_FILE_PATH; /* NEW-FILE-PATH */ - private AbstractCobolField f_MD_NAME; /* MD-NAME */ - - /* End of fields */ - - - private static AbstractCobolField f_native; - - /* Constants */ - - private AbstractCobolField c_6; - private AbstractCobolField c_5; - private AbstractCobolField c_4; - private AbstractCobolField c_3; - private AbstractCobolField c_2_new_delete; - private AbstractCobolField c_1_old_delete; - - /* Attributes */ - - private CobolFieldAttribute a_1; - - - - /* String literals */ - public static final byte[] str_5 = CobolUtil.stringToBytes(""); - public static final byte[] str_4 = CobolUtil.stringToBytes(""); - public static final byte[] str_3 = CobolUtil.stringToBytes(""); - public static final byte[] str_2 = CobolUtil.stringToBytes(""); - public static final byte[] str_1_new_delete = CobolUtil.stringToBytes("new_delete/"); - public static final byte[] str_0_old_delete = CobolUtil.stringToBytes("old_delete/"); - /* File OLDFILE */ - private CobolFile h_OLDFILE = null; - private byte[] h_OLDFILE_status = new byte[4]; - /* File NEWFILE */ - private CobolFile h_NEWFILE = null; - private byte[] h_NEWFILE_status = new byte[4]; - - /* Sections and Labels */ - private final static int l_AUTODELETE = 1; - private final static int l_MAIN_CONTROL = 2; - private final static int l_MAIN_CONTROL__MAIN_000 = 3; - private final static int l_MAIN_CONTROL__MAIN_100 = 4; - private final static int l_MAIN_CONTROL__MAIN_900 = 5; - private final static int l_Default_Error_Handler = 6; - -} diff --git a/automanual/AUTODELETE_2.cbl b/automanual/AUTODELETE_2.cbl deleted file mode 100644 index 8492150..0000000 --- a/automanual/AUTODELETE_2.cbl +++ /dev/null @@ -1,95 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. AUTODELETE_2. - AUTHOR. M SHIMADA. - DATE-WRITTEN. 2024-09-04. - ****************************************************************** - ENVIRONMENT DIVISION. - ****************************************************************** - *-------------------------------------* - INPUT-OUTPUT SECTION. - *-------------------------------------* - FILE-CONTROL. - SELECT OLDFILE ASSIGN TO DYNAMIC - OLD-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS OLD-STS. - SELECT NEWFILE ASSIGN TO DYNAMIC - NEW-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS NEW-STS. - ****************************************************************** - DATA DIVISION. - ****************************************************************** - *-------------------------------------* - FILE SECTION. - *-------------------------------------* - FD OLDFILE. - 01 OLD-REC PIC X(50000). - FD NEWFILE. - 01 NEW-REC PIC X(50000). - *-------------------------------------* - WORKING-STORAGE SECTION. - *-------------------------------------* - 01 OLD-STS PIC X(02). - 01 NEW-STS PIC X(02). - 01 OLD-FILE-PATH PIC X(256). - 01 NEW-FILE-PATH PIC X(256). - 01 MD-NAME PIC X(250). - 01 WS-END-OF-FILE PIC X VALUE 'N'. - 01 WS-IN-NAVI-SECTION PIC X VALUE 'N'. - 01 F-SKIP PIC 9(03). - 01 END-FLG PIC 9(01). - ****************************************************************** - PROCEDURE DIVISION. - ****************************************************************** - *-------------------------------------* - MAIN-CONTROL SECTION. - *-------------------------------------* - MAIN-000. - *実行コマンドの引数からファイル名を取得する - ACCEPT MD-NAME FROM COMMAND-LINE. - *変換前後のファイルをフォルダ分けするためディレクトリを追加する - MOVE SPACE TO OLD-FILE-PATH. - STRING "old_delete/" DELIMITED BY SIZE - MD-NAME DELIMITED BY SPACE - INTO OLD-FILE-PATH. - MOVE SPACE TO NEW-FILE-PATH. - STRING "new_delete/" DELIMITED BY SIZE - MD-NAME DELIMITED BY SPACE - INTO NEW-FILE-PATH. - - IF OLD-FILE-PATH = SPACE GO TO MAIN-900. - - OPEN INPUT OLDFILE - OUTPUT NEWFILE. - MAIN-100. - *からの記述を削除する - PERFORM UNTIL WS-END-OF-FILE = 'Y' - READ OLDFILE INTO OLD-REC - AT END - MOVE 'Y' TO WS-END-OF-FILE - NOT AT END - IF OLD-REC = "" - MOVE 'Y' TO WS-IN-NAVI-SECTION - ELSE IF OLD-REC = "" - MOVE 'N' TO WS-IN-NAVI-SECTION - ELSE IF WS-IN-NAVI-SECTION = 'N' - *「ページトップへ」を削除 - IF F-SKIP = 0 - INSPECT OLD-REC TALLYING F-SKIP FOR - ALL X"E3839AE383BCE382B8E38388E38383E38397E381B8" - IF F-SKIP > 0 - MOVE 'Y' TO WS-IN-NAVI-SECTION - ELSE - WRITE NEW-REC FROM OLD-REC - END-IF - END-IF - END-IF - END-READ - END-PERFORM. - - CLOSE NEWFILE. - CLOSE OLDFILE. - - MAIN-900. - STOP RUN. diff --git a/automanual/AUTOMANUAL.cbl b/automanual/AUTOMANUAL.cbl deleted file mode 100644 index 555cae4..0000000 --- a/automanual/AUTOMANUAL.cbl +++ /dev/null @@ -1,177 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. AUTOMANUAL. - AUTHOR. M YOKOGAWA. - DATE-WRITTEN. 2024-09-04. - ****************************************************************** - ENVIRONMENT DIVISION. - ****************************************************************** - *-------------------------------------* - INPUT-OUTPUT SECTION. - *-------------------------------------* - FILE-CONTROL. - SELECT OLDFILE ASSIGN TO DYNAMIC - OLD-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS OLD-STS. - SELECT NEWFILE ASSIGN TO DYNAMIC - NEW-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS NEW-STS. - ****************************************************************** - DATA DIVISION. - ****************************************************************** - *-------------------------------------* - FILE SECTION. - *-------------------------------------* - FD OLDFILE. - 01 OLD-REC PIC X(50000). - FD NEWFILE. - 01 NEW-REC PIC X(50000). - *-------------------------------------* - WORKING-STORAGE SECTION. - *-------------------------------------* - 01 OLD-STS PIC X(02). - 01 NEW-STS PIC X(02). - 01 OLD-FILE-PATH PIC X(256). - 01 NEW-FILE-PATH PIC X(256). - 01 WRK-STRING PIC X(250). - 01 MD-CURRENT PIC X(250). - 01 MD-PREVIOUS PIC X(250). - 01 MD-NEXT PIC X(250). - 01 END-FLG PIC 9(01). - ****************************************************************** - PROCEDURE DIVISION. - ****************************************************************** - *-------------------------------------* - MAIN-CONTROL SECTION. - *-------------------------------------* - MAIN-000. - *実行コマンドの引数を受け取る - *3分割してそれぞれのファイル名を取得する - ACCEPT WRK-STRING FROM COMMAND-LINE. - UNSTRING WRK-STRING DELIMITED BY SPACE - INTO MD-CURRENT - MD-PREVIOUS - MD-NEXT. - *前へ/次へに該当するファイルがない場合はスペースを代入する - *リンクは挿入しないで文字だけの表示とする - IF MD-PREVIOUS = "none" - MOVE SPACE TO MD-PREVIOUS. - IF MD-NEXT = "none" - MOVE SPACE TO MD-NEXT. - *変換前後のファイルをフォルダ分けするためディレクトリを追加する - MOVE SPACE TO OLD-FILE-PATH. - STRING "old/" DELIMITED BY SIZE - MD-CURRENT DELIMITED BY SPACE - INTO OLD-FILE-PATH. - MOVE SPACE TO NEW-FILE-PATH. - STRING "new/" DELIMITED BY SIZE - MD-CURRENT DELIMITED BY SPACE - INTO NEW-FILE-PATH. - - IF OLD-FILE-PATH = SPACE GO TO MAIN-900. - - OPEN INPUT OLDFILE - OUTPUT NEWFILE. - IF MD-CURRENT NOT = "TOC.md" - *1行目 - *を挿入する - WRITE NEW-REC FROM "" - *2行目 - *前へ/次へを挿入する※文字化け防止のため16進数で挿入 - *前後ファイルのリンクも挿入する - MOVE SPACE TO NEW-REC - *引数が三つともある場合 - IF MD-PREVIOUS NOT = SPACE AND MD-NEXT NOT = SPACE - STRING "[" DELIMITED BY SIZE - X"E5898DE381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-PREVIOUS DELIMITED BY SPACE - ")/[" DELIMITED BY SIZE - X"E79BAEE6ACA1" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - "https://opensourcecobol." - DELIMITED BY SPACE - "github.io/markdown/TOC.html" - DELIMITED BY SPACE - ")/[" DELIMITED BY SIZE - X"E6ACA1E381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-NEXT DELIMITED BY SPACE - ")" DELIMITED BY SIZE - INTO NEW-REC - WRITE NEW-REC - *「前へ」がnoneの場合 - IF MD-PREVIOUS = SPACE - STRING X"E5898DE381B8" DELIMITED BY SIZE - "/[" DELIMITED BY SIZE - X"E79BAEE6ACA1" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - "https://opensourcecobol." - DELIMITED BY SPACE - "github.io/markdown/TOC.html" - DELIMITED BY SPACE - ")/[" DELIMITED BY SIZE - X"E6ACA1E381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-NEXT DELIMITED BY SPACE - ")" DELIMITED BY SIZE - INTO NEW-REC - WRITE NEW-REC - *「次へ」がnoneの場合 - IF MD-NEXT = SPACE - STRING "[" DELIMITED BY SIZE - X"E5898DE381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-PREVIOUS DELIMITED BY SPACE - ")/[" DELIMITED BY SIZE - X"E79BAEE6ACA1" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - "https://opensourcecobol." - DELIMITED BY SPACE - "github.io/markdown/TOC.html" - DELIMITED BY SPACE - ")/" DELIMITED BY SIZE - X"E6ACA1E381B8" DELIMITED BY SIZE - INTO NEW-REC - WRITE NEW-REC - *3行目 - *を挿入する - WRITE NEW-REC FROM "" - END-IF. - *OLDFILEの内容をNEWFILEに書き込み - PERFORM UNTIL (OLD-STS NOT = ZERO) - MOVE SPACE TO OLD-REC - READ OLDFILE NEXT - AT END - CONTINUE - NOT AT END - MOVE OLD-REC TO NEW-REC - WRITE NEW-REC - END-READ - END-PERFORM. - *最後から3行目 - *を挿入する - WRITE NEW-REC FROM "". - - *最後から2行目「ページトップへ」を挿入する - MOVE SPACE TO NEW-REC - WRITE NEW-REC - MOVE SPACE TO NEW-REC - STRING "[" DELIMITED BY SIZE - X"E3839AE383BCE382B8E38388E38383E38397E381B8" - DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-CURRENT DELIMITED BY SPACE - ")" DELIMITED BY SIZE - INTO NEW-REC - WRITE NEW-REC. - *最終行 - *を挿入する - WRITE NEW-REC FROM "". - - * WRITE NEW-REC. - CLOSE NEWFILE. - CLOSE OLDFILE. - MAIN-900. - STOP RUN. diff --git a/automanual/AUTOMANUAL_original.cbl b/automanual/AUTOMANUAL_original.cbl deleted file mode 100644 index d03553d..0000000 --- a/automanual/AUTOMANUAL_original.cbl +++ /dev/null @@ -1,129 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. AUTOMANUAL_original. - AUTHOR. M SHIMADA. - DATE-WRITTEN. 2024-07-26. - ****************************************************************** - ENVIRONMENT DIVISION. - ****************************************************************** - *-------------------------------------* - INPUT-OUTPUT SECTION. - *-------------------------------------* - FILE-CONTROL. - SELECT OLDFILE ASSIGN TO DYNAMIC - OLD-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS OLD-STS. - SELECT NEWFILE ASSIGN TO DYNAMIC - NEW-FILE-PATH - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS NEW-STS. - ****************************************************************** - DATA DIVISION. - ****************************************************************** - *-------------------------------------* - FILE SECTION. - *-------------------------------------* - FD OLDFILE. - 01 OLD-REC PIC X(50000). - FD NEWFILE. - 01 NEW-REC PIC X(50000). - *-------------------------------------* - WORKING-STORAGE SECTION. - *-------------------------------------* - 01 OLD-STS PIC X(02). - 01 NEW-STS PIC X(02). - 01 OLD-FILE-PATH PIC X(256). - 01 NEW-FILE-PATH PIC X(256). - 01 WRK-STRING PIC X(250). - 01 MD-CURRENT PIC X(250). - 01 MD-PREVIOUS PIC X(250). - 01 MD-NEXT PIC X(250). - 01 END-FLG PIC 9(01). - ****************************************************************** - PROCEDURE DIVISION. - ****************************************************************** - *-------------------------------------* - MAIN-CONTROL SECTION. - *-------------------------------------* - MAIN-000. - *実行コマンドの引数を受け取る - *3分割してそれぞれのファイル名を取得する - ACCEPT WRK-STRING FROM COMMAND-LINE. - UNSTRING WRK-STRING DELIMITED BY SPACE - INTO MD-CURRENT - MD-PREVIOUS - MD-NEXT. - *前へ/次へに該当するファイルがない場合はスペースを代入する - *リンクは挿入しないで文字だけの表示とする - IF MD-PREVIOUS = "none" - MOVE SPACE TO MD-PREVIOUS. - IF MD-NEXT = "none" - MOVE SPACE TO MD-NEXT. - *変換前後のファイルをフォルダ分けするためディレクトリを追加する - MOVE SPACE TO OLD-FILE-PATH. - STRING "old/" DELIMITED BY SIZE - MD-CURRENT DELIMITED BY SPACE - INTO OLD-FILE-PATH. - MOVE SPACE TO NEW-FILE-PATH. - STRING "new/" DELIMITED BY SIZE - MD-CURRENT DELIMITED BY SPACE - INTO NEW-FILE-PATH. - - IF OLD-FILE-PATH = space GO TO MAIN-900. - - OPEN INPUT OLDFILE - OUTPUT NEWFILE. - *1行目 - *を挿入する - WRITE NEW-REC FROM "". - *2行目 - *前へ/次へを挿入する※文字化け防止のため16進数で挿入 - *前後ファイルのリンクも挿入する - MOVE SPACE TO NEW-REC. - IF MD-PREVIOUS NOT = SPACE AND MD-NEXT NOT = SPACE - STRING "[" DELIMITED BY SIZE - X"E5898DE381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-PREVIOUS DELIMITED BY SPACE - ")/[" DELIMITED BY SIZE - X"E6ACA1E381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-NEXT DELIMITED BY SPACE - ")" DELIMITED BY SIZE - INTO NEW-REC - WRITE NEW-REC. - IF MD-PREVIOUS = SPACE - STRING X"E5898DE381B8" DELIMITED BY SIZE - "/[" DELIMITED BY SIZE - X"E6ACA1E381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-NEXT DELIMITED BY SPACE - ")" DELIMITED BY SIZE - INTO NEW-REC - WRITE NEW-REC. - IF MD-NEXT = SPACE - STRING "[" DELIMITED BY SIZE - X"E5898DE381B8" DELIMITED BY SIZE - "](" DELIMITED BY SIZE - MD-PREVIOUS DELIMITED BY SPACE - ")/" DELIMITED BY SIZE - X"E6ACA1E381B8" DELIMITED BY SIZE - INTO NEW-REC - WRITE NEW-REC. - *3行目 - *を挿入する - WRITE NEW-REC FROM "". - PERFORM UNTIL (OLD-STS NOT = ZERO) - MOVE SPACE TO OLD-REC - READ OLDFILE NEXT - AT END - CONTINUE - NOT AT END - MOVE OLD-REC TO NEW-REC - WRITE NEW-REC - END-READ - END-PERFORM. - CLOSE NEWFILE - CLOSE OLDFILE. - MAIN-900. - STOP RUN. diff --git a/automanual/cob4j_convert.bat b/automanual/cob4j_convert.bat deleted file mode 100755 index 27b98e1..0000000 --- a/automanual/cob4j_convert.bat +++ /dev/null @@ -1,151 +0,0 @@ -java AUTOMANUAL 1-1.md none 1-2-1.md -java AUTOMANUAL 1-2-1.md 1-1.md 1-2-2.md -java AUTOMANUAL 1-2-2.md 1-2-1.md 1-2-3.md -java AUTOMANUAL 1-2-3.md 1-2-2.md 1-2-4.md -java AUTOMANUAL 1-2-4.md 1-2-3.md 1-2-5.md -java AUTOMANUAL 1-2-5.md 1-2-4.md 1-2-6.md -java AUTOMANUAL 1-2-6.md 1-2-5.md 1-2-7.md -java AUTOMANUAL 1-2-7.md 1-2-6.md 1-2-8.md -java AUTOMANUAL 1-2-8.md 1-2-7.md 1-3.md -java AUTOMANUAL 1-3.md 1-2-8.md 1-4.md -java AUTOMANUAL 1-4.md 1-3.md 1-5.md -java AUTOMANUAL 1-5.md 1-4.md 1-6.md -java AUTOMANUAL 1-6.md 1-5.md 1-7-1.md -java AUTOMANUAL 1-7-1.md 1-6.md 1-7-2.md -java AUTOMANUAL 1-7-2.md 1-7-1.md 1-7-3.md -java AUTOMANUAL 1-7-3.md 1-7-2.md 1-8.md -java AUTOMANUAL 1-8.md 1-7-3.md 1-9.md -java AUTOMANUAL 1-9.md 1-8.md 1-10.md -java AUTOMANUAL 1-10.md 1-9.md 2-1.md -java AUTOMANUAL 2-1.md 1-10.md 2-2.md -java AUTOMANUAL 2-2.md 2-1.md 3.md -java AUTOMANUAL 3.md 2-2.md 4-1-1.md -java AUTOMANUAL 4-1-1.md 3.md 4-1-2.md -java AUTOMANUAL 4-1-2.md 4-1-1.md 4-1-3.md -java AUTOMANUAL 4-1-3.md 4-1-2.md 4-1-4.md -java AUTOMANUAL 4-1-4.md 4-1-3.md 4-2-1-1.md -java AUTOMANUAL 4-2-1-1.md 4-1-4.md 4-2-1-2.md -java AUTOMANUAL 4-2-1-2.md 4-2-1-1.md 4-2-1-3.md -java AUTOMANUAL 4-2-1-3.md 4-2-1-2.md 4-2-2.md -java AUTOMANUAL 4-2-2.md 4-2-1-3.md 5-1.md -java AUTOMANUAL 5-1.md 4-2-2.md 5-2.md -java AUTOMANUAL 5-2.md 5-1.md 5-3.md -java AUTOMANUAL 5-3.md 5-2.md 5-4.md -java AUTOMANUAL 5-4.md 5-3.md 5-5.md -java AUTOMANUAL 5-5.md 5-4.md 5-6.md -java AUTOMANUAL 5-6.md 5-5.md 6-1-1.md -java AUTOMANUAL 6-1-1.md 5-6.md 6-1-2.md -java AUTOMANUAL 6-1-2.md 6-1-1.md 6-1-3.md -java AUTOMANUAL 6-1-3.md 6-1-2.md 6-1-4-1.md -java AUTOMANUAL 6-1-4-1.md 6-1-3.md 6-1-4-2.md -java AUTOMANUAL 6-1-4-2.md 6-1-4-1.md 6-1-5.md -java AUTOMANUAL 6-1-5.md 6-1-4-2.md 6-1-6.md -java AUTOMANUAL 6-1-6.md 6-1-5.md 6-1-7.md -java AUTOMANUAL 6-1-7.md 6-1-6.md 6-1-8-1.md -java AUTOMANUAL 6-1-8-1.md 6-1-7.md 6-1-8-2.md -java AUTOMANUAL 6-1-8-2.md 6-1-8-1.md 6-2.md -java AUTOMANUAL 6-2.md 6-1-8-2.md 6-3.md -java AUTOMANUAL 6-3.md 6-2.md 6-4-1.md -java AUTOMANUAL 6-4-1.md 6-3.md 6-4-2.md -java AUTOMANUAL 6-4-2.md 6-4-1.md 6-4-3.md -java AUTOMANUAL 6-4-3.md 6-4-2.md 6-4-4.md -java AUTOMANUAL 6-4-4.md 6-4-3.md 6-4-5.md -java AUTOMANUAL 6-4-5.md 6-4-4.md 6-4-6.md -java AUTOMANUAL 6-4-6.md 6-4-5.md 6-4-7.md -java AUTOMANUAL 6-4-7.md 6-4-6.md 6-5-1.md -java AUTOMANUAL 6-5-1.md 6-4-7.md 6-5-2.md -java AUTOMANUAL 6-5-2.md 6-5-1.md 6-5-3.md -java AUTOMANUAL 6-5-3.md 6-5-2.md 6-6.md -java AUTOMANUAL 6-6.md 6-5-3.md 6-7.md -java AUTOMANUAL 6-7.md 6-6.md 6-8-1.md -java AUTOMANUAL 6-8-1.md 6-7.md 6-8-2.md -java AUTOMANUAL 6-8-2.md 6-8-1.md 6-9.md -java AUTOMANUAL 6-9.md 6-8-2.md 6-10.md -java AUTOMANUAL 6-10.md 6-9.md 6-11.md -java AUTOMANUAL 6-11.md 6-10.md 6-12.md -java AUTOMANUAL 6-12.md 6-11.md 6-13-1.md -java AUTOMANUAL 6-13-1.md 6-12.md 6-13-2.md -java AUTOMANUAL 6-13-2.md 6-13-1.md 6-14-1.md -java AUTOMANUAL 6-14-1.md 6-13-2.md 6-14-2.md -java AUTOMANUAL 6-14-2.md 6-14-1.md 6-14-3.md -java AUTOMANUAL 6-14-3.md 6-14-2.md 6-14-4.md -java AUTOMANUAL 6-14-4.md 6-14-3.md 6-14-5.md -java AUTOMANUAL 6-14-5.md 6-14-4.md 6-15-1.md -java AUTOMANUAL 6-15-1.md 6-14-5.md 6-15-2.md -java AUTOMANUAL 6-15-2.md 6-15-1.md 6-15-3.md -java AUTOMANUAL 6-15-3.md 6-15-2.md 6-15-4.md -java AUTOMANUAL 6-15-4.md 6-15-3.md 6-15-5.md -java AUTOMANUAL 6-15-5.md 6-15-4.md 6-16.md -java AUTOMANUAL 6-16.md 6-15-5.md 6-17.md -java AUTOMANUAL 6-17.md 6-16.md 6-18.md -java AUTOMANUAL 6-18.md 6-17.md 6-19.md -java AUTOMANUAL 6-19.md 6-18.md 6-20.md -java AUTOMANUAL 6-20.md 6-19.md 6-21.md -java AUTOMANUAL 6-21.md 6-20.md 6-22-1.md -java AUTOMANUAL 6-22-1.md 6-21.md 6-22-2.md -java AUTOMANUAL 6-22-2.md 6-22-1.md 6-23.md -java AUTOMANUAL 6-23.md 6-22-2.md 6-24.md -java AUTOMANUAL 6-24.md 6-23.md 6-25.md -java AUTOMANUAL 6-25.md 6-24.md 6-26.md -java AUTOMANUAL 6-26.md 6-25.md 6-27.md -java AUTOMANUAL 6-27.md 6-26.md 6-28-1.md -java AUTOMANUAL 6-28-1.md 6-27.md 6-28-2.md -java AUTOMANUAL 6-28-2.md 6-28-1.md 6-29-1.md -java AUTOMANUAL 6-29-1.md 6-28-2.md 6-29-2.md -java AUTOMANUAL 6-29-2.md 6-29-1.md 6-30.md -java AUTOMANUAL 6-30.md 6-29-2.md 6-31.md -java AUTOMANUAL 6-31.md 6-30.md 6-32-1.md -java AUTOMANUAL 6-32-1.md 6-31.md 6-32-2.md -java AUTOMANUAL 6-32-2.md 6-32-1.md 6-33-1.md -java AUTOMANUAL 6-33-1.md 6-32-2.md 6-33-2.md -java AUTOMANUAL 6-33-2.md 6-33-1.md 6-34.md -java AUTOMANUAL 6-34.md 6-33-2.md 6-35.md -java AUTOMANUAL 6-35.md 6-34.md 6-36.md -java AUTOMANUAL 6-36.md 6-35.md 6-37.md -java AUTOMANUAL 6-37.md 6-36.md 6-38-1.md -java AUTOMANUAL 6-38-1.md 6-37.md 6-38-2.md -java AUTOMANUAL 6-38-2.md 6-38-1.md 6-39-1.md -java AUTOMANUAL 6-39-1.md 6-38-2.md 6-39-2.md -java AUTOMANUAL 6-39-2.md 6-39-1.md 6-39-3.md -java AUTOMANUAL 6-39-3.md 6-39-2.md 6-39-4.md -java AUTOMANUAL 6-39-4.md 6-39-3.md 6-39-5.md -java AUTOMANUAL 6-39-5.md 6-39-4.md 6-39-6.md -java AUTOMANUAL 6-39-6.md 6-39-5.md 6-39-7.md -java AUTOMANUAL 6-39-7.md 6-39-6.md 6-40-1.md -java AUTOMANUAL 6-40-1.md 6-39-7.md 6-40-2.md -java AUTOMANUAL 6-40-2.md 6-40-1.md 6-41.md -java AUTOMANUAL 6-41.md 6-40-2.md 6-42.md -java AUTOMANUAL 6-42.md 6-41.md 6-43.md -java AUTOMANUAL 6-43.md 6-42.md 6-44-1.md -java AUTOMANUAL 6-44-1.md 6-43.md 6-44-2.md -java AUTOMANUAL 6-44-2.md 6-44-1.md 6-44-3.md -java AUTOMANUAL 6-44-3.md 6-44-2.md 6-45.md -java AUTOMANUAL 6-45.md 6-44-3.md 6-46.md -java AUTOMANUAL 6-46.md 6-45.md 6-47.md -java AUTOMANUAL 6-47.md 6-46.md 6-48.md -java AUTOMANUAL 6-48.md 6-47.md 6-49.md -java AUTOMANUAL 6-49.md 6-48.md 6-50.md -java AUTOMANUAL 6-50.md 6-49.md 7-1.md -java AUTOMANUAL 7-1.md 6-50.md 7-2.md -java AUTOMANUAL 7-2.md 7-1.md 7-3-1.md -java AUTOMANUAL 7-3-1.md 7-2.md 7-3-2.md -java AUTOMANUAL 7-3-2.md 7-3-1.md 7-4.md -java AUTOMANUAL 7-4.md 7-3-2.md 8-1-1.md -java AUTOMANUAL 8-1-1.md 7-4.md 8-1-2.md -java AUTOMANUAL 8-1-2.md 8-1-1.md 8-1-3.md -java AUTOMANUAL 8-1-3.md 8-1-2.md 8-1-4.md -java AUTOMANUAL 8-1-4.md 8-1-3.md 8-1-5.md -java AUTOMANUAL 8-1-5.md 8-1-4.md 8-1-6.md -java AUTOMANUAL 8-1-6.md 8-1-5.md 8-1-7.md -java AUTOMANUAL 8-1-7.md 8-1-6.md 8-1-8.md -java AUTOMANUAL 8-1-8.md 8-1-7.md 8-1-9.md -java AUTOMANUAL 8-1-9.md 8-1-8.md 8-2-1.md -java AUTOMANUAL 8-2-1.md 8-1-9.md 8-2-2.md -java AUTOMANUAL 8-2-2.md 8-2-1.md 8-2-3.md -java AUTOMANUAL 8-2-3.md 8-2-2.md 8-2-4.md -java AUTOMANUAL 8-2-4.md 8-2-3.md 8-3-1.md -java AUTOMANUAL 8-3-1.md 8-2-4.md 9-1.md -java AUTOMANUAL 9-1.md 8-3-1.md 9-2.md -java AUTOMANUAL 9-2.md 9-1.md credit.md -java AUTOMANUAL credit.md 9-2.md none -java AUTOMANUAL TOC.md none none diff --git a/automanual/cob4j_convert2.bat b/automanual/cob4j_convert2.bat deleted file mode 100755 index dbcb856..0000000 --- a/automanual/cob4j_convert2.bat +++ /dev/null @@ -1,151 +0,0 @@ -java AUTODELETE 1-1.md -java AUTODELETE 1-2-1.md -java AUTODELETE 1-2-2.md -java AUTODELETE 1-2-3.md -java AUTODELETE 1-2-4.md -java AUTODELETE 1-2-5.md -java AUTODELETE 1-2-6.md -java AUTODELETE 1-2-7.md -java AUTODELETE 1-2-8.md -java AUTODELETE 1-3.md -java AUTODELETE 1-4.md -java AUTODELETE 1-5.md -java AUTODELETE 1-6.md -java AUTODELETE 1-7-1.md -java AUTODELETE 1-7-2.md -java AUTODELETE 1-7-3.md -java AUTODELETE 1-8.md -java AUTODELETE 1-9.md -java AUTODELETE 1-10.md -java AUTODELETE 2-1.md -java AUTODELETE 2-2.md -java AUTODELETE 3.md -java AUTODELETE 4-1-1.md -java AUTODELETE 4-1-2.md -java AUTODELETE 4-1-3.md -java AUTODELETE 4-1-4.md -java AUTODELETE 4-2-1-1.md -java AUTODELETE 4-2-1-2.md -java AUTODELETE 4-2-1-3.md -java AUTODELETE 4-2-2.md -java AUTODELETE 5-1.md -java AUTODELETE 5-2.md -java AUTODELETE 5-3.md -java AUTODELETE 5-4.md -java AUTODELETE 5-5.md -java AUTODELETE 5-6.md -java AUTODELETE 6-1-1.md -java AUTODELETE 6-1-2.md -java AUTODELETE 6-1-3.md -java AUTODELETE 6-1-4-1.md -java AUTODELETE 6-1-4-2.md -java AUTODELETE 6-1-5.md -java AUTODELETE 6-1-6.md -java AUTODELETE 6-1-7.md -java AUTODELETE 6-1-8-1.md -java AUTODELETE 6-1-8-2.md -java AUTODELETE 6-2.md -java AUTODELETE 6-3.md -java AUTODELETE 6-4-1.md -java AUTODELETE 6-4-2.md -java AUTODELETE 6-4-3.md -java AUTODELETE 6-4-4.md -java AUTODELETE 6-4-5.md -java AUTODELETE 6-4-6.md -java AUTODELETE 6-4-7.md -java AUTODELETE 6-5-1.md -java AUTODELETE 6-5-2.md -java AUTODELETE 6-5-3.md -java AUTODELETE 6-6.md -java AUTODELETE 6-7.md -java AUTODELETE 6-8-1.md -java AUTODELETE 6-8-2.md -java AUTODELETE 6-9.md -java AUTODELETE 6-10.md -java AUTODELETE 6-11.md -java AUTODELETE 6-12.md -java AUTODELETE 6-13-1.md -java AUTODELETE 6-13-2.md -java AUTODELETE 6-14-1.md -java AUTODELETE 6-14-2.md -java AUTODELETE 6-14-3.md -java AUTODELETE 6-14-4.md -java AUTODELETE 6-14-5.md -java AUTODELETE 6-15-1.md -java AUTODELETE 6-15-2.md -java AUTODELETE 6-15-3.md -java AUTODELETE 6-15-4.md -java AUTODELETE 6-15-5.md -java AUTODELETE 6-16.md -java AUTODELETE 6-17.md -java AUTODELETE 6-18.md -java AUTODELETE 6-19.md -java AUTODELETE 6-20.md -java AUTODELETE 6-21.md -java AUTODELETE 6-22-1.md -java AUTODELETE 6-22-2.md -java AUTODELETE 6-23.md -java AUTODELETE 6-24.md -java AUTODELETE 6-25.md -java AUTODELETE 6-26.md -java AUTODELETE 6-27.md -java AUTODELETE 6-28-1.md -java AUTODELETE 6-28-2.md -java AUTODELETE 6-29-1.md -java AUTODELETE 6-29-2.md -java AUTODELETE 6-30.md -java AUTODELETE 6-31.md -java AUTODELETE 6-32-1.md -java AUTODELETE 6-32-2.md -java AUTODELETE 6-33-1.md -java AUTODELETE 6-33-2.md -java AUTODELETE 6-34.md -java AUTODELETE 6-35.md -java AUTODELETE 6-36.md -java AUTODELETE 6-37.md -java AUTODELETE 6-38-1.md -java AUTODELETE 6-38-2.md -java AUTODELETE 6-39-1.md -java AUTODELETE 6-39-2.md -java AUTODELETE 6-39-3.md -java AUTODELETE 6-39-4.md -java AUTODELETE 6-39-5.md -java AUTODELETE 6-39-6.md -java AUTODELETE 6-39-7.md -java AUTODELETE 6-40-1.md -java AUTODELETE 6-40-2.md -java AUTODELETE 6-41.md -java AUTODELETE 6-42.md -java AUTODELETE 6-43.md -java AUTODELETE 6-44-1.md -java AUTODELETE 6-44-2.md -java AUTODELETE 6-44-3.md -java AUTODELETE 6-45.md -java AUTODELETE 6-46.md -java AUTODELETE 6-47.md -java AUTODELETE 6-48.md -java AUTODELETE 6-49.md -java AUTODELETE 6-50.md -java AUTODELETE 7-1.md -java AUTODELETE 7-2.md -java AUTODELETE 7-3-1.md -java AUTODELETE 7-3-2.md -java AUTODELETE 7-4.md -java AUTODELETE 8-1-1.md -java AUTODELETE 8-1-2.md -java AUTODELETE 8-1-3.md -java AUTODELETE 8-1-4.md -java AUTODELETE 8-1-5.md -java AUTODELETE 8-1-6.md -java AUTODELETE 8-1-7.md -java AUTODELETE 8-1-8.md -java AUTODELETE 8-1-9.md -java AUTODELETE 8-2-1.md -java AUTODELETE 8-2-2.md -java AUTODELETE 8-2-3.md -java AUTODELETE 8-2-4.md -java AUTODELETE 8-3-1.md -java AUTODELETE 9-1.md -java AUTODELETE 9-2.md -java AUTODELETE credit.md -java AUTODELETE TOC.md diff --git a/automanual/new/1-1.md b/automanual/new/1-1.md deleted file mode 100644 index 177417c..0000000 --- a/automanual/new/1-1.md +++ /dev/null @@ -1,22 +0,0 @@ - -前へ/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-1.md) - -# 1. まえがき - -## 1.1. opensource COBOLとは - -このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 - -opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 - -opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 - -Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 - ---- -`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 - - - -[ページトップへ](1-1.md) - diff --git a/automanual/new/1-10.md b/automanual/new/1-10.md deleted file mode 100644 index 7251f33..0000000 --- a/automanual/new/1-10.md +++ /dev/null @@ -1,27 +0,0 @@ - -[前へ](1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-1.md) - - - -[ページトップへ](1-10.md) - -## 1.10. LENGTH OFの使い方 - -オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 - -``` -01 Demo-Identifier PIC X(27). *> This is a 27-character data-item -. -. -. -DISPLAY LENGTH OF “This is a LENGTH OF Example” -DISPLAY LENGTH OF Demo-Identifier -DISPLAY 27 -``` - -定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 - -1. DISPLAY文の定数の代わりとして -2. WRITE文またはRELEASE文のFROM句の一部として -3. PERFORM文のTIMES句の一部として - diff --git a/automanual/new/1-2-1.md b/automanual/new/1-2-1.md deleted file mode 100644 index 39fd86a..0000000 --- a/automanual/new/1-2-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-2.md) - -## 1.2. COBOL/opensource COBOLの重要機能 - -### 1.2.1. COBOLプログラムの構文 - -COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 - -部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 - -このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 - -4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 - - - -[ページトップへ](1-2-1.md) - diff --git a/automanual/new/1-2-2.md b/automanual/new/1-2-2.md deleted file mode 100644 index c0fb905..0000000 --- a/automanual/new/1-2-2.md +++ /dev/null @@ -1,13 +0,0 @@ - -[前へ](1-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-3.md) - -### 1.2.2. コピーブック - -「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 - -現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 - - - -[ページトップへ](1-2-2.md) - diff --git a/automanual/new/1-2-3.md b/automanual/new/1-2-3.md deleted file mode 100644 index 814d049..0000000 --- a/automanual/new/1-2-3.md +++ /dev/null @@ -1,11 +0,0 @@ - -[前へ](1-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-4.md) - -### 1.2.3. 構造化データ - -COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 - - - -[ページトップへ](1-2-3.md) - diff --git a/automanual/new/1-2-4.md b/automanual/new/1-2-4.md deleted file mode 100644 index 696958e..0000000 --- a/automanual/new/1-2-4.md +++ /dev/null @@ -1,22 +0,0 @@ - -[前へ](1-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-5.md) - -### 1.2.4. ファイル - -COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 - -||| -|:---|:---| -|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| -ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![!\[alt text\](Image/1-0-1.png)](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![!\[alt text\](Image/1-0-2.png)](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| - -すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 - -データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 - - - -[ページトップへ](1-2-4.md) - diff --git a/automanual/new/1-2-5.md b/automanual/new/1-2-5.md deleted file mode 100644 index 9fd16ba..0000000 --- a/automanual/new/1-2-5.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](1-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-6.md) - -### 1.2.5. 表操作 - -他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 - -1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 - -2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 - - - -[ページトップへ](1-2-5.md) - diff --git a/automanual/new/1-2-6.md b/automanual/new/1-2-6.md deleted file mode 100644 index 0c17857..0000000 --- a/automanual/new/1-2-6.md +++ /dev/null @@ -1,14 +0,0 @@ - -[前へ](1-2-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-7.md) -### 1.2.6. データの並び替えと結合 - -COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 - -表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 - -同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 - - - -[ページトップへ](1-2-6.md) - diff --git a/automanual/new/1-2-7.md b/automanual/new/1-2-7.md deleted file mode 100644 index 3cfc417..0000000 --- a/automanual/new/1-2-7.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](1-2-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-8.md) -### 1.2.7. 文字列操作 - -テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 - -| 機能 | サポートするopensource COBOL機能 | -| :--- | :--- | -|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | -| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | -| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | -| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | -| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | -| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | -| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | -| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| -| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | -| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | -| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | -| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | - - - -[ページトップへ](1-2-7.md) - diff --git a/automanual/new/1-2-8.md b/automanual/new/1-2-8.md deleted file mode 100644 index 2f8ccdb..0000000 --- a/automanual/new/1-2-8.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](1-2-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-3.md) - - - -[ページトップへ](1-2-8.md) - -### 1.2.8. テキストユーザインターフェース(TUI)機能 - -COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 - -以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 - -図1-1-TUIサンプル画面 - -![!\[alt text\](Image/1-1.png)](Image/1-1.png) - -このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 - -COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 - ---- - -`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 - diff --git a/automanual/new/1-3.md b/automanual/new/1-3.md deleted file mode 100644 index d692119..0000000 --- a/automanual/new/1-3.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](1-2-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-4.md) - - - -[ページトップへ](1-3.md) - -## 1.3. 構文規則 - -opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 - -| | | -| :--- | :--- | -| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | -| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | -| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | -| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | -| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | -| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | -| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | -| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | -| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | - diff --git a/automanual/new/1-4.md b/automanual/new/1-4.md deleted file mode 100644 index b6faa77..0000000 --- a/automanual/new/1-4.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-5.md) - - - -[ページトップへ](1-4.md) - -## 1.4. ソースコードの形式 - -従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 - -opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 - -| | | -| :--- | :--- | -| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | -| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | -| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | -| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | - -以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 - -| | | -| :--- | :--- | -| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | -| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | -| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | -| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | -| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | -| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | - diff --git a/automanual/new/1-5.md b/automanual/new/1-5.md deleted file mode 100644 index 7d5c3ac..0000000 --- a/automanual/new/1-5.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-6.md) - - - -[ページトップへ](1-5.md) - -## 1.5. カンマ/セミコロンの使い方 - -空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 - -次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: - - CALL “SUBROUTINE” USING 1,2 - -DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 - -句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 - diff --git a/automanual/new/1-6.md b/automanual/new/1-6.md deleted file mode 100644 index 4987dcc..0000000 --- a/automanual/new/1-6.md +++ /dev/null @@ -1,37 +0,0 @@ - -[前へ](1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-1.md) - - - -[ページトップへ](1-6.md) - -## 1.6. COPY文の使い方 - -図1-2-COPY構文 - -![alt text](Image/1-2.png) - -COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 - -1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 - -2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 - -3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 - -4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 - -5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 - -6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 - -7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 - -8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 - -9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 - -10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 - -11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 - diff --git a/automanual/new/1-7-1.md b/automanual/new/1-7-1.md deleted file mode 100644 index 28fe213..0000000 --- a/automanual/new/1-7-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-2.md) - - - -[ページトップへ](1-7-1.md) - -## 1.7. 定数の使い方 - -定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 -### 1.7.1. 数字定数 -数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 - -- 1、56、2192、-54などの整数。 - -- 1.12や-2.95などの整数でない固定小数点値。 - -- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 - diff --git a/automanual/new/1-7-2.md b/automanual/new/1-7-2.md deleted file mode 100644 index 326546b..0000000 --- a/automanual/new/1-7-2.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](1-7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-3.md) - - - -[ページトップへ](1-7-2.md) - -### 1.7.2. 英数字定数 - -英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 - -英数字定数は、次の形式のいずれかを取ることができる。 - -- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 - -- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - -英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 - -- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 - - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l - – “iteral that must - – “be continued.” - - -- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

- - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & - “ long literal that must ” & - “ be continued.” - - -プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 - -数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 - diff --git a/automanual/new/1-7-3.md b/automanual/new/1-7-3.md deleted file mode 100644 index ac92d5f..0000000 --- a/automanual/new/1-7-3.md +++ /dev/null @@ -1,13 +0,0 @@ - -[前へ](1-7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-8.md) - - - -[ページトップへ](1-7-3.md) - -### 1.7.3. 日本語定数 - -- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 - -- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - diff --git a/automanual/new/1-8.md b/automanual/new/1-8.md deleted file mode 100644 index 1884c68..0000000 --- a/automanual/new/1-8.md +++ /dev/null @@ -1,24 +0,0 @@ - -[前へ](1-7-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-9.md) - - - -[ページトップへ](1-8.md) - -## 1.8. 表意定数の使い方 - -表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 - -次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 - -表1-3-表意定数 - -| 表意定数 | 定数型 | 値 | -| :--- | :--- | :--- | -| ZERO, ZEROS, ZEROES | 数字 | 0 | -| SPACE, SPACES | 英数字 | 空白 | -| QUOTE, QUOTES | 英数字 | 二重引用符 | -| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | -| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | -| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | - diff --git a/automanual/new/1-9.md b/automanual/new/1-9.md deleted file mode 100644 index 3b8ce43..0000000 --- a/automanual/new/1-9.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-10.md) - - - -[ページトップへ](1-9.md) - -## 1.9. ユーザ定義名 - -opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 - -ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 - -プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 - diff --git a/automanual/new/2-1.md b/automanual/new/2-1.md deleted file mode 100644 index e55079a..0000000 --- a/automanual/new/2-1.md +++ /dev/null @@ -1,46 +0,0 @@ - -[前へ](1-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-2.md) - - - -[ページトップへ](2-1.md) - -# 2. opensource COBOLのプログラム形式 - -図2-1-opensource COBOLのプログラム形式 - -![alt text](Image/2-1.png) - -COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 - -すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 - -1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 - -2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 - -3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 - -4. 各区分の目的の概要は次の通りである: - -| 区分 | 目的 | -| :--- | :--- | -| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | -| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | -| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | -| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | - -## 2.1. ネストされたユーザプログラム - -図2-2-ネストされたユーザプログラム - -![alt text](Image/2-2.png) - -ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 - -1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 - ---- - -`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 - diff --git a/automanual/new/2-2.md b/automanual/new/2-2.md deleted file mode 100644 index 9872b07..0000000 --- a/automanual/new/2-2.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](3.md) - - - -[ページトップへ](2-2.md) - -## 2.2. ネストされたユーザ定義関数 - -図2-3-ネストされたユーザ定義関数 - -![alt text](Image/2-3.png) - -ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 - -1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 - - name:line: Error: FUNCTION-ID is not yet implemented - diff --git a/automanual/new/3.md b/automanual/new/3.md deleted file mode 100644 index c5009f8..0000000 --- a/automanual/new/3.md +++ /dev/null @@ -1,28 +0,0 @@ - -[前へ](2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-1.md) - - - -[ページトップへ](3.md) - -# 3. 見出し部 - -図3-1-見出し部構文 - -![alt text](Image/3-1.png) - -プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 -1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 - -2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 - -3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 - -4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 - -5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 - -6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 - -7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 - diff --git a/automanual/new/4-1-1.md b/automanual/new/4-1-1.md deleted file mode 100644 index ad0abc3..0000000 --- a/automanual/new/4-1-1.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-2.md) - - - -[ページトップへ](4-1-1.md) - -# 4. 環境部 - -図4-1-環境部構文 - -![alt text](Image/4-1.png) - -プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 - -1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 - -## 4.1. 構成節 - -図4-2-構成節構文 - -![alt text](Image/4-2.png) - -プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 - -1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 - -### 4.1.1. 翻訳用計算機段落 - -図4-3-翻訳用計算機段落構文 - -![alt text](Image/4-3.png) - -翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 - -1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 - -3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 - diff --git a/automanual/new/4-1-2.md b/automanual/new/4-1-2.md deleted file mode 100644 index 6019e06..0000000 --- a/automanual/new/4-1-2.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](4-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-3.md) - - - -[ページトップへ](4-1-2.md) - -### 4.1.2. 実行用計算機段落 - -図4-4-実行用計算機段落構文 - -![alt text](Image/4-4.png) - -実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 - -1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 - -3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 - -4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 - diff --git a/automanual/new/4-1-3.md b/automanual/new/4-1-3.md deleted file mode 100644 index b15bae4..0000000 --- a/automanual/new/4-1-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](4-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-4.md) - - - -[ページトップへ](4-1-3.md) - -### 4.1.3. リポジトリ段落 - -図4-5-リポジトリ段落構文 - -![alt text](Image/4-5.png) - -リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 - -1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 - -2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 - diff --git a/automanual/new/4-1-4.md b/automanual/new/4-1-4.md deleted file mode 100644 index bb32589..0000000 --- a/automanual/new/4-1-4.md +++ /dev/null @@ -1,114 +0,0 @@ - -[前へ](4-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-1.md) - - - -[ページトップへ](4-1-4.md) - -### 4.1.4. 特殊名段落 - -図4-6-特殊名段落構文 - -![alt text](Image/4-6-1.png) -![alt text](Image/4-6-2.png) - -特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定のニーモニック名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 - -つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 - -1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 - -2. IS ニーモニック名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 - -3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 - -4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 - -5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 - - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ - - このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 - - LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: - - 表4-7-局所名 - - | | | | | | - | :---: | :---: | :---: | :---: | :---: | - | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | - | am_ET | el_GR | fil_PH | lv_LV | sma_SE | - | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | - | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | - | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | - | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | - | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | - | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | - | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | - | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | - | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | - | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | - | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | - | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | - | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | - | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | - | ar_TN | en_ZA | he_IL | nn_NO | te_IN | - | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | - | arn_CL | es_AR | hr_BA | oc_FR | th_TH | - | as_IN | es_BO | hr_HR | or_IN | tk_TM | - | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | - | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | - | ba_R | es_CR | id_ID | ps_AF | tr_IN | - | be_BY | es_DO | ig_NG | pt_BR | tr_TR | - | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | - | bn_IN | es_ES | is_IS | qut_GT | ug_CN | - | bo_BT | es_GT | it_CH | quz_BO | uk_UA | - | bo_CN | es_HN | it_IT | quz_EC | ur_PK | - | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | - | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | - | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | - | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | - | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | - | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | - | da_DK | es_SV | kl_GL | sah_RU | yo_NG | - | de_AT | es_US | kn_IN | se_FI | zh_CN | - | de_CH | es_UY | ko_KR | se_NO | zh_HK | - | de_DE | es_VE | kok_IN | se_SE | zh_MO | - | de_LI | et_EE | ky_KG | si_LK | zh_SG | - | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | - | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | - - -7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 - -8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 - -9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 - - 表4-8-ACCEPT画面ステータスコード - - | コード | 意味 | - | :--- | :--- | - | 0000 | ENTERキー押下 | - | 1001 - 1064| F1 — F64 | - | 2001, 2002 | PgUP, PgDn4 | - | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | - | 2005 | Esc6 | - | 8000 | ACCEPT画面に利用できるデータがない | - | 9000 | 致命的なI/O画面エラー | - - -10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 - -11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 - ---- - -`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 - -`5` Windowsシステムでは検出できない。 - -`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) - diff --git a/automanual/new/4-2-1-1.md b/automanual/new/4-2-1-1.md deleted file mode 100644 index 89915b3..0000000 --- a/automanual/new/4-2-1-1.md +++ /dev/null @@ -1,112 +0,0 @@ - -[前へ](4-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-2.md) - - - -[ページトップへ](4-2-1-1.md) - -## 4.2. 入出力節 - -図4-9-入出力節構文 - -![alt text](Image/4-9.png) - -入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 - -1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - -### 4.2.1. ファイル管理段落 - -図4-10-ファイル管理段落構文 - -![alt text](Image/4-10.png) - -ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 - -1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 - -2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 - -3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 - - SELECT My-File ASSIGN TO DISK DISPLAY. - - 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 - - SELECT My-File ASSIGN TO DISPLAY. - - -4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 - - - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 - - この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - - 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 - - 表4-11-ステータスコード - - |ステータス値 | 意味 | - | :--- | :--- | - |00 | 成功| - |02 | 成功(重複レコードキーが検出された)| - |05 | 成功(オプションファイルが存在しない)| - |07 | 成功(ユニットが存在しない)| - |10 |ファイル終了| - |14 |キー範囲外| - |21 |キーが無効である| - |22 |キーの値の重複が検出された| - |23 |キーが存在しない| - |30 |永続的入出力エラー| - |31 |ファイル名に一貫性がない| - |34 |ファイル区域外である| - |35 |ファイルが存在しない| - |37 |アクセス権拒否| - |38 |ファイルがロックで閉じられている| - |39 |属性の矛盾が検出された| - |41 |ファイルが既に開かれている| - |42 |ファイルが開かれていない| - |43 |読み込みが行われていない| - |44 |レコードのオーバーフロー| - |46 |読み込みエラー| - |47 |OPEN INPUTが拒否された| - |48 |OPEN OUTPUTが拒否された| - |49 |OPEN I/Oが拒否された| - |51 |レコードがロックされている| - |52 |ページ終了| - |57 |LINAGE指定が無効である| - |61 |ファイル共有の失敗| - |91 |ファイルが利用できない| - -5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 - -#### 4.2.1.1. 順編成ファイル - -図4-12-順編成ファイルの指定 - -![alt text](Image/4-12.png) - -SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 - -1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 - -2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 - -3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 - -4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 - -5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 - -6. 固定長と可変長、両方のレコード形式がサポートされている。 - -7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 - -8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/new/4-2-1-2.md b/automanual/new/4-2-1-2.md deleted file mode 100644 index f530104..0000000 --- a/automanual/new/4-2-1-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](4-2-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-3.md) - - - -[ページトップへ](4-2-1-2.md) - -#### 4.2.1.2. 相対編成ファイル - -図4-13-相対編成ファイルの指定 - -![alt text](Image/4-13.png) - -RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 - -1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 - -2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 - -3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 - -4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 - -7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/new/4-2-1-3.md b/automanual/new/4-2-1-3.md deleted file mode 100644 index 809fa28..0000000 --- a/automanual/new/4-2-1-3.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](4-2-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-2.md) - - - -[ページトップへ](4-2-1-3.md) - -#### 4.2.1.3. 索引編成ファイル - -図4-14-索引編成ファイルの指定 - -![alt text](Image/4-14.png) - -RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 - -例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 - -1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 - -4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 - -5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 - -6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 - -7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/new/4-2-2.md b/automanual/new/4-2-2.md deleted file mode 100644 index d605a77..0000000 --- a/automanual/new/4-2-2.md +++ /dev/null @@ -1,22 +0,0 @@ - -[前へ](4-2-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-1.md) - - - -[ページトップへ](4-2-2.md) - -### 4.2.2. 入出力管理段落 - -図4-15-入出力管理段落構文 - -![alt text](Image/4-15.png) - - -入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 - -1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 - -2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 - -3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 - diff --git a/automanual/new/5-1.md b/automanual/new/5-1.md deleted file mode 100644 index 5431675..0000000 --- a/automanual/new/5-1.md +++ /dev/null @@ -1,57 +0,0 @@ - -[前へ](4-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-2.md) - - - -[ページトップへ](5-1.md) - -# 5. データ部 - -図5-1-データ部の形式 - -![alt text](Image/5-1.png) - -データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 - -1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 - -2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) - -3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 - -4. 局所場所はネストされたプログラムでは使用できない。 - -5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 - -6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 - -## 5.1. ファイル記述 - -図5-2-ファイル記述構文 - -![alt text](Image/5-2.png) - -プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 - -1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 - -2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 - -3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 - -4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 - -5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 - -6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 - -7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 - - 図5-3-LINAGE句指定ページ構造 - - ![alt text](Image/5-3.png) - -8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 - -9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 - diff --git a/automanual/new/5-2.md b/automanual/new/5-2.md deleted file mode 100644 index ee49613..0000000 --- a/automanual/new/5-2.md +++ /dev/null @@ -1,26 +0,0 @@ - -[前へ](5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-3.md) - - - -[ページトップへ](5-2.md) - -## 5.2. 整列用記述 - -図5-4-整列用記述段落 - -![alt text](Image/5-4.png) - - -整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 - -1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 - -2. 整列用ファイルをディスクに割り当てる必要がある。 - -3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 - -4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 - -5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 - diff --git a/automanual/new/5-3.md b/automanual/new/5-3.md deleted file mode 100644 index 9b6f17d..0000000 --- a/automanual/new/5-3.md +++ /dev/null @@ -1,302 +0,0 @@ - -[前へ](5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-4.md) - - - -[ページトップへ](5-3.md) - -## 5.3. データ記述の形式 - -図5-5-データ記述の一般形式 - -![alt text](Image/5-5.png) - -ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 - -1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 - -2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 - - - | | | - | --- | --- | - | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | - | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | - | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | - | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | - - - この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 - -3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 - -4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 - - 表5-6-データのクラス定義 PICTURE記号(9/A/X) - - | 基本記号 | 意味・使用方法 | - | :--- | :--- | - | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | - | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | - | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | - | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | - - 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: - - | | | - | --- | --- | - | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | - | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | - | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | - | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | - - - - 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 - - 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 - - 表5-7-数値形式オプションのPICTURE記号(P/S/V) - - | 数値形式のオプション記号 | 意味・使用方法 | - | :--- | :--- | - | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | - | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | - | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | - -5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 - - 表5-8-符号エンコード文字 - - | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | - | :---: | :---: |:---: | - | 0 | 0 | p | - | 1 | 1 | q | - | 2 | 2 | r | - | 3 | 3 | s | - | 4 | 4 | t | - | 5 | 5 | u | - | 6 | 6 | v | - | 7 | 7 | w | - | 8 | 8 | x | - | 9 | 9 | y | - - SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 - - -6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 - - 表5-9-数字編集PICTURE記号 - - | 編集記号 | 意味・使用方法 | - | :--- | :--- | - | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | - | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | - | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | - | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | - | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | - | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | - | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | - | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | - | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | - | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | - - 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 - -7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 - -8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 - -9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 - -10. EXTERNAL句は、77または01レベルでのみ指定できる。 - -11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 - -12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 - -13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 - -14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 - - 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. - - 以下のように割り当てられる。 - - ![alt text](Image/5-3-9.png) - - 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 - ``` - 05 X OCCURS 3 TIMES. - 10 A PIC X(1). - 10 B PIC X(1). - 10 C PIC X(1). - ``` - ![alt text](Image/5-3-10.png) - - 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 - -15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 - -16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 - -17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 - - ``` - PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 - PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” - PIC 9(3) VALUE 1 – 次の値を保持する 001 - PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 - ``` - -18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 - -19. BASED句とANY LENGTH句を併用することはできない。 - -20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 - -21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 - -22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 - -23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 - -24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある - - a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 - - b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 - - c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 - - d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 - - e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 - - f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 - -25. 次の表は、利用可能なUSAGE句をまとめたものである。 - - 表5-10-USAGE句一覧
- - | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| - | :--- | :--- |:--- | :--- |:--- | :--- | - | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | - | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | - |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | - | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | - | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | - | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | - | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | - | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | - | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | - | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | - | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | - | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | - | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | - | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | - | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | - | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | - | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | - | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | - | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | - | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | - | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | - -26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 - - ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 - - リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 - - CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 - - 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 - - バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 - -27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 - -28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 - -29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 - - a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 - - b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 - - c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 - - 図5-11-SYNCHRONIZED句の効果 - - ![alt text](Image/5-11.png) - - 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 - - SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 - -30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 - - a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 - - b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 - ``` - 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 - - ``` - 05 SHIRT-SIZE-VALUES. - 10 PIC X(4) VALUE “S 14”. - 10 PIC X(4) VALUE “M 15”. - 10 PIC X(4) VALUE “L 16”. - 10 PIC X(4) VALUE “XL17”. - 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - - - cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) - - 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 - - ``` - 05 X OCCURS 6 TIMES. - 10 A PIC X(1) VALUE “?‟. - 10 B PIC X(1) VALUE “%‟. - 10 N PIC 9(2) VALUE 10. - ``` - - この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 - ---- -`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 - -`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 - -`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 - -`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 - diff --git a/automanual/new/5-4.md b/automanual/new/5-4.md deleted file mode 100644 index 224af7c..0000000 --- a/automanual/new/5-4.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-5.md) - - - -[ページトップへ](5-4.md) - -## 5.4. 条件名 - -図5-12-レベル88条件名記述構文 - -![alt text](Image/5-12.png) - -条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 - -1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 - -2. また、ストレージを占有しない。 - -3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 - -4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 - -5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 - diff --git a/automanual/new/5-5.md b/automanual/new/5-5.md deleted file mode 100644 index 9acd3d1..0000000 --- a/automanual/new/5-5.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](5-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-6.md) - - - -[ページトップへ](5-5.md) - -## 5.5. 定数記述 - -図5-13-78レベル定数記述構文 - -![alt text](Image/5-13.png) - -この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 - -1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 - -2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 - diff --git a/automanual/new/5-6.md b/automanual/new/5-6.md deleted file mode 100644 index 689c04d..0000000 --- a/automanual/new/5-6.md +++ /dev/null @@ -1,105 +0,0 @@ - -[前へ](5-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-1.md) - - - -[ページトップへ](5-6.md) - -## 5.6. 画面記述 - -図5-14-画面節データ項目記述構文 - -![alt text](Image/5-14-1.png) -![alt text](Image/5-14-2.png) - -上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 - -1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 - -2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 - -3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 - -4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 - -5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 - -6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 - -7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` - -8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 - -9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 - -10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 - -11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 - - LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 - - もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 - - TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 - - 必要に応じてCOLUMNはCOLに省略が可能である。 - -12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 - - 表5-15-番号によって指定される画面色 - - | 整数 | 色 | - | :---: | :---: | - | 0 | 黒 | - | 1 | 青 | - | 2 | 緑 | - | 3 | 青緑 | - | 4 | 赤 | - | 5 | 赤紫 | - | 6 | 黄 | - | 7 | 白 | - -13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 - - 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
- - - | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | - | :---: | :---: |:---: | - | 0 | 黒 | 暗灰 | - | 1 | 暗青/藍 | 明青 | - | 2 | 暗緑 | 明緑 | - | 3 | 暗青緑 | 明青緑 | - | 4 | 暗赤 | 明赤 | - | 5 | 暗赤紫 | 明赤紫 | - | 6 | 金/茶 | 黄 | - | 7 | 明灰 | 白 | - - -14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 - -15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 - - ``` - 78 Black VALUE 0. - 78 Blue VALUE 1. - 78 Green VALUE 2. - 78 White VALUE 7. - ・・・ - 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ - 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ - 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ - ``` - DEF項目の色は緑と白になる(XYZから継承される) - -16. VALUE句は変更できない固定のテキストを定義するために使用される。 - -17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 - -18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 - -19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 - ---- -`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 - diff --git a/automanual/new/6-1-1.md b/automanual/new/6-1-1.md deleted file mode 100644 index b10bb5e..0000000 --- a/automanual/new/6-1-1.md +++ /dev/null @@ -1,38 +0,0 @@ - -[前へ](5-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-2.md) - - - -[ページトップへ](6-1-1.md) - -# 6. 手続き部 - -## 6.1. 構成要素 - -### 6.1.1. 表の参照 - -COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 - -4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: - -``` - 01 GRID. - 05 GRID-ROW OCCURS 3 TIMES. - 10 GRID-COLUMN OCCURS 4 TIMES. - 15 GRID-CHARACTER PIC X(1). -``` - -次の図で網掛けされているGRID-CHARACTERは、 - -![alt text](Image/6-0.png) - - -次のコードで参照できる。 - - GRID-CHARACTER(2, 3) - -添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または -これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 - -算術式については[6.1.4.1](6-1-4-1.md)で説明する。 - diff --git a/automanual/new/6-1-2.md b/automanual/new/6-1-2.md deleted file mode 100644 index cb79ecc..0000000 --- a/automanual/new/6-1-2.md +++ /dev/null @@ -1,54 +0,0 @@ - -[前へ](6-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-3.md) - - - -[ページトップへ](6-1-2.md) - -### 6.1.2. データ名の修飾 - -COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 - -動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: - -``` - 01 EMPLOYEE. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). - 01 CUSTOMER. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). -``` - -それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: - - MOVE “Philadelphia” TO CITY. - -この問題を解決するために、CITYの参照を次のように修飾できる。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. - -残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. - -これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 - - MOVE “Philadelphia” TO CITY OF EMPLOYEE. - -テーブルへの参照を修飾する場合は次のように記述する。 - - 一意名-1 OF 一意名-2(添え字・・・) - -予約語の「IN」は「OF」の代わりとして使うことができる。 - diff --git a/automanual/new/6-1-3.md b/automanual/new/6-1-3.md deleted file mode 100644 index 5fdbb29..0000000 --- a/automanual/new/6-1-3.md +++ /dev/null @@ -1,30 +0,0 @@ - -[前へ](6-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-1.md) - - - -[ページトップへ](6-1-3.md) - -### 6.1.3. 部分参照 - -図6-1-部分参照構文 - -![alt text](Image/6-1.png) - -COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 - -開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 - -ここでいくつか例を挙げる。 - -| | | -| --- | --- | -| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | -| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | -| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | -| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | -| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | - - -参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 - diff --git a/automanual/new/6-1-4-1.md b/automanual/new/6-1-4-1.md deleted file mode 100644 index 05eee54..0000000 --- a/automanual/new/6-1-4-1.md +++ /dev/null @@ -1,57 +0,0 @@ - -[前へ](6-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-2.md) - - - -[ページトップへ](6-1-4-1.md) - -### 6.1.4. 式 - -opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 - -- 数値結果を計算する「算術式」 - -- TRUEまたはFALSE値を計算する「条件式」 - -0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 - -#### 6.1.4.1. 算術式 - -算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 - -| 優先順位 演算子 | 意味 | - | :---: | :--- | - | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| - | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | - | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | - | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | - | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | - | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | - | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | - -COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 - -1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 - -2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 - -3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 - -4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 - -5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 - -6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 - -ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 - -| 式 | 計算結果 | 解説 | -| :--- | :--- |:--- | -| 3 * 4 + 1|13|* は + よりも優先される。 | -| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | -| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | -| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | -| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | - -もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 - diff --git a/automanual/new/6-1-4-2.md b/automanual/new/6-1-4-2.md deleted file mode 100644 index 25523c0..0000000 --- a/automanual/new/6-1-4-2.md +++ /dev/null @@ -1,148 +0,0 @@ - -[前へ](6-1-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-5.md) - - - -[ページトップへ](6-1-4-2.md) - -#### 6.1.4.2. 条件式 - -条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 - -##### 6.1.4.2.1. 条件名(レベル88項目) - -次のコードは最も単純な条件の一例である。 - -``` - 05 SHIRT-SIZE PIC 99V9. - 88 LILLIPUTIAN VALUE 0 THRU 12.5 - 88 XS VALUE 13 THRU 13.5. - 88 S VALUE 14, 14.5. - 88 M VALUE 15, 15.5. - 88 L VALUE 16, 16.5. - 88 XL VALUE 17, 17.5. - 88 XXL VALUE 18, 18.5. - 88 HUMUNGOUS VALUE 19 THRU 99.9. -``` - -条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 - - - IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 - - -または次のように条件名「XL」を使用することもできる。 - - IF XL - -##### 6.1.4.2.2. 字類条件 - -図6-9-字類条件構文 - -![alt text](Image/6-9.png) - -字類条件は、データ項目に格納されている現在のデータ型を判別する。 - -1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 - -2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 - -3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 - -4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 - -5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 - -6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 - -7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 - - ``` - SPECIAL-NAMES. - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. - ``` - -次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 - -``` - IF Entered-Value IS Hexadecimal - PERFORM 150-Process-Hex-Value - END-IF -``` - -##### 6.1.4.2.3. 正負条件 -図6-10-正負条件構文 - -![alt text](Image/6-10.png) - -正負条件は、PIC 9データ項目の数値状態を判別する。 - -1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 - -2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 - -##### 6.1.4.2.4. スイッチ状態条件 -図6-11-スイッチ状態条件 - -![alt text](Image/6-11.png) - -特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 - -##### 6.1.4.2.5. 比較条件 -図6-12-比較条件構文 - -![alt text](Image/6-12.png) - -比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 - -1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 - -2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 - -##### 6.1.4.2.6. 組み合わせ条件 -図6-13-組み合わせ条件構文 - -![alt text](Image/6-13.png) - -組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 - -1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 - -2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 - -3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 -``` - IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 -``` -以下のように省略される。 -``` - IF ACCOUNT-STATUS = 1 OR 2 OR 7 -``` - -4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 - - ``` - FALSE OR TRUE AND TRUE 結果:TRUE - (FALSE OR FALSE) AND TRUE 結果:FALSE - FALSE OR (FALSE AND TRUE) 結果:TRUE - ``` - -##### 6.1.4.2.7. 否定条件 -図6-14-否定条件構文 - -![alt text](Image/6-14.png) - -否定条件はNOT演算子を用いて、条件を否定する。 - -1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 - -2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 -``` - NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE - 結果:FALSE - NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) - 結果:TRUE - NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) - 結果:FALSE -``` - diff --git a/automanual/new/6-1-5.md b/automanual/new/6-1-5.md deleted file mode 100644 index 144311f..0000000 --- a/automanual/new/6-1-5.md +++ /dev/null @@ -1,52 +0,0 @@ - -[前へ](6-1-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-6.md) - - - -[ページトップへ](6-1-5.md) - -### 6.1.5. ピリオド(.) - -COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 - -``` - MOVE SPACES TO Employee-Address - ADD 1 TO Record-Counter - DISPLAY “Record-Counter=” Record-Counter -``` - -一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 - -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest - DISPLAY “Interest Amount = “ Interest -``` - -この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 - -しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: - -``` - IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 - GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 - GIVING Interest DISPLAY “Interest Amount = “ Interest -``` - -では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 - -そこで用いるのが完結文である。 - -COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest. - DISPLAY “Interest Amount = “ Interest -``` - -二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 - diff --git a/automanual/new/6-1-6.md b/automanual/new/6-1-6.md deleted file mode 100644 index ad49fc3..0000000 --- a/automanual/new/6-1-6.md +++ /dev/null @@ -1,46 +0,0 @@ - -[前へ](6-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-7.md) - - - -[ページトップへ](6-1-6.md) - -### 6.1.6. 動詞/END-動詞 - -1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 - -``` - IF A = 1 - IF B = 1 - DISPLAY “A & B = 1” - ELSE - IF B = 1 - DISPLAY “A NOT = 1 BUT B = 1” - ELSE - DISPLAY “NEITHER A NOR B = 1”. -``` - -このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 - -![alt text](Image/6-16-1.png) - -NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 - -1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: - -![alt text](Image/6-16-2.png) - -しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 - -![alt text](Image/6-16-3.png) - -COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 - -COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` - -既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 - ---- -`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 - -`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? diff --git a/automanual/new/6-1-7.md b/automanual/new/6-1-7.md deleted file mode 100644 index 5dbf4dc..0000000 --- a/automanual/new/6-1-7.md +++ /dev/null @@ -1,24 +0,0 @@ - -[前へ](6-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-1.md) - - - -[ページトップへ](6-1-7.md) - -### 6.1.7. 特殊レジスタ - -opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 - -表6-15-特殊レジスタ - -| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | -| :--- | :--- |:--- | -| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | -| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | -| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | -| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | -| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | - ---- -`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 - diff --git a/automanual/new/6-1-8-1.md b/automanual/new/6-1-8-1.md deleted file mode 100644 index abf0e55..0000000 --- a/automanual/new/6-1-8-1.md +++ /dev/null @@ -1,34 +0,0 @@ - -[前へ](6-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-2.md) - - - -[ページトップへ](6-1-8-1.md) - -### 6.1.8. ファイルへの同時アクセス制御 - -データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 - -すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 - -#### 6.1.8.1. ファイル共有 - -opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 - -OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 - -ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 - -| 共有オプション |効果 | -| :--- | :--- | -| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | -| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | -| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | - -誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 - ---- -`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 - -`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 - diff --git a/automanual/new/6-1-8-2.md b/automanual/new/6-1-8-2.md deleted file mode 100644 index 43c5b86..0000000 --- a/automanual/new/6-1-8-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-1-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-2.md) - - - -[ページトップへ](6-1-8-2.md) - -#### 6.1.8.2. レコードロック - -レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 - -ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 - -レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 - -| レコードロック オプション |効果 | -| :--- | :--- | -| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | -| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | -| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | -| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | - - -使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 - diff --git a/automanual/new/6-10.md b/automanual/new/6-10.md deleted file mode 100644 index b661287..0000000 --- a/automanual/new/6-10.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-11.md) - - - -[ページトップへ](6-10.md) - -## 6.10. COMMIT - -図6-37-COMMIT構文 - -![alt text](Image/6-37-Commit.png) - -COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 - -1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 - diff --git a/automanual/new/6-11.md b/automanual/new/6-11.md deleted file mode 100644 index 208b291..0000000 --- a/automanual/new/6-11.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-12.md) - - - -[ページトップへ](6-11.md) - -## 6.11. COMPUTE - -図6-38-COMPUTE構文 - -![alt text](Image/6-38-Compute.png) - -COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 - -1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 - -2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 - diff --git a/automanual/new/6-12.md b/automanual/new/6-12.md deleted file mode 100644 index c5bc50a..0000000 --- a/automanual/new/6-12.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](6-11.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-1.md) - - - -[ページトップへ](6-12.md) - -## 6.12. CONTINUE - -図6-39-CONTINUE構文 - -![alt text](Image/6-39-Continue.png) - -CONTINUE文は動作がないためアクションを実行しない。 - -1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 - - ![alt text](Image/6-12-1.png) - - 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 - -2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 - - ![alt text](Image/6-12-2.png) - -COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 - - IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ - -プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 - -従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 - diff --git a/automanual/new/6-13-1.md b/automanual/new/6-13-1.md deleted file mode 100644 index 7100207..0000000 --- a/automanual/new/6-13-1.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](6-12.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-2.md) - - - -[ページトップへ](6-13-1.md) - -## 6.13. DELETE - -### 6.13.1. DELETE文の書き方1 ― DELETE - -図6-40-DELETE構文(レコードの削除) - -![alt text](Image/6-40-Delete.png) - -DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 - -1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 - -2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 - -3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 - -4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 - -5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 - -6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 - -7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 - diff --git a/automanual/new/6-13-2.md b/automanual/new/6-13-2.md deleted file mode 100644 index f7f14f5..0000000 --- a/automanual/new/6-13-2.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-13-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-1.md) - - - -[ページトップへ](6-13-2.md) - -### 6.13.2. DELETE文の書き方2 ― DELETE FILE - -図6-41-DELETE FILE構文(ファイルの削除) - -![alt text](Image/6-41(delete).png) - -DELETE FILE文は、ディスクファイルを削除する。 - -1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 - -2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 - -3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 - diff --git a/automanual/new/6-14-1.md b/automanual/new/6-14-1.md deleted file mode 100644 index 5a7b736..0000000 --- a/automanual/new/6-14-1.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-13-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-2.md) - - - -[ページトップへ](6-14-1.md) - -## 6.14. DISPLAY - -### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE - -図6-42-DISPLAY構文(UPON CONSOLE) - -![alt text](Image/6-42-Display.png) - -プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 - -1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 - -2. 指定するニーモニック名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義のニーモニック名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 - -3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 - diff --git a/automanual/new/6-14-2.md b/automanual/new/6-14-2.md deleted file mode 100644 index 7f6cc0f..0000000 --- a/automanual/new/6-14-2.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-14-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-3.md) - - - -[ページトップへ](6-14-2.md) - -### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス - -図6-43-DISPLAY構文(コマンドライン引数へのアクセス) - -![alt text](Image/6-43-Display.png) - -後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 - -1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 - diff --git a/automanual/new/6-14-3.md b/automanual/new/6-14-3.md deleted file mode 100644 index 5f5acab..0000000 --- a/automanual/new/6-14-3.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-14-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-4.md) - - - -[ページトップへ](6-14-3.md) - -### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 - -図6-44-DISPLAY構文(環境変数へのアクセス/設定) - -![alt text](Image/6-44-Display.png) - -環境変数を作成または変更するために使われる。 - -1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 - - DISPLAY - environment-variable-name UPON ENVIRONMENT-NAME - END-DISPLAY - DISPLAY - environment-variable-name UPON ENVIRONMENT-VALUE - END-DISPLAY - - -2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 - -3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 -  diff --git a/automanual/new/6-14-4.md b/automanual/new/6-14-4.md deleted file mode 100644 index 380d5b8..0000000 --- a/automanual/new/6-14-4.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-14-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-5.md) - - - -[ページトップへ](6-14-4.md) - -### 6.14.4. DISPLAY文の書き方4 ― 画面データ - -図6-45-DISPLAY構文(画面データ) - -![alt text](Image/6-45-Display.png) - -形式化された画面にデータを表示する。 - -1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 - -2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 - -4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 - diff --git a/automanual/new/6-14-5.md b/automanual/new/6-14-5.md deleted file mode 100644 index 2f3d7fd..0000000 --- a/automanual/new/6-14-5.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-14-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-1.md) - - - -[ページトップへ](6-14-5.md) - -### 6.14.5. DISPLAY文の例外処理 - -図6-46-DISPLAY構文(例外処理) - -![alt text](Image/6-46-Display.png) - -DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 - diff --git a/automanual/new/6-15-1.md b/automanual/new/6-15-1.md deleted file mode 100644 index b7b2839..0000000 --- a/automanual/new/6-15-1.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-14-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-2.md) - - - -[ページトップへ](6-15-1.md) - -## 6.15. DIVIDE - -### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO - -図6-47-DIVIDE INTO構文 - -![alt text](Image/6-47-Divide.png) - -指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new/6-15-2.md b/automanual/new/6-15-2.md deleted file mode 100644 index 886b376..0000000 --- a/automanual/new/6-15-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-3.md) - - - -[ページトップへ](6-15-2.md) - -### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING - -図6-48-DIVIDE INTO GIVING構文 - -![alt text](Image/6-48-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new/6-15-3.md b/automanual/new/6-15-3.md deleted file mode 100644 index 73cf718..0000000 --- a/automanual/new/6-15-3.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-4.md) - - - -[ページトップへ](6-15-3.md) - -### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING - -図6-49-DIVIDE BY GIVING構文 - -![alt text](Image/6-49-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new/6-15-4.md b/automanual/new/6-15-4.md deleted file mode 100644 index e1e7465..0000000 --- a/automanual/new/6-15-4.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-5.md) - - - -[ページトップへ](6-15-4.md) - -### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER - -図6-50-DIVIDE INTO REMAINDER構文 - -![alt text](Image/6-50-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new/6-15-5.md b/automanual/new/6-15-5.md deleted file mode 100644 index af16766..0000000 --- a/automanual/new/6-15-5.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-16.md) - - - -[ページトップへ](6-15-5.md) - -### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER - -図6-51-DIVIDE BY REMAINDER構文 - -![alt text](Image/6-51-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new/6-16.md b/automanual/new/6-16.md deleted file mode 100644 index c4fd7f7..0000000 --- a/automanual/new/6-16.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-15-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-17.md) - - - -[ページトップへ](6-16.md) - -## 6.16. ENTRY - -図6-52-ENTRY構文 - -![alt text](Image/6-52-Entry.png) - -ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 - -1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 - -2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 - -3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 - diff --git a/automanual/new/6-17.md b/automanual/new/6-17.md deleted file mode 100644 index d468d6d..0000000 --- a/automanual/new/6-17.md +++ /dev/null @@ -1,59 +0,0 @@ - -[前へ](6-16.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-18.md) - - - -[ページトップへ](6-17.md) - -## 6.17. EVALUATE - -図6-53-EVALUATE構文 - -![alt text](Image/6-53-Evaluate.png) - -EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 - -1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 - -2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: - - - Legal: Not Legal: - - (3 + Years-Of-Service) THROUGH 99 0 THRU “A” - - “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is - - X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) - - 15.7 THROUGH 19.4 - -3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択サブジェクトと呼ばれ、各WHEN句の後に指定された値は選択オブジェクトと呼ばれる。 - -4. 各WHEN句には、EVALUATE文の選択サブジェクトと同じ数の選択オブジェクトが必要である。 - -5. 各EVALUATE句の選択サブジェクトは、選択オブジェクトに対応する各WHEN句と等しいかどうかテストされる。 - -6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 - -7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 - -8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 - -9. ANYの選択オブジェクトを使うと、ANYと一致する選択サブジェクトと自動的に合致する。 - -ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 - -1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 - -2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 - -3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 - -4. 上記以外の種類の口座には利子が適用されない。 - -これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 - -図6-54-EVALUATE文のデモプログラム -![alt text](Image/6-54-Evaluate.png) - diff --git a/automanual/new/6-18.md b/automanual/new/6-18.md deleted file mode 100644 index 43caf0d..0000000 --- a/automanual/new/6-18.md +++ /dev/null @@ -1,42 +0,0 @@ - -[前へ](6-17.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-19.md) - - - -[ページトップへ](6-18.md) - -## 6.18. EXIT - -図6-55-EXIT構文 - -![alt text](Image/6-55-Exit.png) - -EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 - -1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 - - 図6-56-EXIT文
- ![alt text](Image/6-56-Exit.png) - -2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 - -3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 - -4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 - - EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 - - 図6-57-EXIT PARAGRAPH文
- ![alt text](Image/6-57-Exit.png) - -5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 - -6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 - -7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 - - 図6-58-EXIT PERFORM文
- ![alt text](Image/6-58-Exit.png) - -8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 - diff --git a/automanual/new/6-19.md b/automanual/new/6-19.md deleted file mode 100644 index 8b6658c..0000000 --- a/automanual/new/6-19.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-18.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-20.md) - - - -[ページトップへ](6-19.md) - -## 6.19. FREE - -図6-59-FREE構文 - -![alt text](Image/6-59-Free.png) - -FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 - -1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 - -2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 - -3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 - -4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 - diff --git a/automanual/new/6-2.md b/automanual/new/6-2.md deleted file mode 100644 index 2717ca3..0000000 --- a/automanual/new/6-2.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](6-1-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-3.md) - - - -[ページトップへ](6-2.md) - -## 6.2. 記述形式 - -図6-16-記述形式構文 - -![alt text](Image/6-16.png) - -手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 - -手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 - -1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 - -2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 - -3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 - -4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 - -5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 - -6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 - -7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 - diff --git a/automanual/new/6-20.md b/automanual/new/6-20.md deleted file mode 100644 index 7377de9..0000000 --- a/automanual/new/6-20.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-19.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-21.md) - - - -[ページトップへ](6-20.md) - -## 6.20. GENERATE - -図6-60-GENERATE構文 - -![alt text](Image/6-60-Generate.png) - -GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - diff --git a/automanual/new/6-21.md b/automanual/new/6-21.md deleted file mode 100644 index f758fa0..0000000 --- a/automanual/new/6-21.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-20.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-1.md) - - - -[ページトップへ](6-21.md) - -## 6.21. GOBACK - -図6-61-GOBACK構文 - -![alt text](Image/6-61-Goback.png) - -GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 - -1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 - -2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 - diff --git a/automanual/new/6-22-1.md b/automanual/new/6-22-1.md deleted file mode 100644 index 4b8a015..0000000 --- a/automanual/new/6-22-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-21.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-2.md) - - - -[ページトップへ](6-22-1.md) - -## 6.22. GO TO - -### 6.22.1. GO TO文の書き方1 ― GO TO - -図6-62-GOTO構文 - -![alt text](Image/6-62-Goto.png) - -プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 - -1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 - diff --git a/automanual/new/6-22-2.md b/automanual/new/6-22-2.md deleted file mode 100644 index f1f151e..0000000 --- a/automanual/new/6-22-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-22-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-23.md) - - - -[ページトップへ](6-22-2.md) - -### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON - -図6-63-GOTO DEPENDING ON構文 - -![alt text](Image/6-63-Goto.png) - -文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 - -1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 - -2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 - -3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 - -4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 - - 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE - - ![alt text](Image/6-64-Goto.png) - - 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 - diff --git a/automanual/new/6-23.md b/automanual/new/6-23.md deleted file mode 100644 index be4e70b..0000000 --- a/automanual/new/6-23.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-22-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-24.md) - - - -[ページトップへ](6-23.md) - -## 6.23. IF - -図6-65-IF構文 - -![alt text](Image/6-65-If.png) - -IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 - -1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 - diff --git a/automanual/new/6-24.md b/automanual/new/6-24.md deleted file mode 100644 index d1d4ce6..0000000 --- a/automanual/new/6-24.md +++ /dev/null @@ -1,43 +0,0 @@ - -[前へ](6-23.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-25.md) - - - -[ページトップへ](6-24.md) - -## 6.24. INITIALIZE - -図6-66-INITIALIZE構文 - -![alt text](Image/6-66-Initialize.png) - -INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 - -1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 - - - 一意名-1として指定されたすべての基本項目。 - - - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: - - - USAGE INDEX項目は除外される。 - - - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 - - 以上は受け取り項目のリストである。 - -2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 - -3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 - -4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 - -5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 - -6. 各受け取り項目の初期化は、以下のルールに従って行われる。 - - - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 - - - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 - - - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 - diff --git a/automanual/new/6-25.md b/automanual/new/6-25.md deleted file mode 100644 index 1b48ec5..0000000 --- a/automanual/new/6-25.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-24.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-26.md) - - - -[ページトップへ](6-25.md) - -## 6.25. INITIATE - -図6-67-INITIATE構文 - -![alt text](Image/6-67-Initiate.png) - -INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - diff --git a/automanual/new/6-26.md b/automanual/new/6-26.md deleted file mode 100644 index 488e7e9..0000000 --- a/automanual/new/6-26.md +++ /dev/null @@ -1,88 +0,0 @@ - -[前へ](6-25.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-27.md) - - - -[ページトップへ](6-26.md) - -## 6.26. INSPECT - -図6-68-INSPECT構文 - -![alt text](Image/6-68-Inspect.png) - -INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 - -1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 - -2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 - -3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 - -INSPECT文のルールは、指定された句によって異なる。 - -**TALLYING句の場合:** - -TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 - -1. 一意名-2は編集不可の数値項目でなければならない。 - -2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 - -3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 - - a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 - -4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 - - 図6-69-INSPECT文TALLYING句の例
- ![alt text](Image/6-69-Inspect.png) - - 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない - -**REPLACING句の場合:** - -REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 - -1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 - -3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 - -5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -6. ターゲット文字列は次のように識別できる: - - a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - -7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 - -**CONVERTING句の場合:** - -CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 - -1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 - -3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 - -4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 - -6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 - -8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 - diff --git a/automanual/new/6-27.md b/automanual/new/6-27.md deleted file mode 100644 index ea7943f..0000000 --- a/automanual/new/6-27.md +++ /dev/null @@ -1,56 +0,0 @@ - -[前へ](6-26.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-1.md) - - - -[ページトップへ](6-27.md) - -## 6.27. MERGE - -図6-70-MERGE構文 - -![alt text](Image/6-70-Merge.png) - -MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 - -1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 - -2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 - -3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 - -5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 - - MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 - -6. USING句で指定されたファイルには、以下のルールが適用される。 - - a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 - - b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 - - c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 - -7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 - -8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 - -9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 - -10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 - -11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 - -12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 - -13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** - -14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 - -15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 - ---- -`21` [4.2.2](4-2-2.md)参照。 - diff --git a/automanual/new/6-28-1.md b/automanual/new/6-28-1.md deleted file mode 100644 index 3cfc743..0000000 --- a/automanual/new/6-28-1.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-27.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-2.md) - - - -[ページトップへ](6-28-1.md) - -## 6.28. MOVE - -### 6.28.1. MOVE文の書き方1 ― MOVE - -図6-71-MOVE構文 - -![alt text](Image/6-71-Move.png) - -特定の値を一つ以上の受け取りデータ項目に移動することができる。 - -1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 - -2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 - diff --git a/automanual/new/6-28-2.md b/automanual/new/6-28-2.md deleted file mode 100644 index d191f25..0000000 --- a/automanual/new/6-28-2.md +++ /dev/null @@ -1,91 +0,0 @@ - -[前へ](6-28-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-1.md) - - - -[ページトップへ](6-28-2.md) - -### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING - -図6-72-MOVE CORRESPONDING構文 - -![alt text](Image/6-72-Move.png) - -同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 - -1. CORRESPONDINGという単語は、CORRと省略される場合がある。 - -2. 一意名-1と一意名-2の両方が集団項目でなければならない。 - -3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: - - a. どちらも同じ名前ではあるがFILLERではない。 - - b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 - - c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 - - d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 - - e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 - -4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 - -この規則は、以下の例題を使うとよく理解できる。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. corrdemo. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 X. - 05 A VALUE 'A' PIC X(1). - 05 G1. - 10 G2. - 15 B VALUE 'B' PIC X(1). - 05 C. - 10 FILLER VALUE 'C' PIC X(1). - 05 G3. - 10 G4. - 15 D VALUE 'D' PIC X(1). - 05 V1 VALUE 'E' PIC X(1). - 05 E REDEFINES V1 PIC X(1). - 05 F VALUE 'F' PIC X(1). - 05 G VALUE ALL 'G'. - 10 G2 OCCURS 4 TIMES PIC X(1). - 05 H VALUE ALL 'H' PIC X(4). - 01 Y. - 02 A PIC X(1). - 02 G1. - 03 G2. - 04 B PIC X(1). - 02 C PIC X(1). - 02 G3. - 03 G5. - 04 D PIC X(1). - 02 E PIC X(1). - 02 V2 PIC X(1). - 02 G PIC X(4). - 02 H OCCURS 4 TIMES PIC X(1). - 66 F RENAMES V2. - PROCEDURE DIVISION. - 100-Main. - MOVE ALL '-' TO Y. - DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. - DISPLAY 'Before: ' Y. - MOVE CORR X TO Y. - DISPLAY ' After: ' Y. - STOP RUN - -DISPLAY文で表示される結果は以下の通りである。 - - Names: ABCDEFGGGGHHHH - Before: -------------- - After: ABC---GGGG---- - -- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 -- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 -- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 -- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 -- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 -- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 - diff --git a/automanual/new/6-29-1.md b/automanual/new/6-29-1.md deleted file mode 100644 index ddba627..0000000 --- a/automanual/new/6-29-1.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-28-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-2.md) - - - -[ページトップへ](6-29-1.md) - -## 6.29. MULTIPLY - -### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY - -図6-73-MULTIPLY BY構文 - -![alt text](Image/6-73-Multiply.png) - -算術積を実行する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. それぞれ一意名-2を掛けた一意名-1またはinteger-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - diff --git a/automanual/new/6-29-2.md b/automanual/new/6-29-2.md deleted file mode 100644 index 872dde0..0000000 --- a/automanual/new/6-29-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-29-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-30.md) - - - -[ページトップへ](6-29-2.md) - -### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING - -図6-74-MULTIPLY GIVING構文 - -![alt text](Image/6-74-Multiply.png) - -二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. 一意名-1および一意名-2の値は変更できない。 - -5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - diff --git a/automanual/new/6-3.md b/automanual/new/6-3.md deleted file mode 100644 index b59c71b..0000000 --- a/automanual/new/6-3.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-1.md) - - - -[ページトップへ](6-3.md) - -## 6.3. 宣言の記述形式 - -図6-17-宣言構文 - -![alt text](Image/6-17.png) - -プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 - -1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 - -2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 - -4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 - -5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 - diff --git a/automanual/new/6-30.md b/automanual/new/6-30.md deleted file mode 100644 index 3e69f06..0000000 --- a/automanual/new/6-30.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-29-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-31.md) - - - -[ページトップへ](6-30.md) - -## 6.30. NEXT SENTENCE - -図6-75-NEXT SENTENCE構文 - -![alt text](Image/6-75-Nextsentnce.png) - -NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 - -1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 - -2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 - -3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 - -4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 - diff --git a/automanual/new/6-31.md b/automanual/new/6-31.md deleted file mode 100644 index 5764f0d..0000000 --- a/automanual/new/6-31.md +++ /dev/null @@ -1,38 +0,0 @@ - -[前へ](6-30.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-1.md) - - - -[ページトップへ](6-31.md) - -## 6.31. OPEN - -図6-76-OPEN構文 - -![alt text](Image/6-76-Open.png) - -OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 - -1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 - -2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 - -3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 - -4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 - - | オプション | 処理 | - | --- | --- | - | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | - | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | - | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - -5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 - -6. WITH NO REWIND句とWITH LOCK句は機能しない。 - - WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 - - WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 - diff --git a/automanual/new/6-32-1.md b/automanual/new/6-32-1.md deleted file mode 100644 index 6b86350..0000000 --- a/automanual/new/6-32-1.md +++ /dev/null @@ -1,71 +0,0 @@ - -[前へ](6-31.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-2.md) - - - -[ページトップへ](6-32-1.md) - -## 6.32. PERFORM - -### 6.32.1. PERFORM文の書き方1 ― 手続き型 - -図6-77-手続き型PERFORM構文 - -![alt text](Image/6-77-Perform.png) - -制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 - -1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 - -2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 - -3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 -4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 - -5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 - -6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 - -7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 - -8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 - -9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 - -10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 - -11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 - - - 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 - - ![alt text](Image/6-32-1-1.png) - - ``` - 01 PERFORM-DEMO. - 05 PD-ROW OCCURS 3 TIMES. - 10 PD-COL OCCURS 4 TIMES. - 15 PD PIC X(1). - 01 PD-Col-No PIC 9 COMP. - 01 PD-Row-No PIC 9 COMP. - ``` - ![alt text](Image/6-32-1-2.png) - - ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 - PERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 - AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. - ``` - ![alt text](Image/6-32-1-3.png) - - 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. - ``` - diff --git a/automanual/new/6-32-2.md b/automanual/new/6-32-2.md deleted file mode 100644 index 3c1501d..0000000 --- a/automanual/new/6-32-2.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-32-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-1.md) - - - -[ページトップへ](6-32-2.md) - -### 6.32.2. PERFORM文の書き方2 ― インライン型 - -図6-78-インライン型PERFORM構文 - -![alt text](Image/6-78-Perform.png) - -PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 - -1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 - -2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 - diff --git a/automanual/new/6-33-1.md b/automanual/new/6-33-1.md deleted file mode 100644 index b7df7fe..0000000 --- a/automanual/new/6-33-1.md +++ /dev/null @@ -1,43 +0,0 @@ - -[前へ](6-32-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-2.md) - - - -[ページトップへ](6-33-1.md) - -## 6.33. READ - -### 6.33.1. READ文の書き方1 ― 順次読み取り - -図6-79-READ構文(順次読み取り) - -![alt text](Image/6-79-Read.png) - -ファイルから次の(または前の)レコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 - -5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 - -7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 - -8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 - -11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 - diff --git a/automanual/new/6-33-2.md b/automanual/new/6-33-2.md deleted file mode 100644 index 9be3f9a..0000000 --- a/automanual/new/6-33-2.md +++ /dev/null @@ -1,51 +0,0 @@ - -[前へ](6-33-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-34.md) - - - -[ページトップへ](6-33-2.md) - -### 6.33.2. READ文の書き方2 ― ランダム読み取り - -図6-80-READ構文(ランダム読み取り) - -![alt text](Image/6-80-Read.png) - -ファイルから任意のレコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 - -5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 - - KEY句がない場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 - - KEY句が指定されている場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 - -6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 - -10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 - diff --git a/automanual/new/6-34.md b/automanual/new/6-34.md deleted file mode 100644 index 3d843eb..0000000 --- a/automanual/new/6-34.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-33-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-35.md) - - - -[ページトップへ](6-34.md) - -## 6.34. RELEASE - -図6-81-RELEASE構文 - -![alt text](Image/6-81-Release.png) - -RELEASE文は、整列ファイルに新しいレコードを追加する。 - -1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 - -2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 - diff --git a/automanual/new/6-35.md b/automanual/new/6-35.md deleted file mode 100644 index 881f31c..0000000 --- a/automanual/new/6-35.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-34.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-36.md) - - - -[ページトップへ](6-35.md) - -## 6.35. RETURN - -図6-82-RETURN構文 - -![alt text](Image/6-82-Return.png) - -RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 - -1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 - -2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 - -3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 - diff --git a/automanual/new/6-36.md b/automanual/new/6-36.md deleted file mode 100644 index efec47a..0000000 --- a/automanual/new/6-36.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](6-35.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-37.md) - - - -[ページトップへ](6-36.md) - -## 6.36. REWRITE - -図6-83-REWRITE構文 - -![alt text](Image/6-83-Rewrite.png) - -REWRITE文は、ディスクファイル上の論理レコードを置き換える。 - -1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 - -2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 - -3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 - -4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 - -6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: - - a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 - - b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 - -7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: - - a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 - - b. レコード名-1のサイズは更新される可能性がある。 - -8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 - -9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 - diff --git a/automanual/new/6-37.md b/automanual/new/6-37.md deleted file mode 100644 index cfb32f0..0000000 --- a/automanual/new/6-37.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-36.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-1.md) - - - -[ページトップへ](6-37.md) - -## 6.37. ROLLBACK - -図6-84-ROLLBACK構文 - -![alt text](Image/6-84-Rollback.png) - -ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 - -1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 - diff --git a/automanual/new/6-38-1.md b/automanual/new/6-38-1.md deleted file mode 100644 index 969dacb..0000000 --- a/automanual/new/6-38-1.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](6-37.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-2.md) - - - -[ページトップへ](6-38-1.md) - -## 6.38. SEARCH - -### 6.38.1. SEARCH文の書き方1 ― 順次探索 - -図6-85-SEARCH構文(順次探索) - -![alt text](Image/6-85-Search.png) - -SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 - -1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 - -2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 - -3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: - ``` - SET 指標名-1 TO 1 - ``` -4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 - -5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 - -6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 - -7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 -  diff --git a/automanual/new/6-38-2.md b/automanual/new/6-38-2.md deleted file mode 100644 index b7ddbc3..0000000 --- a/automanual/new/6-38-2.md +++ /dev/null @@ -1,68 +0,0 @@ - -[前へ](6-38-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-1.md) - - - -[ページトップへ](6-38-2.md) - -### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) - -図6-86-SEARCH構文(二分探索) - -![alt text](Image/6-86-Search.png) - -整列されたテーブルに対して二分探索を実行する。 - -1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 - -2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 - - a. テーブルは上記1項の要件を満たしている。 - - b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` - - c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 - - aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 - -3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 - -4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 - -5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 - -6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 - -7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 - -8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` - - a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 - - b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 - - - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 - - - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 - - - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 - - c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 - - d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 - -上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 - -コンピュータ研究者は、二つの探索方法を次のように比較する: - -- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 - -- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 - -探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 - ---- -`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 - -`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 - diff --git a/automanual/new/6-39-1.md b/automanual/new/6-39-1.md deleted file mode 100644 index b4e9faa..0000000 --- a/automanual/new/6-39-1.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-38-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-2.md) - - - -[ページトップへ](6-39-1.md) - -## 6.39. SET - -### 6.39.1. SET文の書き方1 ― 環境設定 - -図6-87-SET構文(環境設定) - -![alt text](Image/6-87-Set.png) - -プログラム内から環境値を簡単に設定することができる。 - -1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 - -2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 - - DSIPLAY SET ENVIRONMENT “VARNAME” TO - "VALUE" - “VARNAME” UPON ENVIRONMENT-NAME - END-DISPLAY - DSIPLAY - “VALUE” UPON ENVIRONMENT-VALUE - END-DISPLAY - diff --git a/automanual/new/6-39-2.md b/automanual/new/6-39-2.md deleted file mode 100644 index 92f09ae..0000000 --- a/automanual/new/6-39-2.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-39-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-3.md) - - - -[ページトップへ](6-39-2.md) - -### 6.39.2. SET文の書き方2 ― プログラムポインター設定 - -図6-88-SET構文(プログラムポインター設定) - -![alt text](Image/6-88-Set.png) - -手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 - -1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 - -2. program-pointer-1はプログラムポインターとして使用しなければならない。 - -3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 - -4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 - diff --git a/automanual/new/6-39-3.md b/automanual/new/6-39-3.md deleted file mode 100644 index 886b8b0..0000000 --- a/automanual/new/6-39-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-39-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-4.md) - - - -[ページトップへ](6-39-3.md) - -### 6.39.3. SET文の書き方3 ― アドレス設定 - -図6-89-SET構文(アドレス設定) - -![alt text](Image/6-89-Set.png) - -データ項目の内容ではなく、アドレスを処理するために使われる。 - -1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 - -2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 - diff --git a/automanual/new/6-39-4.md b/automanual/new/6-39-4.md deleted file mode 100644 index eff9259..0000000 --- a/automanual/new/6-39-4.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-39-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-5.md) - - - -[ページトップへ](6-39-4.md) - -### 6.39.4. SET文の書き方4 ― インデックス設定 - -図6-90-SET構文(インデックス設定) - -![alt text](Image/6-90-Set.png) - -USAGE INDEXデータ項目に値を割り当てる。 - -1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 - diff --git a/automanual/new/6-39-5.md b/automanual/new/6-39-5.md deleted file mode 100644 index d96d07e..0000000 --- a/automanual/new/6-39-5.md +++ /dev/null @@ -1,18 +0,0 @@ - -[前へ](6-39-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-6.md) - - - -[ページトップへ](6-39-5.md) - -### 6.39.5. SET文の書き方5 ― UP/DOWN設定 - -図6-91-SET構文(UP/DOWN設定) - -![alt text](Image/6-91-Set.png) - -インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 - -1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 - -2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 diff --git a/automanual/new/6-39-6.md b/automanual/new/6-39-6.md deleted file mode 100644 index 63a14ad..0000000 --- a/automanual/new/6-39-6.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-39-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-7.md) - - - -[ページトップへ](6-39-6.md) - -### 6.39.6. SET文の書き方6 ― 条件名設定 - -図6-92-SET構文(条件名設定) - -![alt text](Image/6-92-Set.png) - -レベル88条件名のTRUE/FALSE値を指定することができる。 - -1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 - -2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 - -3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 - diff --git a/automanual/new/6-39-7.md b/automanual/new/6-39-7.md deleted file mode 100644 index 0cf8058..0000000 --- a/automanual/new/6-39-7.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-39-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-1.md) - - - -[ページトップへ](6-39-7.md) - -### 6.39.7. SET文の書き方7 ― スイッチ設定 - -図6-93-SET構文(スイッチ設定) - -![alt text](Image/6-93-Set.png) - -スイッチをオンまたはオフにする。 - -1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 - diff --git a/automanual/new/6-4-1.md b/automanual/new/6-4-1.md deleted file mode 100644 index ee5b837..0000000 --- a/automanual/new/6-4-1.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-2.md) - - - -[ページトップへ](6-4-1.md) - -## 6.4. ACCEPT - -### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り - -図6-18-ACCEPT構文(コンソールからの読み取り) - -![alt text](Image/6-18.png) - -コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 - -1. FROM句を使う場合、指定するニーモニック名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義のニーモニック名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 - -2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 - diff --git a/automanual/new/6-4-2.md b/automanual/new/6-4-2.md deleted file mode 100644 index dcfe801..0000000 --- a/automanual/new/6-4-2.md +++ /dev/null @@ -1,32 +0,0 @@ - -[前へ](6-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-3.md) - - - -[ページトップへ](6-4-2.md) - -### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 - -図6-19-ACCEPT構文(コマンドライン引数) - -![alt text](Image/6-19.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 - -2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 - - - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 - - - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 - - - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 - -3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 - -4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 - diff --git a/automanual/new/6-4-3.md b/automanual/new/6-4-3.md deleted file mode 100644 index 57fc778..0000000 --- a/automanual/new/6-4-3.md +++ /dev/null @@ -1,24 +0,0 @@ - -[前へ](6-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-4.md) - - - -[ページトップへ](6-4-3.md) - -### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 - -図6-20-ACCEPT構文(環境変数値の取得) - -![alt text](Image/6-20.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 - -2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 - -3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 - diff --git a/automanual/new/6-4-4.md b/automanual/new/6-4-4.md deleted file mode 100644 index 3c6a356..0000000 --- a/automanual/new/6-4-4.md +++ /dev/null @@ -1,27 +0,0 @@ - -[前へ](6-4-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-5.md) - - - -[ページトップへ](6-4-4.md) - -### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 - -図6-21-ACCEPT構文(画面データの取得) - -![alt text](Image/6-21.png) - -画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 - -1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 - -2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 - -4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 - -5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 - -6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - diff --git a/automanual/new/6-4-5.md b/automanual/new/6-4-5.md deleted file mode 100644 index ed3515a..0000000 --- a/automanual/new/6-4-5.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-4-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-6.md) - - - -[ページトップへ](6-4-5.md) - -### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 - -図6-22-ACCEPT構文(日付/時刻の取得)構文 - -![alt text](Image/6-22.png) - -システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 - -1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 - - 表6-23-ACCEPTオプション(日付/時刻の取得) - - ![!\[alt text\](Image/6-23.png)](Image/6-23.png) - diff --git a/automanual/new/6-4-6.md b/automanual/new/6-4-6.md deleted file mode 100644 index c56d5d9..0000000 --- a/automanual/new/6-4-6.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-4-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-7.md) - - - -[ページトップへ](6-4-6.md) - -### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 - -図6-24-ACCEPT(画面サイズデータの取得)構文 - -![alt text](Image/6-24.png) - -プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 - -1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 - diff --git a/automanual/new/6-4-7.md b/automanual/new/6-4-7.md deleted file mode 100644 index d056bff..0000000 --- a/automanual/new/6-4-7.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-4-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-1.md) - - - -[ページトップへ](6-4-7.md) - -### 6.4.7. ACCEPT文の例外処理 - -図6-25-ACCEPT例外処理構文 - -![alt text](Image/6-25.png) - -ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 - diff --git a/automanual/new/6-40-1.md b/automanual/new/6-40-1.md deleted file mode 100644 index dcb7d37..0000000 --- a/automanual/new/6-40-1.md +++ /dev/null @@ -1,89 +0,0 @@ - -[前へ](6-39-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-2.md) - - - -[ページトップへ](6-40-1.md) - -## 6.40. SORT - -### 6.40.1. SORT文の書き方1 ― ファイルソート - -図6-94-SORT構文(ファイルソート) - -![alt text](Image/6-94-Sort.png) - -一つ以上のキー項目に従って、大量のデータを整列することができる。 - -1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 - -2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 - -3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 - -6. SORT文は次の3段階の働きがある。 - - ステージ1(入力フェーズ): - - a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 - - b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 - - c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 - - d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 - - e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 - - g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 - - h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 - - ステージ2(ソートフェーズ): - - a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - - b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 - - SORT Sort-File - ASCENDING KEY Transaction-Date - ASCENDING KEY Account-Number - DESCENDING KEY Transaction-Amount - . - . - . - - - このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 - - c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 - - ステージ3(出力フェーズ): - - a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 - - b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 - - c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 - - d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 - - e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 - - g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 - -7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 - ---- -`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 - -`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 - diff --git a/automanual/new/6-40-2.md b/automanual/new/6-40-2.md deleted file mode 100644 index 1fd73d1..0000000 --- a/automanual/new/6-40-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-40-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-41.md) - - - -[ページトップへ](6-40-2.md) - -### 6.40.2. SORT文の書き方2 ― テーブルソート - -図6-95-SORT構文(テーブルソート) - -![alt text](Image/6-95-Set.png) - -一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 - -1. テーブル名データ項目には、OCCURS句が必要である。 - -2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 - -3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 - -5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 - -6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - -7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 - diff --git a/automanual/new/6-41.md b/automanual/new/6-41.md deleted file mode 100644 index 8950d46..0000000 --- a/automanual/new/6-41.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](6-40-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-42.md) - - - -[ページトップへ](6-41.md) - -## 6.41. START - -図6-96-START構文 - -![alt text](Image/6-96-Start.png) - -START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 - -1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 - -2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 - -3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 - -4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 - -5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 - -6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 - -7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 - - a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 - - b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 - -8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 - -9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 - -10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 - -11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 - diff --git a/automanual/new/6-42.md b/automanual/new/6-42.md deleted file mode 100644 index 6da445a..0000000 --- a/automanual/new/6-42.md +++ /dev/null @@ -1,26 +0,0 @@ - -[前へ](6-41.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-43.md) - - - -[ページトップへ](6-42.md) - -## 6.42. STOP - -図6-97-STOP構文 - -![alt text](Image/6-97-Stop.png) - -STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 - -1. RETURNING句とGIVING句は同意義のものとして利用できる。 - -2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 - -3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 - -4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: - - STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE - STOP RUN - diff --git a/automanual/new/6-43.md b/automanual/new/6-43.md deleted file mode 100644 index 81672e3..0000000 --- a/automanual/new/6-43.md +++ /dev/null @@ -1,37 +0,0 @@ - -[前へ](6-42.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-1.md) - - - -[ページトップへ](6-43.md) - -## 6.43. STRING - -図6-98-STRING構文 - -![alt text](Image/6-98-String.png) - -STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 - -1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 - -2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 - -3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 - -4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 - -5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 - -6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 - -7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 - -8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 - -9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 - -10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 - -11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 - diff --git a/automanual/new/6-44-1.md b/automanual/new/6-44-1.md deleted file mode 100644 index 1fe0ad2..0000000 --- a/automanual/new/6-44-1.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-43.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-2.md) - - - -[ページトップへ](6-44-1.md) - -## 6.44. SUBTRACT - -### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM - -図6-99-SUBSTRACT構文 - -![alt text](Image/6-99-Subtract.png) - -FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/new/6-44-2.md b/automanual/new/6-44-2.md deleted file mode 100644 index 448727a..0000000 --- a/automanual/new/6-44-2.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-44-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-3.md) - - - -[ページトップへ](6-44-2.md) - -### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING - -図6-100-SUBSTRACT GIVING構文 - -![alt text](Image/6-100-Subtract.png) - -FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/new/6-44-3.md b/automanual/new/6-44-3.md deleted file mode 100644 index a7953d2..0000000 --- a/automanual/new/6-44-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-44-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-45.md) - - - -[ページトップへ](6-44-3.md) - -### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING - -図6-101-SUBSTRACT CORRESPONDING構文 - -![alt text](Image/6-101-Subtract.png) - -二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 - -1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/new/6-45.md b/automanual/new/6-45.md deleted file mode 100644 index d12344c..0000000 --- a/automanual/new/6-45.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-44-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-46.md) - - - -[ページトップへ](6-45.md) - -## 6.45. SUPPRESS - -図6-102-SUPPRESS構文 - -![alt text](Image/6-102-Suppress.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 - diff --git a/automanual/new/6-46.md b/automanual/new/6-46.md deleted file mode 100644 index 8886329..0000000 --- a/automanual/new/6-46.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-45.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-47.md) - - - -[ページトップへ](6-46.md) - -## 6.46. TERMINATE - -図6-103-TERMINATE構文 - -![alt text](Image/6-103-Terminate.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 - diff --git a/automanual/new/6-47.md b/automanual/new/6-47.md deleted file mode 100644 index a0ccd05..0000000 --- a/automanual/new/6-47.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](6-46.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-48.md) - - - -[ページトップへ](6-47.md) - -## 6.47. TRANSFORM - -図6-104-TRANSFORM構文 - -![alt text](Image/6-104-Transform.png) - -TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 - -1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 - -2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 - -3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 - -4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 - -5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 - - 図6-105-機能的なTRANSFORM文 - - ![alt text](Image/6-105-Transform.png) - diff --git a/automanual/new/6-48.md b/automanual/new/6-48.md deleted file mode 100644 index e6fe49d..0000000 --- a/automanual/new/6-48.md +++ /dev/null @@ -1,22 +0,0 @@ - -[前へ](6-47.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-49.md) - - - -[ページトップへ](6-48.md) - -## 6.48. UNLOCK - -図6-106-UNLOCK構文 - -![alt text](Image/6-106-Unlock.png) - -この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 - -1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 - -2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 - ---- -`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 - diff --git a/automanual/new/6-49.md b/automanual/new/6-49.md deleted file mode 100644 index eff9662..0000000 --- a/automanual/new/6-49.md +++ /dev/null @@ -1,68 +0,0 @@ - -[前へ](6-48.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-50.md) - - - -[ページトップへ](6-49.md) - -## 6.49. UNSTRING - -図6-107-UNSTRING構文 - -![alt text](Image/6-107-Unstring.png) - -UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 - -1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 - -2. 定数-1および定数-2は、英数字の定数でなければならない。 - -3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 - -4. 一意名-10の値は0より大きい必要がある。 - -5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 - -6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 - -7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 - -8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 - -9. ソース文字列が部分文字列に解析される例を次に示す: - - ![alt text](Image/6-49-1.png) - - 図6-108-STRING文の例 - - ![alt text](Image/6-108-Unstring.png) - - 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 - - ![alt text](Image/6-49-2.png) - - すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 - - すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 - -10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-3.png) - -11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-4.png) - -12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 - -13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 - -14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 - -15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 - ---- -`27` 空白文字列のMOVEは、空白のMOVEと同じである。 - -`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 - diff --git a/automanual/new/6-5-1.md b/automanual/new/6-5-1.md deleted file mode 100644 index 3c29b70..0000000 --- a/automanual/new/6-5-1.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](6-4-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-2.md) - - - -[ページトップへ](6-5-1.md) - -## 6.5. ADD - -### 6.5.1. ADD文の書き方1 ― ADD TO - -図6-26-ADD TO構文 - -![alt text](Image/6-26.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 - -4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 - -5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 - - 図6-27-ON SIZE ERROR句を使用するサンプルプログラム - - ![alt text](Image/6-27.png) - -6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 - diff --git a/automanual/new/6-5-2.md b/automanual/new/6-5-2.md deleted file mode 100644 index 2962ecd..0000000 --- a/automanual/new/6-5-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-3.md) - - - -[ページトップへ](6-5-2.md) - -### 6.5.2. ADD文の書き方2 ― ADD GIVING - -図6-28-ADD GIVING構文 - -![alt text](Image/6-28.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. 一意名-2の内容は変更できない。 - -5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - diff --git a/automanual/new/6-5-3.md b/automanual/new/6-5-3.md deleted file mode 100644 index 59526e1..0000000 --- a/automanual/new/6-5-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-6.md) - - - -[ページトップへ](6-5-3.md) - -### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING - -図6-29-ADD CORRESPONDING構文 - -![alt text](Image/6-29.png) - -二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 - -1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - diff --git a/automanual/new/6-50.md b/automanual/new/6-50.md deleted file mode 100644 index cdd5347..0000000 --- a/automanual/new/6-50.md +++ /dev/null @@ -1,88 +0,0 @@ - -[前へ](6-49.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-1.md) - - - -[ページトップへ](6-50.md) - -## 6.50. WRITE - -図6-109-WRITE構文 - -![alt text](Image/6-109-Write.png) - -WRITE文は、OPENファイルに新しいレコードを書き込む。 - -1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 - -2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 - -3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 - -4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 - -5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 - -6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 - -7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 - -8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 - -9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 - -10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 - -11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 - -12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 - -13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: - - a. AFTER ADVANCINGが指定されている場合: - - - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - c. BEFORE ADVANCINGが指定されている場合: - - - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 - - - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 - -14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 - - FD Report-File - LINAGE IS 66 LINES - ........WITH FOOTER AT 57 - ........LINES AT TOP 3 - ........LINES AT BOTTOM 3 - . - . - . - OPEN OUTPUT Report-File - PERFORM Generate-Page-Header - . - . - . - WRITE Report-Rec AFTER ADVANCING 1 LINE - AT END-OF-PAGE PERFORM Generate-Page-Header - END-WRITE - . - . - . - CLOSE Report-File - -15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 - -16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 - -17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 - diff --git a/automanual/new/6-6.md b/automanual/new/6-6.md deleted file mode 100644 index fbdb325..0000000 --- a/automanual/new/6-6.md +++ /dev/null @@ -1,49 +0,0 @@ - -[前へ](6-5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-7.md) - - - -[ページトップへ](6-6.md) - -## 6.6. ALLOCATE - -図6-30-ALLOCATE構文 - -![alt text](Image/6-30.png) - -ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 - -1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 - -2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 - -3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 - -4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 - -5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 -6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 - -7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 - -8. 基本的な使用法は二つあり、最も単純なものは次の例である。 - - ALLOCATE My-01-Item - - `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 - - 二つ目の使用法は以下の通りである。 - - ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. - - SET ADDRESS OF My-01-Item TO The-Pointer. - - ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 - - 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 - -9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 - ---- -`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 - diff --git a/automanual/new/6-7.md b/automanual/new/6-7.md deleted file mode 100644 index 3f9934d..0000000 --- a/automanual/new/6-7.md +++ /dev/null @@ -1,54 +0,0 @@ - -[前へ](6-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-1.md) - - - -[ページトップへ](6-7.md) - -## 6.7. CALL - -図6-31-CALL構文 - -![alt text](Image/6-31.png) - -CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 - -1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 - -2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 - -3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 - -4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 - -5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 - -6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 - -7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 - -8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 - -9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 - -10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 - -11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 - - 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) - - ![alt text](Image/6-32.png) - -12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 - - 図6-33-CALL BY VALUE句 - - ![alt text](Image/6-33.png) - -13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 - -14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 - ---- -`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 - diff --git a/automanual/new/6-8-1.md b/automanual/new/6-8-1.md deleted file mode 100644 index 243b792..0000000 --- a/automanual/new/6-8-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-2.md) - - - -[ページトップへ](6-8-1.md) - -## 6.8. CANSEL - -### 6.8.1. CANCEL文の書き方1 ― CANCEL - -図6-34-CANCEL構文 - -![alt text](Image/6-34.png) - -CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 - -1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 - diff --git a/automanual/new/6-8-2.md b/automanual/new/6-8-2.md deleted file mode 100644 index bad41d5..0000000 --- a/automanual/new/6-8-2.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-9.md) - - - -[ページトップへ](6-8-2.md) - -### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL - -図6-35-CANCEL ALL構文 - -![alt text](Image/6-35(cancel).png) - -CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 - diff --git a/automanual/new/6-9.md b/automanual/new/6-9.md deleted file mode 100644 index 33e46a8..0000000 --- a/automanual/new/6-9.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-10.md) - - - -[ページトップへ](6-9.md) - -## 6.9. CLOSE - -図6-36-CLOSE構文 - -![alt text](Image/6-36-CLOSE.png) - -CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 - -1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 - -2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 - -3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 - -4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 - -5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 - -6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 - -7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 - diff --git a/automanual/new/7-1.md b/automanual/new/7-1.md deleted file mode 100644 index 2aba68f..0000000 --- a/automanual/new/7-1.md +++ /dev/null @@ -1,27 +0,0 @@ - -[前へ](6-50.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-2.md) - - - -[ページトップへ](7-1.md) - -# 7. 日本語の使用 - -日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 - -## 7.1. 英数字項目の日本語 - -文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 - - - 01 データ項目1 PIC X(8) VALUE"顧客code" - - 01 データ項目2 PIC X(10) VALUE"顧客コード" - -データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 - -注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 - -1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 -2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) - diff --git a/automanual/new/7-2.md b/automanual/new/7-2.md deleted file mode 100644 index 5bd25bc..0000000 --- a/automanual/new/7-2.md +++ /dev/null @@ -1,20 +0,0 @@ - -[前へ](7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-1.md) - - - -[ページトップへ](7-2.md) - -## 7.2. 日本語項目と表意定数 - -日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 - -表7-1-日本語項目と表意定数の値 - -| 表意定数 | シフトJISコード | -| --- | :--- | -| SPACE(S) | 日本語空白文字 X"8140" | -| HIGH-VALUE(S) | X"FFFF" | -| LOW-VALUE(S) | X"0000" | -| ALL 定数 | 定数の値に依存する | - diff --git a/automanual/new/7-3-1.md b/automanual/new/7-3-1.md deleted file mode 100644 index abd66fb..0000000 --- a/automanual/new/7-3-1.md +++ /dev/null @@ -1,56 +0,0 @@ - -[前へ](7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-2.md) - - - -[ページトップへ](7-3-1.md) - -## 7.3. 各命令文と日本語の取扱い - -### 7.3.1. MOVE文 - -MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 - -表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 - -表7-2-転記の処理方法 - -| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | -| :--- | :--- | :--- | -| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | -| 非整数 | 日本語,日本語編集 | コンパイルエラー | -| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 日本語,日本語編集 | 英字 | そのまま転記 | -| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | -| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | -| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | - -データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 - -文字には半角カタカナも含まれる。 - -ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 - -受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 - -表7-3-送出し側データ項目の内容に対する処理方法 - -| 送出し側データ項目の内容 | 処理方式 | -| --- | --- | -| 正しい文字 | 全角文字へコード変換 | -| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | -| 正しい日本語文字 | そのまま転記 | -| 不正な日本語文字(≠文字) | そのまま転記 | -| X”00” | X”0000”29 | -| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | -| X”FF” | X”FFFF” | -| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | - -ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 - ---- -`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 - diff --git a/automanual/new/7-3-2.md b/automanual/new/7-3-2.md deleted file mode 100644 index 265162b..0000000 --- a/automanual/new/7-3-2.md +++ /dev/null @@ -1,13 +0,0 @@ - -[前へ](7-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-4.md) - - - -[ページトップへ](7-3-2.md) - -### 7.3.2. ACCEPT/DISPLAY文 - -ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 - -日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 - diff --git a/automanual/new/7-4.md b/automanual/new/7-4.md deleted file mode 100644 index 1255f6e..0000000 --- a/automanual/new/7-4.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](7-3-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-1.md) - - - -[ページトップへ](7-4.md) - -## 7.4. UTF-8の使用 - -opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 - -1. PICTURE句において、「N」1つは3バイトと見なす。 - -2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 - -3. 空白詰めは半角空白で行われる。 - -4. STRING文において、項目の種類が混在した時のチェックを抑止する。 - diff --git a/automanual/new/8-1-1.md b/automanual/new/8-1-1.md deleted file mode 100644 index e4fafe6..0000000 --- a/automanual/new/8-1-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](7-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-2.md) - - - -[ページトップへ](8-1-1.md) - -# 8. opensource COBOLシステムインターフェース - -## 8.1. opensource COBOLコンパイラの使い方(cobc) - -### 8.1.1. 解説 - -プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 -プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 -空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 -opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 -opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 - diff --git a/automanual/new/8-1-2.md b/automanual/new/8-1-2.md deleted file mode 100644 index 6c9638f..0000000 --- a/automanual/new/8-1-2.md +++ /dev/null @@ -1,95 +0,0 @@ - -[前へ](8-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-3.md) - - - -[ページトップへ](8-1-2.md) - -### 8.1.2. コンパイルオプション - -次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 - - 使い方: cobc [options] file... - オプション: - --help このメッセージを表示します - --version, -V コンパイラのバージョンを表示します - -v コンパイラが起動したプログラムを表示します - -x 実行可能プログラムをビルドします - -m 動的ロード可能モジュールをビルドします(デフォルト) - -std=<方言> 指定した方言に基づいて警告/機能します : - cobol2002 Cobol 2002 - cobol85 Cobol 85 - ibm IBM互換 - mvs MVS互換 - bs2000 BS2000互換 - mf Micro Focus互換 - default 指定しない - config/default.conf および config/*.conf を参照してください - -free 自由形式を使用します - -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します - -fixed 固定形式を使用します(デフォルト) - -O, -O2, -Os 最適化を有功にします - -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします - -debug すべての実行時エラーチェックを有功にします - -o <ファイル> 出力先を <ファイル> にします - -b すべての入力ファイルをひとつに結合します - 動的ロード可能モジュール - -E 前処理のみ; コンパイルやリンクを行いません - -C トランスレートのみ; COBOL から C へ変換します - -S コンパイルのみ; アセンブリファイルを出力します - -c コンパイルとアセンブルを行い、リンクを行いません - -t <ファイル> プログラムリストを <ファイル> に生成します - -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます - -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます - -l ライブラリ をリンクします - -B Cコンパイルフェーズに を追加します - -Q Cリンクフェーズに を追加します - -D Cコンパイラに を渡します - -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください - --list-reserved 予約語の一覧を表示します - --list-intrinsics 組み込み関数の一覧を表示します - --list-mnemonics 作成者語の一覧を表示します - -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) - -MT 依存関係リストで使用される対象ファイルを指定します - -MF <ファイル> 依存関係リストを <ファイル> に生成します - -ext 既定のファイル拡張子を追加します - -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします - -reference_check 実行時の参照チェックを有効にします - -constant(=) $IF 文で評価する定数名 に 値 を設定します - - -W すべての警告を有功にする - -Wall 以下を除くすべての警告を有功にする - -Wobsolete 廃要素が使われていれば警告する - -Warchaic 古い仕様が使われていれば警告する - -Wredefinition データ項目の再定義を警告する - -Wconstant 不適切な定数を警告する - -Wparentheses OR と AND が括弧なしで並んでいれば警告する - -Wstrict-typing タイプの不適合を厳密に警告する - -Wimplicit-define データ項目の再定義を警告する - -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する - (-Wall指定時は適用されません) - -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) - -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) - -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) - -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) - -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) - -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) - - -ftrace トレースコードの生成(実行された節/段落の追跡) - -ftraceall トレースコードの生成(実行された節/段落/文の追跡) - -fsyntax-only 文法チェックのみ。何も出力しない - -fdebugging-line デバッグ行(標識領域に'D')を有効にする - -fsource-location ソース行情報の生成(-debugか-gで有効) - -fimplicit-init Cobolラインタイム初期化の自動実行 - -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) - -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) - -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) - -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) - -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) - -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない - -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す - -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) - -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す - -[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 - diff --git a/automanual/new/8-1-3.md b/automanual/new/8-1-3.md deleted file mode 100644 index 5104825..0000000 --- a/automanual/new/8-1-3.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](8-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-4.md) - - - -[ページトップへ](8-1-3.md) - -### 8.1.3. 実行可能プログラムのコンパイル - -最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 - - cobc –x prog1.cbl prog2.cbl prog3.cbl - -メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 - -これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 - diff --git a/automanual/new/8-1-4.md b/automanual/new/8-1-4.md deleted file mode 100644 index a958219..0000000 --- a/automanual/new/8-1-4.md +++ /dev/null @@ -1,42 +0,0 @@ - -[前へ](8-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-5.md) - - - -[ページトップへ](8-1-4.md) - -### 8.1.4. 動的にロード可能なサブプログラム - -実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 - - cobc –m sprog1.cbl -または - - cobc –m sprog1.cbl sprog2.cbl sprog3.cbl - -上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 - -次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 - -1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 - -2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 - -3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 - -4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき - - a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 - - b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 - - c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 - - - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 - - - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 - -5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 - -「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 - diff --git a/automanual/new/8-1-5.md b/automanual/new/8-1-5.md deleted file mode 100644 index 1fa0bdf..0000000 --- a/automanual/new/8-1-5.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](8-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-6.md) - - - -[ページトップへ](8-1-5.md) - -### 8.1.5. 静的サブルーチン - -opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 - - cobc –S sprog1.cbl - -(注:「**-S**」は大文字で表記する) - -これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 - -メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 - - cobc –x mainprog.cbl sprog1.s - -複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 - diff --git a/automanual/new/8-1-6.md b/automanual/new/8-1-6.md deleted file mode 100644 index 9af3ced..0000000 --- a/automanual/new/8-1-6.md +++ /dev/null @@ -1,139 +0,0 @@ - -[前へ](8-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-7.md) - - - -[ページトップへ](8-1-6.md) - -### 8.1.6. COBOLとCプログラムの結合 - -opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 - -#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 - -COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 - -#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い - -どちらの言語も、文字列を固定長の連続した文字順序として格納する。 - -COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: - - 01 LastName PIC X(15). - -USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 - -実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: - - char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ - -Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 - -#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 - -これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 - -表8-1-Cまたはopensource COBOLのデータ型の一致 - -| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | -| :--- | :--- | :--- | :--- | -|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | -| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | -| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | -| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| -| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | -| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | -| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | -| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | -|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | -|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | -|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | -| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | - - - - -同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 - -様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 - -#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し - -CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 - -図8-2-opensource COBOLのC呼び出し - -![alt text](Image/8-2.png) - -考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 - -COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 - -Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` - -これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - $ cc –c subc.c - $ cobc -x maincob.cbl subc.o - $ maincob - Starting cobmain - Starting subc - Arg1=Arg1 - Arg2=Arg2 - Arg3=123456789 - Back - Arg1=Arg1 - Arg2=Yrg2 - Arg3=+0987654321 - Returned value=+000000002 - $ - - - -null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 - -[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 - -#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し - -ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 - -図8-3-Cのopensource COBOL呼び出し - -![alt text](Image/8-3.png) - -Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 - -「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 - -Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 - -コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl - C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob - C:\Users\Gary\Documents\Programs> mainc.exe - Starting mainc... - Starting cobsub.cbl - Arg1=Arg1 - Arg2=Arg2 - Arg3=+0123456789 - Back - Arg1=Xrg1 - Arg2=Xrg2 - Arg3=987654321 - Returned value=2 - C:\Users\Gary\Documents\Programs> - - -第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 - -ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 - ---- -`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 - -`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 - -`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 - diff --git a/automanual/new/8-1-7.md b/automanual/new/8-1-7.md deleted file mode 100644 index b2ed12a..0000000 --- a/automanual/new/8-1-7.md +++ /dev/null @@ -1,36 +0,0 @@ - -[前へ](8-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-8.md) - - - -[ページトップへ](8-1-7.md) - -### 8.1.7. 重要な環境変数 - -次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 - -表8-4-環境変数コンパイラ - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | -| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | -| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | -| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | -|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | -| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | -| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | -| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | -| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | -| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | -| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | -|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | -|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | - ---- -`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 - diff --git a/automanual/new/8-1-8.md b/automanual/new/8-1-8.md deleted file mode 100644 index 87e655e..0000000 --- a/automanual/new/8-1-8.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](8-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-9.md) - - - -[ページトップへ](8-1-8.md) - -### 8.1.8. コンパイル時のコピーブックの検索 - -opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 - -- コンパイルされるプログラムが存在するフォルダ。 -- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 -- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 -- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 - -上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 - -- XXXXXXXX.CPY -- XXXXXXXX.CBL -- XXXXXXXX.COB -- XXXXXXXX.cpy -- XXXXXXXX.cbl -- XXXXXXXX.cob -- XXXXXXXX - -UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 - ---- -`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 - diff --git a/automanual/new/8-1-9.md b/automanual/new/8-1-9.md deleted file mode 100644 index 9a6c305..0000000 --- a/automanual/new/8-1-9.md +++ /dev/null @@ -1,123 +0,0 @@ - -[前へ](8-1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-1.md) - - - -[ページトップへ](8-1-9.md) - -### 8.1.9. コンパイラ構成ファイルの使い方 - -opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 - -以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 - -``` -# COBOL compiler configuration -*- sh -*- - -# Value: any string -name: "opensource COBOL" - -# Value: int -tab-width: 8 -text-column: 72 - -# Value: 'cobol2002', 'mf', 'ibm' -# -assign-clause: mf - -# If yes, file names are resolved at run time using environment variables. -# For example, given ASSIGN TO "DATAFILE", the actual file name will be -# 1. the value of environment variable 'DD_DATAFILE' or -# 2. the value of environment variable 'dd_DATAFILE' or -# 3. the value of environment variable 'DATAFILE' or -# 4. the literal "DATAFILE" -# If no, the value of the assign clause is the file name. -# -# Value: 'yes', 'no' -filename-mapping: yes - -# Value: 'yes', 'no' -pretty-display: yes - -# Value: 'yes', 'no' -auto-initialize: yes - -# Value: 'yes', 'no' -complex-odo: no - -# Value: 'yes', 'no' -indirect-redefines: no - -# Binary byte size - defines the allocated bytes according to PIC -# Value: signed unsigned bytes -# ------ -------- ----- -# '2-4-8' 1 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1-2-4-8' 1 - 2 1 -# 3 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1--8' 1 - 2 1 - 2   1 -# 3 - 4 3 - 4 2 -# 5 - 6 5 - 7 3 -# 7 - 9 8 - 9 4 -# 10 - 11 10 - 12 5 -# 12 - 14 13 - 14 6 -# 15 - 16 15 - 16 7 -# 17 - 18 17 - 18 8 -binary-size: 1-2-4-8 - -# Value: 'yes', 'no' -binary-truncate: yes - -# Value: 'native', 'big-endian' -binary-byteorder: big-endian - -# Value: 'yes', 'no' -larger-redefines-ok: no - -# Value: 'yes', 'no' -relaxed-syntax-check: no - -# Perform type OSVS - If yes, the exit point of any currently executing perform -# is recognized if reached. -# Value: 'yes', 'no' -perform-osvs: no - -# If yes, linkage-section items remain allocated -# between invocations. -# Value: 'yes', 'no' -sticky-linkage: no - -# If yes, allow non-matching level numbers -# Value: 'yes', 'no' -relax-level-hierarchy: no - -# not-reserved: -# Value: Word to be taken out of the reserved words list -# (case independent) - -# Dialect features -# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' -author-paragraph: obsolete -memory-size-clause: obsolete -multiple-file-tape-clause: obsolete -label-records-clause: obsolete -value-of-clause: obsolete -data-records-clause: obsolete -top-level-occurs-clause: skip -synchronized-clause: ok -goto-statement-without-name: obsolete -stop-literal-statement: obsolete -debugging-line: obsolete -padding-character-clause: obsolete -next-sentence-phrase: archaic -eject-statement: skip -entry-statement: obsolete -move-noninteger-to-alphanumeric: error -odo-without-to: ok -``` - diff --git a/automanual/new/8-2-1.md b/automanual/new/8-2-1.md deleted file mode 100644 index 3e791ea..0000000 --- a/automanual/new/8-2-1.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](8-1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-2.md) - - - -[ページトップへ](8-2-1.md) - -## 8.2. opensource COBOLプログラムの実行 - -### 8.2.1. プログラムの直接実行 - -「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 - -これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 - -これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 - -プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 - -プログラムの直接実行構文は次の通りである。 - - [path]program [arguments] - -例: -``` - /usr/local/printaccount ACCT=6625378 - または - C:\Users\Me\Documents\Programs\printaccount.exe - ACCT=6625378 -``` - diff --git a/automanual/new/8-2-2.md b/automanual/new/8-2-2.md deleted file mode 100644 index f53d6be..0000000 --- a/automanual/new/8-2-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](8-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-3.md) - - - -[ページトップへ](8-2-2.md) - -### 8.2.2. 「cobcrun」ユーティリティの使用 - -「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 - -opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 - -この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: - - [path]cobcrun program [arguments] - -プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 - -cobcrunの使用例: - - cd /usr/local - cobcrun printaccount ACCT=6625378 - または - cd C:\Users\Me\Documents\Programs - cobcrun printaccount.exe ACCT=6625378 - -cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 - diff --git a/automanual/new/8-2-3.md b/automanual/new/8-2-3.md deleted file mode 100644 index 9a071df..0000000 --- a/automanual/new/8-2-3.md +++ /dev/null @@ -1,14 +0,0 @@ - -[前へ](8-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-4.md) - - - -[ページトップへ](8-2-3.md) - -### 8.2.3. プログラムの引数 - -プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 - -- ACCEPT ・・・ FROM COMMAND-LINE -- ACCEPT ・・・ FROM ARGUMENT-VALUE - diff --git a/automanual/new/8-2-4.md b/automanual/new/8-2-4.md deleted file mode 100644 index 6e78fc3..0000000 --- a/automanual/new/8-2-4.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](8-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-3-1.md) - - - -[ページトップへ](8-2-4.md) - -### 8.2.4. 重要な環境変数 - -次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 - -表8-5-実行時環境変数 - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| -|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | -|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | -|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| -|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| -|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| -|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| -|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| - ---- -`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 -`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 -`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 - diff --git a/automanual/new/8-3-1.md b/automanual/new/8-3-1.md deleted file mode 100644 index 0e9ae8b..0000000 --- a/automanual/new/8-3-1.md +++ /dev/null @@ -1,756 +0,0 @@ - -[前へ](8-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-1.md) - - - -[ページトップへ](8-3-1.md) - -## 8.3. 組み込みサブルーチン - -### 8.3.1. 「名前による呼び出し」ルーチン - -opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 - -これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 - - -- 現在のディレクトリの変更 -- ファイルのコピー -- ディレクトリの作成 -- ファイルの作成、開く、閉じる、読み取り、書き込み -- ディレクトリ(フォルダ)の削除 -- ファイルの削除 -- サブルーチンに渡された引数の数の決定 -- ファイル情報の取得(サイズと最終変更日時) -- サブルーチンに渡される引数の長さ(バイト単位)の取得 -- 項目の左揃え、右揃え、または中央揃えの決定 -- ファイルの移動(破壊的な「コピー」) -- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする -- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする - - 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない -- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する - -次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 - -#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* - -このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 - -*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 - -statusは次のいずれかの値を受け取る。 - -| | | -| --- | --- | -| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | -| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | -| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | - - -#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 - -[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 - -#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -第3引数は必須ではあるが、使用されない。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 - -#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -第2引数は必須ではあるが、使用されない。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 - -#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* - -このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 File-Info. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date - 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time - -変更時刻の小数点以下2桁は常に0である。 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 - -#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” - -C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 - -- なし 「R」と同じように扱われる -- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる -- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる -- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる -- それ以外 「R」として扱われる - -#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* - -このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 - -与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 - -| | | -| --- | --- | -| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | -| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | -| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | - -``` - 01 PATTERN PIC X(5) VALUE "*". - 01 DIRECTORY PIC X(256) VALUE - "./list". - 01 FILENAME PIC X(30). - 01 MYDIR PIC 9(8) COMP-5. - PROCEDURE DIVISION. - CALL "C$LIST-DIRECTORY" USING 1, - DIRECTORY, - PATTERN - END-CALL. - MOVE RETURN-CODE TO MYDIR. - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL. - PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES - DISPLAY FUNCTION TRIM(FILENAME) - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL - END-PERFORM. - CALL "C$LIST-DIRECTORY" USING 3, MYDIR - END-CALL. -``` - -#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 - -#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* - -C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 - -メインプログラムからCALLされた場合、戻り値は常に0になる。 - -[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 - -#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* - -このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 - -サイズは、RETURN-CODE特殊レジスタに返される。 - -指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 - -#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* - -C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 - -1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 - -[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 - -#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 - -#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 - -#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「AND」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 - -操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 - -[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 - -#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* - -このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 Argument-2. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-DD PIC 9(2) COMP. *> Modification Time - 05 Mod-MO PIC 9(2) COMP. - 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date - 05 Mod-HH PIC 9(2) COMP. - 05 Mod-MM PIC 9(2) COMP. - 05 Mod-SS PIC 9(2) COMP. - 05 FILLER PIC 9(2) COMP. *> This will always be 00 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 - -#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* - -CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 - -*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 - -サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 - -#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 - -#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 - -#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* - -CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 - -引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` - -後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 - -サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 - -[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 - -#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* - -CBL_DELETE_DIRを使って空のディレクトリを削除する。 - -唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 - -指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 - -RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 - -#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* - -このルーチンは、一般的なエラー処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 - -一度に有効にできるユーザ定義のエラー手続きは1つだけである。 - -エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 - -エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoerrproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Err-Proc. - SET Err-Proc-Address TO ENTRY "999-Err" - CALL "CBL_ERROR_PROC" - USING Err-Proc-Install, Err-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not' & - 'register Error Procedure' - END-IF - . - 099-Now-Test-Err-Proc. - CALL "Tilt" END-CALL - GOBACK - . - 999-Err-Proc. - ENTRY "999-Err" - DISPLAY - '** A Runtime Error Has Occurred **' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* - -このルーチンは、一般的な終了処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 - -一度に有効にできるユーザ定義の終了手続きは1つだけである。 - -終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 - -終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoexitproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Exit-Proc. - SET Exit-Proc-Address TO ENTRY "999-Exit" - CALL "CBL_EXIT_PROC" - USING Exit-Proc-Install, Exit-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not register Exit Procedure' - END-IF - 099-Now-Test-Exit-Proc. - DISPLAY - 'Executing a STOP RUN...' - END-DISPLAY - GOBACK - . - 999-Exit-Proc. - ENTRY "999-Exit" - DISPLAY - '*** STOP RUN has been executed ***' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「EQ」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* - -このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 - -このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 - -#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* - -現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 - -第1引数は使用されないが、**BY VALUE**で指定する必要がある。 - -*length*引数は**BY VALUE**で指定する必要がある。 - -*buffer*引数は**BY REFERENCE**で指定する必要がある。 - -*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 - -*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 - -ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 - -#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「IMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 1 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NIMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* - -このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 - -項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOT」プロセスを示している。 - -| 古い引数2ビット | 新しい引数2ビット | -| :---: | :---: | -| 0 | 1 | -| 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* - -CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 - -item-1として次の集団項目を定義する。 - - 01 KEISEN. - 02 KEI-CMD PIC 9(1) COMP-X. - 02 KEI-LINE PIC 9(2) COMP-X. - 02 KEI-COL PIC 9(2) COMP-X. - 02 KEI-LNG1 PIC 9(2) COMP-X. - 02 KEI-LNG2 PIC 9(2) COMP-X. - 02 KEI-COLOR PIC 9(2) COMP-X. - 02 KEI-PRN PIC 9(2) COMP-X. - -各項目の意味を以下に示す。 - -| | | -| --- | --- | -| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| -| KEI-LINE | 開始ライン(1~24) | -| KEI-COL | 開始カラム(1~80) | -| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | -| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | -| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | -| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | - -#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* - -CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 - -*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 - -1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 - -[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 - -#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* - -このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 - -*file-path*引数は、英数字定数またはデータ項目である。 - -*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 - -- 1 = 入力 (読み取り専用) -- 2 = 出力 (書き込み専用) -- 3 = 入力または出力 - -第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 - -最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 - -RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 - -[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 - -#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「OR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 1 | - - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer - -このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 - -*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* - -このサブルーチンを使用してファイル名を変更できる。 - -*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 - -このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 - -ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 - -#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 - -#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 - -#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* - -このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 -唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「XOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.42. CALL “SYSTEM” USING *command* - -このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 - -CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 - -コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 - -Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 - -ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 - -実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 - ---- -`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
-`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
- diff --git a/automanual/new/9-1.md b/automanual/new/9-1.md deleted file mode 100644 index 3a3f907..0000000 --- a/automanual/new/9-1.md +++ /dev/null @@ -1,58 +0,0 @@ - -[前へ](8-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-2.md) - - - -[ページトップへ](9-1.md) - -# 9. サンプルプログラム - -## 9.1. FileStat-Msgs.cpy – ファイル状態コード - -このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 - -コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 - -``` - COPY FileStat-Msgs - REPLACING STATUS BY Input-File-Status - MSG BY Error-Message. -``` - -以下は、コピーブック「FileStat-Msgs.cpy」である。 - -``` - EVALUATE STATUS - WHEN 00 MOVE 'SUCCESS ' TO MSG - WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG - WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG - WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG - WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG - WHEN 10 MOVE 'END OF FILE ' TO MSG - WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG - WHEN 21 MOVE 'KEY INVALID ' TO MSG - WHEN 22 MOVE 'KEY EXISTS ' TO MSG - WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG - WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG - WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG - WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG - WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG - WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG - WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG - WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG - WHEN 41 MOVE 'ALREADY OPEN ' TO MSG - WHEN 42 MOVE 'NOT OPEN ' TO MSG - WHEN 43 MOVE 'READ NOT DONE ' TO MSG - WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG - WHEN 46 MOVE 'READ ERROR ' TO MSG - WHEN 47 MOVE 'INPUT DENIED ' TO MSG - WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG - WHEN 49 MOVE 'I/O DENIED ' TO MSG - WHEN 51 MOVE 'RECORD LOCKED ' TO MSG - WHEN 52 MOVE 'END-OF-PAGE ' TO MSG - WHEN 57 MOVE 'I/O LINAGE ' TO MSG - WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG - WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG - END-EVALUATE. -``` - diff --git a/automanual/new/9-2.md b/automanual/new/9-2.md deleted file mode 100644 index 01d2ad6..0000000 --- a/automanual/new/9-2.md +++ /dev/null @@ -1,205 +0,0 @@ - -[前へ](9-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](credit.md) - - - -[ページトップへ](9-2.md) - -## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン - -次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 - -``` -IDENTIFICATION DIVISION. -PROGRAM-ID. COBDUMP. -***************************************************************** -** This is an OpenCOBOL subroutine that will generate a ** -** formatted Hex/Char dump of a storage area. To use this ** -** subroutine, simply CALL it as follows: ** -** ** -** CALL "COBDUMP" USING ** -** [ ] ** -** ** -** If specified, the argument specifies how many ** -** bytes of are to be dumped. If absent, all of ** -** will be dumped (i.e. LENGTH() will ** -** be assumed for ). ** -** ** -** >>> Note that the subroutine name MUST be specified in <<< ** -** >>> UPPERCASE <<< ** -** ** -** The dump is generated to STDERR, so you may pipe it to a ** -** file when you execute your program using "2> file". ** -** ** -** AUTHOR: GARY L. CUTLER ** -** CutlerGL@gmail.c ** -** ** -** NOTE: The author has a sentimental attachment to ** -** this subroutine - it's been around since 1971 ** -** and it's been converted to and run on 10 dif- ** -** ferent operating system/compiler environments ** -** ** -** DATE-WRITTEN: October 14, 1971 ** -** ** -***************************************************************** -** DATE CHANGE DESCRIPTION ** -** ====== ==================================================== ** -** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** -** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** -** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** -** SCREEN SECTION enhancements ** -** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** -** GC0983 Converted to IBM VS COBOL - COBOL '74 ** -** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** -** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** -** extensions ** -** GC0703 Converted to Unisys Universal Compiling System (UCS) ** -** COBOL (UCOB) - COBOL '85 ** -** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** -** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** -** 2002 features ** -** GC0410 Enhanced to make 2nd argument (buffer length) ** -** optional ** -***************************************************************** -ENVIRONMENT DIVISION. -CONFIGURATION SECTION. -REPOSITORY. - FUNCTION ALL INTRINSIC. -DATA DIVISION. -WORKING-STORAGE SECTION. -78 Undisplayable-Char-Symbol VALUE X'F9'. -01 Addr-Pointer USAGE POINTER. -01 Addr-Number REDEFINES Addr-Pointer - USAGE BINARY-LONG. - -01 Addr-Sub USAGE BINARY-CHAR. - -01 Addr-Value USAGE BINARY-LONG. - -01 Buffer-Length USAGE BINARY-LONG. - -01 Buffer-Sub COMP-5 PIC 9(4). - -01 Hex-Digits VALUE '0123456789ABCDEF'. -05 Hex-Digit OCCURS 16 TIMES PIC X(1). - -01 Left-Nibble COMP-5 PIC 9(1). -01 Nibble REDEFINES Left-Nibble - BINARY-CHAR. -01 Output-Detail. -05 OD-Addr. -10 OD-Addr-Hex OCCURS 8 TIMES PIC X. -05 FILLER PIC X(1). -05 OD-Byte PIC Z(3)9. -05 FILLER PIC X(1). -05 OD-Hex OCCURS 16 TIMES. -10 OD-Hex-1 PIC X. -10 OD-Hex-2 PIC X. -10 FILLER PIC X. -05 OD-ASCII OCCURS 16 TIMES - PIC X. -01 Output-Sub COMP-5 PIC 9(2). - -01 Output-Header-1. - 05 FILLER PIC X(80) VALUE - '<-Addr-> Byte ' & - '<---------------- Hexadecimal ----------------> ' & - '<---- Char ---->'. -01 Output-Header-2. - 05 FILLER PIC X(80) VALUE - '======== ==== ' & - '=============================================== ' & - '================'. -01 PIC-XX. -05 FILLER PIC X VALUE LOW-VALUES. -05 PIC-X PIC X. -01 PIC-Halfword REDEFINES PIC-XX - PIC 9(4) COMP-X. -01 PIC-X10. -05 FILLER PIC X(2). -05 PIC-X8 PIC X(8). -01 Right-Nibble COMP-5 PIC 9(1). - -LINKAGE SECTION. -01 Buffer PIC X ANY LENGTH. - -01 Buffer-Len USAGE BINARY-LONG. -PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. -000-COBDUMP. - IF NUMBER-OF-CALL-PARAMETERS = 1 - MOVE LENGTH(Buffer) TO Buffer-Length - ELSE - MOVE Buffer-Len TO Buffer-Length - END-IF - MOVE SPACES TO Output-Detail - SET Addr-Pointer TO ADDRESS OF Buffer - PERFORM 100-Generate-Address - MOVE 0 TO Output-Sub - DISPLAY - Output-Header-1 UPON SYSERR - END-DISPLAY - DISPLAY - Output-Header-2 UPON SYSERR - END-DISPLAY - PERFORM VARYING Buffer-Sub FROM 1 BY 1 - UNTIL Buffer-Sub > Buffer-Length - ADD 1 - TO Output-Sub - END-ADD - IF Output-Sub = 1 - MOVE Buffer-Sub TO OD-Byte - END-IF - MOVE Buffer (Buffer-Sub : 1) TO PIC-X - IF (PIC-X < ' ') - OR (PIC-X > '~') - MOVE Undisplayable-Char-Symbol - TO OD-ASCII (Output-Sub) - ELSE - MOVE PIC-X - TO OD-ASCII (Output-Sub) - END-IF - DIVIDE PIC-Halfword BY 16 - GIVING Left-Nibble - REMAINDER Right-Nibble - END-DIVIDE - ADD 1 TO Left-Nibble - Right-Nibble - END-ADD - MOVE Hex-Digit (Left-Nibble) - TO OD-Hex-1 (Output-Sub) - MOVE Hex-Digit (Right-Nibble) - TO OD-Hex-2 (Output-Sub) - IF Output-Sub = 16 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - MOVE SPACES TO Output-Detail - MOVE 0 TO Output-Sub - SET Addr-Pointer UP BY 16 - PERFORM 100-Generate-Address - END-IF -END-PERFORM -IF Output-Sub > 0 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - END-IF - EXIT PROGRAM - . -100-Generate-Address. - MOVE 8 TO Addr-Sub - MOVE Addr-Number TO Addr-Value - MOVE ALL '0' TO OD-Addr - PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 - DIVIDE Addr-Value BY 16 - GIVING Addr-Value - REMAINDER Nibble - END-DIVIDE - ADD 1 TO Nibble - MOVE Hex-Digit (Nibble) - TO OD-Addr-Hex (Addr-Sub) - SUBTRACT 1 FROM Addr-Sub -END-PERFORM -. -``` - diff --git a/automanual/new/TOC.md b/automanual/new/TOC.md deleted file mode 100644 index 353ce12..0000000 --- a/automanual/new/TOC.md +++ /dev/null @@ -1,238 +0,0 @@ -目次 -1. [まえがき](1-1.md) - - [1.1. opensource COBOL とは](1-1.md#11-opensource-cobolとは) - - [1.2. COBOL/opensource COBOL の重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) - - [1.2.1. COBOL プログラムの構文](1-2-1.md#121-cobolプログラムの構文) - - [1.2.2. コピーブック](1-2-2.md) - - [1.2.3. 構造化データ](1-2-3.md) - - [1.2.4. ファイル](1-2-4.md) - - [1.2.5. 表操作](1-2-5.md) - - [1.2.6. データの並び替えと結合](1-2-6.md) - - [1.2.7. 文字列操作](1-2-7.md) - - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) - - [1.3. 構文規則](1-3.md) - - [1.4. ソースコードの形式](1-4.md) - - [1.5. カンマ/セミコロンの使い方](1-5.md) - - [1.6. COPY 文の使い方](1-6.md) - - [1.7. 定数の使い方](1-7-1.md) - - [1.7.1. 数字定数](1-7-1.md#171-数字定数) - - [1.7.2. 英数字定数](1-7-2.md) - - [1.7.3. 日本語定数](1-7-3.md) - - [1.8. 表意定数の使い方](1-8.md) - - [1.9. ユーザ定義名](1-9.md) - - [1.10. LENGTH OF の使い方](1-10.md) -2. [opensource COBOL のプログラム形式](2-1.md) - - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) - - [2.2. ネストされたユーザ定義関数](2-2.md) -3. [見出し部](3.md) -4. [環境部](4-1-1.md) - - [4.1. 構成節](4-1-1.md#41-構成節) - - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) - - [4.1.2. 実行用計算機段落](4-1-2.md) - - [4.1.3. リポジトリ段落](4-1-3.md) - - [4.1.4. 特殊名段落](4-1-4.md) - - [4.2. 入出力節](4-2-1-1.md) - - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) - - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) - - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) - - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) - - [4.2.2. 入出力管理段落](4-2-2.md) -5. [データ部](5-1.md) - - [5.1. ファイル記述](5-1.md#51-ファイル記述) - - [5.2. 整列用記述](5-2.md) - - [5.3. データ記述の形式](5-3.md) - - [5.4. 条件名](5-4.md) - - [5.5. 定数記述](5-5.md) - - [5.6. 画面記述](5-6.md) -6. [手続き部](6-1-1.md) - - [6.1. 構成要素](6-1-1.md#61-構成要素) - - [6.1.1. 表の参照](6-1-1.md#611-表の参照) - - [6.1.2. データ名の修飾](6-1-2.md) - - [6.1.3. 部分参照](6-1-3.md) - - [6.1.4. 式](6-1-4-1.md) - - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) - - [6.1.4.2. 条件式](6-1-4-2.md) - - [6.1.5. ピリオド(.)](6-1-5.md) - - [6.1.6. 動詞/END-動詞](6-1-6.md) - - [6.1.7. 特殊レジスタ](6-1-7.md) - - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) - - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) - - [6.1.8.2. レコードロック](6-1-8-2.md) - - [6.2. 記述形式](6-2.md) - - [6.3. 宣言の記述形式](6-3.md) - - [6.4. ACCEPT](6-4-1.md) - - [6.4.1. ACCEPT 文の書き方 1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) - - [6.4.2. ACCEPT 文の書き方 2 ― コマンドライン引数の取得](6-4-2.md) - - [6.4.3. ACCEPT 文の書き方 3 ― 環境変数値の取得](6-4-3.md) - - [6.4.4. ACCEPT 文の書き方 4 ― 画面データの取得](6-4-4.md) - - [6.4.5. ACCEPT 文の書き方 5 ― 日付/時刻の取得](6-4-5.md) - - [6.4.6. ACCEPT 文の書き方 6 ― 画面サイズデータの取得](6-4-6.md) - - [6.4.7. ACCEPT 文の例外処理](6-4-7.md) - - [6.5. ADD](6-5-1.md) - - [6.5.1. ADD 文の書き方 1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) - - [6.5.2. ADD 文の書き方 2 ― ADD GIVING](6-5-2.md) - - [6.5.3. ADD 文の書き方 3 ― ADD CORRESPONDING](6-5-3.md) - - [6.6. ALLOCATE](6-6.md) - - [6.7. CALL](6-7.md) - - [6.8. CANCEL](6-8-1.md) - - [6.8.1. CANCEL 文の書き方 1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) - - [6.8.2. CANCEL 文の書き方 2 ― CANCEL ALL](6-8-2.md) - - [6.9. CLOSE](6-9.md) - - [6.10. COMMIT](6-10.md) - - [6.11. COMPUTE](6-11.md) - - [6.12. CONTINUE](6-12.md) - - [6.13. DELETE](6-13-1.md) - - [6.13.1. DELETE 文の書き方 1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) - - [6.13.2. DELETE 文の書き方 2 ― DELETE FILE](6-13-2.md) - - [6.14. DISPLAY](6-14-1.md) - - [6.14.1. DISPLAY 文の書き方 1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) - - [6.14.2. DISPLAY 文の書き方 2 ― コマンドライン引数へのアクセス](6-14-2.md) - - [6.14.3. DISPLAY 文の書き方 3 ― 環境変数へのアクセスまたは設定](6-14-3.md) - - [6.14.4. DISPLAY 文の書き方 4 ― 画面データ](6-14-4.md) - - [6.14.5. DISPLAY 文の例外処理](6-14-5.md) - - [6.15. DIVIDE](6-15-1.md) - - [6.15.1. DIVIDE 文の書き方 1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) - - [6.15.2. DIVIDE 文の書き方 2 ― DIVIDE INTO GIVING](6-15-2.md) - - [6.15.3. DIVIDE 文の書き方 3 ― DIVIDE BY GIVING](6-15-3.md) - - [6.15.4. DIVIDE 文の書き方 4 ― DIVIDE INTO REMAINDER](6-15-4.md) - - [6.15.5. DIVIDE 文の書き方 5 ― DIVIDE BY REMAINDER](6-15-5.md) - - [6.16. ENTRY](6-16.md) - - [6.17. EVALUATE](6-17.md) - - [6.18. EXIT](6-18.md) - - [6.19. FREE](6-19.md) - - [6.20. GENERATE](6-20.md) - - [6.21. GOBACK](6-21.md) - - [6.22. GO TO](6-22-1.md) - - [6.22.1. GO TO 文の書き方 1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) - - [6.22.2. GO TO 文の書き方 2 ― GO TO DEPENDING ON](6-22-2.md) - - [6.23. IF](6-23.md) - - [6.24. INITIALIZE](6-24.md) - - [6.25. INITIATE](6-25.md) - - [6.26. INSPECT](6-26.md) - - [6.27. MERGE](6-27.md) - - [6.28. MOVE](6-28-1.md) - - [6.28.1. MOVE 文の書き方 1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) - - [6.28.2. MOVE 文の書き方 2 ― MOVE CORRESPONDING](6-28-2.md) - - [6.29. MULTIPLY](6-29-1.md) - - [6.29.1. MULTIPLY 文の書き方 1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) - - [6.29.2. MULTIPLY 文の書き方 2 ― MULTIPLY GIVING](6-29-2.md) - - [6.30. NEXT SENTENCE](6-30.md) - - [6.31. OPEN](6-31.md) - - [6.32. PERFORM](6-32-1.md) - - [6.32.1. PERFORM 文の書き方 1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) - - [6.32.2. PERFORM 文の書き方 2 ― インライン型](6-32-2.md) - - [6.33. READ](6-33-1.md) - - [6.33.1. READ 文の書き方 1 ―順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) - - [6.33.2. READ 文の書き方 2 ― ランダム読み取り](6-33-2.md) - - [6.34. RELEASE](6-34.md) - - [6.35. RETURN](6-35.md) - - [6.36. REWRITE](6-36.md) - - [6.37. ROLLBACK](6-37.md) - - [6.38. SEARCH](6-38-1.md) - - [6.38.1. SEARCH 文の書き方 1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) - - [6.38.2. SEARCH 文の書き方 2 ― 二分探索(SEARCH ALL)](6-38-2.md) - - [6.39. SET](6-39-1.md) - - [6.39.1. SET 文の書き方 1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) - - [6.39.2. SET 文の書き方 2 ― プログラムポインター設定](6-39-2.md) - - [6.39.3. SET 文の書き方 3 ― アドレス設定](6-39-3.md) - - [6.39.4. SET 文の書き方 4 ― インデックス設定](6-39-4.md) - - [6.39.5. SET 文の書き方 5 ― UP/DOWN 設定](6-39-5.md) - - [6.39.6. SET 文の書き方 6 ― 条件名設定](6-39-6.md) - - [6.39.7. SET 文の書き方 7 ― スイッチ設定](6-39-7.md) - - [6.40. SORT](6-40-1.md) - - [6.40.1. SORT 文の書き方 1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) - - [6.40.2. SORT 文の書き方 2 ― テーブルソート](6-40-2.md) - - [6.41. START](6-41.md) - - [6.42. STOP](6-42.md) - - [6.43. STRING](6-43.md) - - [6.44. SUBTRACT](6-44-1.md) - - [6.44.1. SUBTRACT 文の書き方 1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) - - [6.44.2. SUBTRACT 文の書き方 2 ― SUBTRACT GIVING](6-44-2.md) - - [6.44.3. SUBTRACT 文の書き方 3 ― SUBTRACT CORRESPONDING](6-44-3.md) - - [6.45. SUPPRESS](6-45.md) - - [6.46. TERMINATE](6-46.md) - - [6.47. TRANSFORM](6-47.md) - - [6.48. UNLOCK](6-48.md) - - [6.49. UNSTRING](6-49.md) - - [6.50. WRITE](6-50.md) -7. [日本語の使用](7-1.md) - - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) - - [7.2. 日本語項目と表意定数](7-2.md) - - [7.3. 各命令文と日本語の取扱い](7-3-1.md) - - [7.3.1. MOVE 文](7-3-1.md#731-move文) - - [7.3.2. ACCEPT/DISPLAY 文](7-3-2.md) - - [7.4. UTF-8 の使用](7-4.md) -8. [opensource COBOL システムインターフェース](8-1-1.md) - - [8.1. opensource COBOL コンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) - - [8.1.1. 解説](8-1-1.md#811-解説) - - [8.1.2. コンパイルオプション](8-1-2.md) - - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) - - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) - - [8.1.5. 静的サブルーチン](8-1-5.md) - - [8.1.6. COBOL と C ブログラムの結合](8-1-6.md) - - [8.1.6.1. opensource COBOL ランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) - - [8.1.6.2. opensource COBOL と C の文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) - - [8.1.6.3. C データ型と opensource COBOL USAGE 句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) - - [8.1.6.4. opensource COBOL メインプログラムの C サブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) - - [8.1.6.5. C メインプログラムの opensource COBOL サブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) - - [8.1.7. 重要な環境変数](8-1-7.md) - - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) - - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) - - [8.2. opensource COBOL プログラムの実行](8-2-1.md) - - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) - - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) - - [8.2.3. プログラムの引数](8-2-3.md) - - [8.2.4. 重要な環境変数](8-2-4.md) - - [8.3. 組み込みサブルーチン](8-3-1.md) - - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) - - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) - - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) - - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) - - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) - - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) - - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) - - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) - - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) - - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) - - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) - - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) - - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) - - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) - - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) - - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) - - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) - - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) - - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) - - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) - - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) - - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) - - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) - - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) - - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) - - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) - - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) - - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) - - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) - - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) - - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) - - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) - - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) - - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) - - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) - - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) - - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) - - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) - - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) -9. [サンプルプログラム](9-1.md) - - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) - - [9.2. COBDUMP –16 進数/文字データダンプサブルーチン](9-2.md) - -[クレジット](credit.md) - - -[ページトップへ](TOC.md) - diff --git a/automanual/new/credit.md b/automanual/new/credit.md deleted file mode 100644 index 4d9dea8..0000000 --- a/automanual/new/credit.md +++ /dev/null @@ -1,36 +0,0 @@ - -[前へ](9-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/次へ - - - -[ページトップへ](credit.md) - -
-opensource COBOL Programmer's Guide - -【制作】
-OSSコンソーシアム オープンCOBOLソリューション部会 - -【原著】
-Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") - -【翻訳・執筆】
-東京システムハウス株式会社 島田桃花 - -【マークダウン化】
-東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 - -【監修】
-東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
-株式会社SIT11 飯島裕一 - -【協力】(50音順)
-OVOL ICTソリューションズ株式会社
-株式会社SIT11
-株式会社CIJ
-サン情報サービス株式会社
- -【発行】
-OSSコンソーシアム オープンCOBOLソリューション部会
-URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) - diff --git a/automanual/new_delete/1-1.md b/automanual/new_delete/1-1.md deleted file mode 100644 index 9b09412..0000000 --- a/automanual/new_delete/1-1.md +++ /dev/null @@ -1,15 +0,0 @@ -# 1. まえがき - -## 1.1. opensource COBOLとは - -このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 - -opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 - -opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 - -Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 - ---- -`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 - diff --git a/automanual/new_delete/1-10.md b/automanual/new_delete/1-10.md deleted file mode 100644 index 18fc7fd..0000000 --- a/automanual/new_delete/1-10.md +++ /dev/null @@ -1,20 +0,0 @@ -## 1.10. LENGTH OFの使い方 - -オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 - -``` -01 Demo-Identifier PIC X(27). *> This is a 27-character data-item -. -. -. -DISPLAY LENGTH OF “This is a LENGTH OF Example” -DISPLAY LENGTH OF Demo-Identifier -DISPLAY 27 -``` - -定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 - -1. DISPLAY文の定数の代わりとして -2. WRITE文またはRELEASE文のFROM句の一部として -3. PERFORM文のTIMES句の一部として - diff --git a/automanual/new_delete/1-2-1.md b/automanual/new_delete/1-2-1.md deleted file mode 100644 index 7f76a9b..0000000 --- a/automanual/new_delete/1-2-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 1.2. COBOL/opensource COBOLの重要機能 - -### 1.2.1. COBOLプログラムの構文 - -COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 - -部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 - -このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 - -4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 - diff --git a/automanual/new_delete/1-2-2.md b/automanual/new_delete/1-2-2.md deleted file mode 100644 index 4be66aa..0000000 --- a/automanual/new_delete/1-2-2.md +++ /dev/null @@ -1,6 +0,0 @@ -### 1.2.2. コピーブック - -「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 - -現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 - diff --git a/automanual/new_delete/1-2-3.md b/automanual/new_delete/1-2-3.md deleted file mode 100644 index e8d2dae..0000000 --- a/automanual/new_delete/1-2-3.md +++ /dev/null @@ -1,4 +0,0 @@ -### 1.2.3. 構造化データ - -COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 - diff --git a/automanual/new_delete/1-2-4.md b/automanual/new_delete/1-2-4.md deleted file mode 100644 index a4454ac..0000000 --- a/automanual/new_delete/1-2-4.md +++ /dev/null @@ -1,15 +0,0 @@ -### 1.2.4. ファイル - -COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 - -||| -|:---|:---| -|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| -ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![!\[alt text\](Image/1-0-1.png)](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![!\[alt text\](Image/1-0-2.png)](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| - -すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 - -データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 - diff --git a/automanual/new_delete/1-2-5.md b/automanual/new_delete/1-2-5.md deleted file mode 100644 index 942f23d..0000000 --- a/automanual/new_delete/1-2-5.md +++ /dev/null @@ -1,8 +0,0 @@ -### 1.2.5. 表操作 - -他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 - -1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 - -2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 - diff --git a/automanual/new_delete/1-2-6.md b/automanual/new_delete/1-2-6.md deleted file mode 100644 index 9246fa5..0000000 --- a/automanual/new_delete/1-2-6.md +++ /dev/null @@ -1,8 +0,0 @@ -### 1.2.6. データの並び替えと結合 - -COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 - -表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 - -同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 - diff --git a/automanual/new_delete/1-2-7.md b/automanual/new_delete/1-2-7.md deleted file mode 100644 index 2f3758f..0000000 --- a/automanual/new_delete/1-2-7.md +++ /dev/null @@ -1,25 +0,0 @@ -### 1.2.7. 文字列操作 - -テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 - -| 機能 | サポートするopensource COBOL機能 | -| :--- | :--- | -|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | -| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | -| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | -| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | -| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | -| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | -| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | -| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| -| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | -| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | -| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | -| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | - diff --git a/automanual/new_delete/1-2-8.md b/automanual/new_delete/1-2-8.md deleted file mode 100644 index 2536280..0000000 --- a/automanual/new_delete/1-2-8.md +++ /dev/null @@ -1,18 +0,0 @@ -### 1.2.8. テキストユーザインターフェース(TUI)機能 - -COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 - -以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 - -図1-1-TUIサンプル画面 - -![!\[alt text\](Image/1-1.png)](Image/1-1.png) - -このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 - -COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 - ---- - -`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 - diff --git a/automanual/new_delete/1-3.md b/automanual/new_delete/1-3.md deleted file mode 100644 index 2ec4693..0000000 --- a/automanual/new_delete/1-3.md +++ /dev/null @@ -1,16 +0,0 @@ -## 1.3. 構文規則 - -opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 - -| | | -| :--- | :--- | -| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | -| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | -| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | -| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | -| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | -| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | -| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | -| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | -| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | - diff --git a/automanual/new_delete/1-4.md b/automanual/new_delete/1-4.md deleted file mode 100644 index 6978319..0000000 --- a/automanual/new_delete/1-4.md +++ /dev/null @@ -1,26 +0,0 @@ -## 1.4. ソースコードの形式 - -従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 - -opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 - -| | | -| :--- | :--- | -| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | -| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | -| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | -| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | - -以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 - -| | | -| :--- | :--- | -| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | -| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | -| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | -| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | -| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | -| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | - diff --git a/automanual/new_delete/1-5.md b/automanual/new_delete/1-5.md deleted file mode 100644 index 572aff7..0000000 --- a/automanual/new_delete/1-5.md +++ /dev/null @@ -1,12 +0,0 @@ -## 1.5. カンマ/セミコロンの使い方 - -空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 - -次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: - - CALL “SUBROUTINE” USING 1,2 - -DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 - -句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 - diff --git a/automanual/new_delete/1-6.md b/automanual/new_delete/1-6.md deleted file mode 100644 index ad18af4..0000000 --- a/automanual/new_delete/1-6.md +++ /dev/null @@ -1,30 +0,0 @@ -## 1.6. COPY文の使い方 - -図1-2-COPY構文 - -![alt text](Image/1-2.png) - -COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 - -1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 - -2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 - -3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 - -4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 - -5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 - -6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 - -7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 - -8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 - -9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 - -10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 - -11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 - diff --git a/automanual/new_delete/1-7-1.md b/automanual/new_delete/1-7-1.md deleted file mode 100644 index 6f65cde..0000000 --- a/automanual/new_delete/1-7-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 1.7. 定数の使い方 - -定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 -### 1.7.1. 数字定数 -数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 - -- 1、56、2192、-54などの整数。 - -- 1.12や-2.95などの整数でない固定小数点値。 - -- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 - diff --git a/automanual/new_delete/1-7-2.md b/automanual/new_delete/1-7-2.md deleted file mode 100644 index 339839c..0000000 --- a/automanual/new_delete/1-7-2.md +++ /dev/null @@ -1,34 +0,0 @@ -### 1.7.2. 英数字定数 - -英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 - -英数字定数は、次の形式のいずれかを取ることができる。 - -- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 - -- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - -英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 - -- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 - - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l - – “iteral that must - – “be continued.” - - -- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

- - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & - “ long literal that must ” & - “ be continued.” - - -プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 - -数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 - diff --git a/automanual/new_delete/1-7-3.md b/automanual/new_delete/1-7-3.md deleted file mode 100644 index 21c4901..0000000 --- a/automanual/new_delete/1-7-3.md +++ /dev/null @@ -1,6 +0,0 @@ -### 1.7.3. 日本語定数 - -- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 - -- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - diff --git a/automanual/new_delete/1-8.md b/automanual/new_delete/1-8.md deleted file mode 100644 index 94415b6..0000000 --- a/automanual/new_delete/1-8.md +++ /dev/null @@ -1,17 +0,0 @@ -## 1.8. 表意定数の使い方 - -表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 - -次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 - -表1-3-表意定数 - -| 表意定数 | 定数型 | 値 | -| :--- | :--- | :--- | -| ZERO, ZEROS, ZEROES | 数字 | 0 | -| SPACE, SPACES | 英数字 | 空白 | -| QUOTE, QUOTES | 英数字 | 二重引用符 | -| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | -| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | -| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | - diff --git a/automanual/new_delete/1-9.md b/automanual/new_delete/1-9.md deleted file mode 100644 index b9fb58c..0000000 --- a/automanual/new_delete/1-9.md +++ /dev/null @@ -1,8 +0,0 @@ -## 1.9. ユーザ定義名 - -opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 - -ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 - -プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 - diff --git a/automanual/new_delete/2-1.md b/automanual/new_delete/2-1.md deleted file mode 100644 index 0db6100..0000000 --- a/automanual/new_delete/2-1.md +++ /dev/null @@ -1,39 +0,0 @@ -# 2. opensource COBOLのプログラム形式 - -図2-1-opensource COBOLのプログラム形式 - -![alt text](Image/2-1.png) - -COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 - -すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 - -1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 - -2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 - -3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 - -4. 各区分の目的の概要は次の通りである: - -| 区分 | 目的 | -| :--- | :--- | -| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | -| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | -| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | -| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | - -## 2.1. ネストされたユーザプログラム - -図2-2-ネストされたユーザプログラム - -![alt text](Image/2-2.png) - -ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 - -1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 - ---- - -`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 - diff --git a/automanual/new_delete/2-2.md b/automanual/new_delete/2-2.md deleted file mode 100644 index 353c33f..0000000 --- a/automanual/new_delete/2-2.md +++ /dev/null @@ -1,12 +0,0 @@ -## 2.2. ネストされたユーザ定義関数 - -図2-3-ネストされたユーザ定義関数 - -![alt text](Image/2-3.png) - -ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 - -1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 - - name:line: Error: FUNCTION-ID is not yet implemented - diff --git a/automanual/new_delete/3.md b/automanual/new_delete/3.md deleted file mode 100644 index 634bc36..0000000 --- a/automanual/new_delete/3.md +++ /dev/null @@ -1,21 +0,0 @@ -# 3. 見出し部 - -図3-1-見出し部構文 - -![alt text](Image/3-1.png) - -プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 -1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 - -2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 - -3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 - -4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 - -5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 - -6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 - -7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 - diff --git a/automanual/new_delete/4-1-1.md b/automanual/new_delete/4-1-1.md deleted file mode 100644 index 1db0690..0000000 --- a/automanual/new_delete/4-1-1.md +++ /dev/null @@ -1,34 +0,0 @@ -# 4. 環境部 - -図4-1-環境部構文 - -![alt text](Image/4-1.png) - -プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 - -1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 - -## 4.1. 構成節 - -図4-2-構成節構文 - -![alt text](Image/4-2.png) - -プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 - -1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 - -### 4.1.1. 翻訳用計算機段落 - -図4-3-翻訳用計算機段落構文 - -![alt text](Image/4-3.png) - -翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 - -1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 - -3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 - diff --git a/automanual/new_delete/4-1-2.md b/automanual/new_delete/4-1-2.md deleted file mode 100644 index 1ecd3ae..0000000 --- a/automanual/new_delete/4-1-2.md +++ /dev/null @@ -1,16 +0,0 @@ -### 4.1.2. 実行用計算機段落 - -図4-4-実行用計算機段落構文 - -![alt text](Image/4-4.png) - -実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 - -1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 - -3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 - -4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 - diff --git a/automanual/new_delete/4-1-3.md b/automanual/new_delete/4-1-3.md deleted file mode 100644 index bc8acb3..0000000 --- a/automanual/new_delete/4-1-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 4.1.3. リポジトリ段落 - -図4-5-リポジトリ段落構文 - -![alt text](Image/4-5.png) - -リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 - -1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 - -2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 - diff --git a/automanual/new_delete/4-1-4.md b/automanual/new_delete/4-1-4.md deleted file mode 100644 index 8197007..0000000 --- a/automanual/new_delete/4-1-4.md +++ /dev/null @@ -1,107 +0,0 @@ -### 4.1.4. 特殊名段落 - -図4-6-特殊名段落構文 - -![alt text](Image/4-6-1.png) -![alt text](Image/4-6-2.png) - -特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定のニーモニック名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 - -つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 - -1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 - -2. IS ニーモニック名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 - -3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 - -4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 - -5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 - - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ - - このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 - - LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: - - 表4-7-局所名 - - | | | | | | - | :---: | :---: | :---: | :---: | :---: | - | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | - | am_ET | el_GR | fil_PH | lv_LV | sma_SE | - | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | - | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | - | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | - | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | - | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | - | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | - | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | - | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | - | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | - | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | - | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | - | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | - | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | - | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | - | ar_TN | en_ZA | he_IL | nn_NO | te_IN | - | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | - | arn_CL | es_AR | hr_BA | oc_FR | th_TH | - | as_IN | es_BO | hr_HR | or_IN | tk_TM | - | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | - | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | - | ba_R | es_CR | id_ID | ps_AF | tr_IN | - | be_BY | es_DO | ig_NG | pt_BR | tr_TR | - | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | - | bn_IN | es_ES | is_IS | qut_GT | ug_CN | - | bo_BT | es_GT | it_CH | quz_BO | uk_UA | - | bo_CN | es_HN | it_IT | quz_EC | ur_PK | - | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | - | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | - | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | - | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | - | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | - | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | - | da_DK | es_SV | kl_GL | sah_RU | yo_NG | - | de_AT | es_US | kn_IN | se_FI | zh_CN | - | de_CH | es_UY | ko_KR | se_NO | zh_HK | - | de_DE | es_VE | kok_IN | se_SE | zh_MO | - | de_LI | et_EE | ky_KG | si_LK | zh_SG | - | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | - | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | - - -7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 - -8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 - -9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 - - 表4-8-ACCEPT画面ステータスコード - - | コード | 意味 | - | :--- | :--- | - | 0000 | ENTERキー押下 | - | 1001 - 1064| F1 — F64 | - | 2001, 2002 | PgUP, PgDn4 | - | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | - | 2005 | Esc6 | - | 8000 | ACCEPT画面に利用できるデータがない | - | 9000 | 致命的なI/O画面エラー | - - -10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 - -11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 - ---- - -`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 - -`5` Windowsシステムでは検出できない。 - -`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) - diff --git a/automanual/new_delete/4-2-1-1.md b/automanual/new_delete/4-2-1-1.md deleted file mode 100644 index d6cbb63..0000000 --- a/automanual/new_delete/4-2-1-1.md +++ /dev/null @@ -1,105 +0,0 @@ -## 4.2. 入出力節 - -図4-9-入出力節構文 - -![alt text](Image/4-9.png) - -入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 - -1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - -### 4.2.1. ファイル管理段落 - -図4-10-ファイル管理段落構文 - -![alt text](Image/4-10.png) - -ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 - -1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 - -2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 - -3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 - - SELECT My-File ASSIGN TO DISK DISPLAY. - - 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 - - SELECT My-File ASSIGN TO DISPLAY. - - -4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 - - - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 - - この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - - 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 - - 表4-11-ステータスコード - - |ステータス値 | 意味 | - | :--- | :--- | - |00 | 成功| - |02 | 成功(重複レコードキーが検出された)| - |05 | 成功(オプションファイルが存在しない)| - |07 | 成功(ユニットが存在しない)| - |10 |ファイル終了| - |14 |キー範囲外| - |21 |キーが無効である| - |22 |キーの値の重複が検出された| - |23 |キーが存在しない| - |30 |永続的入出力エラー| - |31 |ファイル名に一貫性がない| - |34 |ファイル区域外である| - |35 |ファイルが存在しない| - |37 |アクセス権拒否| - |38 |ファイルがロックで閉じられている| - |39 |属性の矛盾が検出された| - |41 |ファイルが既に開かれている| - |42 |ファイルが開かれていない| - |43 |読み込みが行われていない| - |44 |レコードのオーバーフロー| - |46 |読み込みエラー| - |47 |OPEN INPUTが拒否された| - |48 |OPEN OUTPUTが拒否された| - |49 |OPEN I/Oが拒否された| - |51 |レコードがロックされている| - |52 |ページ終了| - |57 |LINAGE指定が無効である| - |61 |ファイル共有の失敗| - |91 |ファイルが利用できない| - -5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 - -#### 4.2.1.1. 順編成ファイル - -図4-12-順編成ファイルの指定 - -![alt text](Image/4-12.png) - -SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 - -1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 - -2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 - -3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 - -4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 - -5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 - -6. 固定長と可変長、両方のレコード形式がサポートされている。 - -7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 - -8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/new_delete/4-2-1-2.md b/automanual/new_delete/4-2-1-2.md deleted file mode 100644 index 87969ca..0000000 --- a/automanual/new_delete/4-2-1-2.md +++ /dev/null @@ -1,22 +0,0 @@ -#### 4.2.1.2. 相対編成ファイル - -図4-13-相対編成ファイルの指定 - -![alt text](Image/4-13.png) - -RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 - -1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 - -2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 - -3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 - -4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 - -7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/new_delete/4-2-1-3.md b/automanual/new_delete/4-2-1-3.md deleted file mode 100644 index b0c2ca7..0000000 --- a/automanual/new_delete/4-2-1-3.md +++ /dev/null @@ -1,24 +0,0 @@ -#### 4.2.1.3. 索引編成ファイル - -図4-14-索引編成ファイルの指定 - -![alt text](Image/4-14.png) - -RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 - -例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 - -1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 - -4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 - -5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 - -6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 - -7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/new_delete/4-2-2.md b/automanual/new_delete/4-2-2.md deleted file mode 100644 index b1a35fa..0000000 --- a/automanual/new_delete/4-2-2.md +++ /dev/null @@ -1,15 +0,0 @@ -### 4.2.2. 入出力管理段落 - -図4-15-入出力管理段落構文 - -![alt text](Image/4-15.png) - - -入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 - -1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 - -2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 - -3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 - diff --git a/automanual/new_delete/5-1.md b/automanual/new_delete/5-1.md deleted file mode 100644 index 7bd633d..0000000 --- a/automanual/new_delete/5-1.md +++ /dev/null @@ -1,50 +0,0 @@ -# 5. データ部 - -図5-1-データ部の形式 - -![alt text](Image/5-1.png) - -データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 - -1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 - -2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) - -3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 - -4. 局所場所はネストされたプログラムでは使用できない。 - -5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 - -6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 - -## 5.1. ファイル記述 - -図5-2-ファイル記述構文 - -![alt text](Image/5-2.png) - -プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 - -1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 - -2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 - -3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 - -4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 - -5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 - -6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 - -7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 - - 図5-3-LINAGE句指定ページ構造 - - ![alt text](Image/5-3.png) - -8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 - -9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 - diff --git a/automanual/new_delete/5-2.md b/automanual/new_delete/5-2.md deleted file mode 100644 index 0347911..0000000 --- a/automanual/new_delete/5-2.md +++ /dev/null @@ -1,19 +0,0 @@ -## 5.2. 整列用記述 - -図5-4-整列用記述段落 - -![alt text](Image/5-4.png) - - -整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 - -1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 - -2. 整列用ファイルをディスクに割り当てる必要がある。 - -3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 - -4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 - -5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 - diff --git a/automanual/new_delete/5-3.md b/automanual/new_delete/5-3.md deleted file mode 100644 index 161cf86..0000000 --- a/automanual/new_delete/5-3.md +++ /dev/null @@ -1,295 +0,0 @@ -## 5.3. データ記述の形式 - -図5-5-データ記述の一般形式 - -![alt text](Image/5-5.png) - -ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 - -1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 - -2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 - - - | | | - | --- | --- | - | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | - | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | - | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | - | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | - - - この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 - -3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 - -4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 - - 表5-6-データのクラス定義 PICTURE記号(9/A/X) - - | 基本記号 | 意味・使用方法 | - | :--- | :--- | - | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | - | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | - | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | - | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | - - 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: - - | | | - | --- | --- | - | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | - | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | - | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | - | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | - - - - 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 - - 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 - - 表5-7-数値形式オプションのPICTURE記号(P/S/V) - - | 数値形式のオプション記号 | 意味・使用方法 | - | :--- | :--- | - | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | - | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | - | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | - -5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 - - 表5-8-符号エンコード文字 - - | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | - | :---: | :---: |:---: | - | 0 | 0 | p | - | 1 | 1 | q | - | 2 | 2 | r | - | 3 | 3 | s | - | 4 | 4 | t | - | 5 | 5 | u | - | 6 | 6 | v | - | 7 | 7 | w | - | 8 | 8 | x | - | 9 | 9 | y | - - SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 - - -6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 - - 表5-9-数字編集PICTURE記号 - - | 編集記号 | 意味・使用方法 | - | :--- | :--- | - | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | - | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | - | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | - | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | - | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | - | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | - | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | - | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | - | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | - | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | - - 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 - -7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 - -8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 - -9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 - -10. EXTERNAL句は、77または01レベルでのみ指定できる。 - -11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 - -12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 - -13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 - -14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 - - 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. - - 以下のように割り当てられる。 - - ![alt text](Image/5-3-9.png) - - 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 - ``` - 05 X OCCURS 3 TIMES. - 10 A PIC X(1). - 10 B PIC X(1). - 10 C PIC X(1). - ``` - ![alt text](Image/5-3-10.png) - - 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 - -15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 - -16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 - -17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 - - ``` - PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 - PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” - PIC 9(3) VALUE 1 – 次の値を保持する 001 - PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 - ``` - -18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 - -19. BASED句とANY LENGTH句を併用することはできない。 - -20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 - -21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 - -22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 - -23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 - -24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある - - a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 - - b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 - - c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 - - d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 - - e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 - - f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 - -25. 次の表は、利用可能なUSAGE句をまとめたものである。 - - 表5-10-USAGE句一覧
- - | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| - | :--- | :--- |:--- | :--- |:--- | :--- | - | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | - | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | - |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | - | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | - | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | - | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | - | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | - | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | - | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | - | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | - | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | - | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | - | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | - | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | - | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | - | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | - | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | - | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | - | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | - | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | - | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | - -26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 - - ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 - - リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 - - CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 - - 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 - - バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 - -27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 - -28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 - -29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 - - a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 - - b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 - - c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 - - 図5-11-SYNCHRONIZED句の効果 - - ![alt text](Image/5-11.png) - - 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 - - SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 - -30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 - - a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 - - b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 - ``` - 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 - - ``` - 05 SHIRT-SIZE-VALUES. - 10 PIC X(4) VALUE “S 14”. - 10 PIC X(4) VALUE “M 15”. - 10 PIC X(4) VALUE “L 16”. - 10 PIC X(4) VALUE “XL17”. - 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - - - cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) - - 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 - - ``` - 05 X OCCURS 6 TIMES. - 10 A PIC X(1) VALUE “?‟. - 10 B PIC X(1) VALUE “%‟. - 10 N PIC 9(2) VALUE 10. - ``` - - この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 - ---- -`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 - -`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 - -`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 - -`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 - diff --git a/automanual/new_delete/5-4.md b/automanual/new_delete/5-4.md deleted file mode 100644 index 94bdfd9..0000000 --- a/automanual/new_delete/5-4.md +++ /dev/null @@ -1,18 +0,0 @@ -## 5.4. 条件名 - -図5-12-レベル88条件名記述構文 - -![alt text](Image/5-12.png) - -条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 - -1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 - -2. また、ストレージを占有しない。 - -3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 - -4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 - -5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 - diff --git a/automanual/new_delete/5-5.md b/automanual/new_delete/5-5.md deleted file mode 100644 index da8d3c9..0000000 --- a/automanual/new_delete/5-5.md +++ /dev/null @@ -1,12 +0,0 @@ -## 5.5. 定数記述 - -図5-13-78レベル定数記述構文 - -![alt text](Image/5-13.png) - -この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 - -1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 - -2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 - diff --git a/automanual/new_delete/5-6.md b/automanual/new_delete/5-6.md deleted file mode 100644 index 0991f14..0000000 --- a/automanual/new_delete/5-6.md +++ /dev/null @@ -1,98 +0,0 @@ -## 5.6. 画面記述 - -図5-14-画面節データ項目記述構文 - -![alt text](Image/5-14-1.png) -![alt text](Image/5-14-2.png) - -上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 - -1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 - -2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 - -3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 - -4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 - -5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 - -6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 - -7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` - -8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 - -9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 - -10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 - -11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 - - LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 - - もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 - - TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 - - 必要に応じてCOLUMNはCOLに省略が可能である。 - -12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 - - 表5-15-番号によって指定される画面色 - - | 整数 | 色 | - | :---: | :---: | - | 0 | 黒 | - | 1 | 青 | - | 2 | 緑 | - | 3 | 青緑 | - | 4 | 赤 | - | 5 | 赤紫 | - | 6 | 黄 | - | 7 | 白 | - -13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 - - 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
- - - | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | - | :---: | :---: |:---: | - | 0 | 黒 | 暗灰 | - | 1 | 暗青/藍 | 明青 | - | 2 | 暗緑 | 明緑 | - | 3 | 暗青緑 | 明青緑 | - | 4 | 暗赤 | 明赤 | - | 5 | 暗赤紫 | 明赤紫 | - | 6 | 金/茶 | 黄 | - | 7 | 明灰 | 白 | - - -14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 - -15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 - - ``` - 78 Black VALUE 0. - 78 Blue VALUE 1. - 78 Green VALUE 2. - 78 White VALUE 7. - ・・・ - 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ - 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ - 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ - ``` - DEF項目の色は緑と白になる(XYZから継承される) - -16. VALUE句は変更できない固定のテキストを定義するために使用される。 - -17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 - -18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 - -19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 - ---- -`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 - diff --git a/automanual/new_delete/6-1-1.md b/automanual/new_delete/6-1-1.md deleted file mode 100644 index 3acc843..0000000 --- a/automanual/new_delete/6-1-1.md +++ /dev/null @@ -1,31 +0,0 @@ -# 6. 手続き部 - -## 6.1. 構成要素 - -### 6.1.1. 表の参照 - -COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 - -4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: - -``` - 01 GRID. - 05 GRID-ROW OCCURS 3 TIMES. - 10 GRID-COLUMN OCCURS 4 TIMES. - 15 GRID-CHARACTER PIC X(1). -``` - -次の図で網掛けされているGRID-CHARACTERは、 - -![alt text](Image/6-0.png) - - -次のコードで参照できる。 - - GRID-CHARACTER(2, 3) - -添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または -これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 - -算術式については[6.1.4.1](6-1-4-1.md)で説明する。 - diff --git a/automanual/new_delete/6-1-2.md b/automanual/new_delete/6-1-2.md deleted file mode 100644 index a855435..0000000 --- a/automanual/new_delete/6-1-2.md +++ /dev/null @@ -1,47 +0,0 @@ -### 6.1.2. データ名の修飾 - -COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 - -動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: - -``` - 01 EMPLOYEE. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). - 01 CUSTOMER. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). -``` - -それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: - - MOVE “Philadelphia” TO CITY. - -この問題を解決するために、CITYの参照を次のように修飾できる。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. - -残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. - -これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 - - MOVE “Philadelphia” TO CITY OF EMPLOYEE. - -テーブルへの参照を修飾する場合は次のように記述する。 - - 一意名-1 OF 一意名-2(添え字・・・) - -予約語の「IN」は「OF」の代わりとして使うことができる。 - diff --git a/automanual/new_delete/6-1-3.md b/automanual/new_delete/6-1-3.md deleted file mode 100644 index fa94d49..0000000 --- a/automanual/new_delete/6-1-3.md +++ /dev/null @@ -1,23 +0,0 @@ -### 6.1.3. 部分参照 - -図6-1-部分参照構文 - -![alt text](Image/6-1.png) - -COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 - -開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 - -ここでいくつか例を挙げる。 - -| | | -| --- | --- | -| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | -| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | -| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | -| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | -| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | - - -参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 - diff --git a/automanual/new_delete/6-1-4-1.md b/automanual/new_delete/6-1-4-1.md deleted file mode 100644 index cfee90a..0000000 --- a/automanual/new_delete/6-1-4-1.md +++ /dev/null @@ -1,50 +0,0 @@ -### 6.1.4. 式 - -opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 - -- 数値結果を計算する「算術式」 - -- TRUEまたはFALSE値を計算する「条件式」 - -0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 - -#### 6.1.4.1. 算術式 - -算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 - -| 優先順位 演算子 | 意味 | - | :---: | :--- | - | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| - | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | - | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | - | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | - | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | - | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | - | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | - -COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 - -1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 - -2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 - -3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 - -4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 - -5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 - -6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 - -ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 - -| 式 | 計算結果 | 解説 | -| :--- | :--- |:--- | -| 3 * 4 + 1|13|* は + よりも優先される。 | -| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | -| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | -| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | -| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | - -もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 - diff --git a/automanual/new_delete/6-1-4-2.md b/automanual/new_delete/6-1-4-2.md deleted file mode 100644 index f1a85b8..0000000 --- a/automanual/new_delete/6-1-4-2.md +++ /dev/null @@ -1,141 +0,0 @@ -#### 6.1.4.2. 条件式 - -条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 - -##### 6.1.4.2.1. 条件名(レベル88項目) - -次のコードは最も単純な条件の一例である。 - -``` - 05 SHIRT-SIZE PIC 99V9. - 88 LILLIPUTIAN VALUE 0 THRU 12.5 - 88 XS VALUE 13 THRU 13.5. - 88 S VALUE 14, 14.5. - 88 M VALUE 15, 15.5. - 88 L VALUE 16, 16.5. - 88 XL VALUE 17, 17.5. - 88 XXL VALUE 18, 18.5. - 88 HUMUNGOUS VALUE 19 THRU 99.9. -``` - -条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 - - - IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 - - -または次のように条件名「XL」を使用することもできる。 - - IF XL - -##### 6.1.4.2.2. 字類条件 - -図6-9-字類条件構文 - -![alt text](Image/6-9.png) - -字類条件は、データ項目に格納されている現在のデータ型を判別する。 - -1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 - -2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 - -3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 - -4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 - -5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 - -6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 - -7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 - - ``` - SPECIAL-NAMES. - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. - ``` - -次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 - -``` - IF Entered-Value IS Hexadecimal - PERFORM 150-Process-Hex-Value - END-IF -``` - -##### 6.1.4.2.3. 正負条件 -図6-10-正負条件構文 - -![alt text](Image/6-10.png) - -正負条件は、PIC 9データ項目の数値状態を判別する。 - -1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 - -2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 - -##### 6.1.4.2.4. スイッチ状態条件 -図6-11-スイッチ状態条件 - -![alt text](Image/6-11.png) - -特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 - -##### 6.1.4.2.5. 比較条件 -図6-12-比較条件構文 - -![alt text](Image/6-12.png) - -比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 - -1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 - -2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 - -##### 6.1.4.2.6. 組み合わせ条件 -図6-13-組み合わせ条件構文 - -![alt text](Image/6-13.png) - -組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 - -1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 - -2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 - -3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 -``` - IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 -``` -以下のように省略される。 -``` - IF ACCOUNT-STATUS = 1 OR 2 OR 7 -``` - -4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 - - ``` - FALSE OR TRUE AND TRUE 結果:TRUE - (FALSE OR FALSE) AND TRUE 結果:FALSE - FALSE OR (FALSE AND TRUE) 結果:TRUE - ``` - -##### 6.1.4.2.7. 否定条件 -図6-14-否定条件構文 - -![alt text](Image/6-14.png) - -否定条件はNOT演算子を用いて、条件を否定する。 - -1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 - -2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 -``` - NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE - 結果:FALSE - NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) - 結果:TRUE - NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) - 結果:FALSE -``` - diff --git a/automanual/new_delete/6-1-5.md b/automanual/new_delete/6-1-5.md deleted file mode 100644 index 5ce0394..0000000 --- a/automanual/new_delete/6-1-5.md +++ /dev/null @@ -1,45 +0,0 @@ -### 6.1.5. ピリオド(.) - -COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 - -``` - MOVE SPACES TO Employee-Address - ADD 1 TO Record-Counter - DISPLAY “Record-Counter=” Record-Counter -``` - -一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 - -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest - DISPLAY “Interest Amount = “ Interest -``` - -この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 - -しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: - -``` - IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 - GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 - GIVING Interest DISPLAY “Interest Amount = “ Interest -``` - -では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 - -そこで用いるのが完結文である。 - -COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest. - DISPLAY “Interest Amount = “ Interest -``` - -二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 - diff --git a/automanual/new_delete/6-1-6.md b/automanual/new_delete/6-1-6.md deleted file mode 100644 index 00c1644..0000000 --- a/automanual/new_delete/6-1-6.md +++ /dev/null @@ -1,39 +0,0 @@ -### 6.1.6. 動詞/END-動詞 - -1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 - -``` - IF A = 1 - IF B = 1 - DISPLAY “A & B = 1” - ELSE - IF B = 1 - DISPLAY “A NOT = 1 BUT B = 1” - ELSE - DISPLAY “NEITHER A NOR B = 1”. -``` - -このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 - -![alt text](Image/6-16-1.png) - -NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 - -1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: - -![alt text](Image/6-16-2.png) - -しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 - -![alt text](Image/6-16-3.png) - -COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 - -COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` - -既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 - ---- -`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 - -`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? diff --git a/automanual/new_delete/6-1-7.md b/automanual/new_delete/6-1-7.md deleted file mode 100644 index 72515da..0000000 --- a/automanual/new_delete/6-1-7.md +++ /dev/null @@ -1,17 +0,0 @@ -### 6.1.7. 特殊レジスタ - -opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 - -表6-15-特殊レジスタ - -| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | -| :--- | :--- |:--- | -| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | -| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | -| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | -| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | -| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | - ---- -`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 - diff --git a/automanual/new_delete/6-1-8-1.md b/automanual/new_delete/6-1-8-1.md deleted file mode 100644 index 5983e7e..0000000 --- a/automanual/new_delete/6-1-8-1.md +++ /dev/null @@ -1,27 +0,0 @@ -### 6.1.8. ファイルへの同時アクセス制御 - -データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 - -すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 - -#### 6.1.8.1. ファイル共有 - -opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 - -OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 - -ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 - -| 共有オプション |効果 | -| :--- | :--- | -| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | -| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | -| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | - -誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 - ---- -`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 - -`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 - diff --git a/automanual/new_delete/6-1-8-2.md b/automanual/new_delete/6-1-8-2.md deleted file mode 100644 index f985ce0..0000000 --- a/automanual/new_delete/6-1-8-2.md +++ /dev/null @@ -1,18 +0,0 @@ -#### 6.1.8.2. レコードロック - -レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 - -ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 - -レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 - -| レコードロック オプション |効果 | -| :--- | :--- | -| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | -| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | -| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | -| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | - - -使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 - diff --git a/automanual/new_delete/6-10.md b/automanual/new_delete/6-10.md deleted file mode 100644 index 58cb864..0000000 --- a/automanual/new_delete/6-10.md +++ /dev/null @@ -1,10 +0,0 @@ -## 6.10. COMMIT - -図6-37-COMMIT構文 - -![alt text](Image/6-37-Commit.png) - -COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 - -1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 - diff --git a/automanual/new_delete/6-11.md b/automanual/new_delete/6-11.md deleted file mode 100644 index a1e99da..0000000 --- a/automanual/new_delete/6-11.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.11. COMPUTE - -図6-38-COMPUTE構文 - -![alt text](Image/6-38-Compute.png) - -COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 - -1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 - -2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 - diff --git a/automanual/new_delete/6-12.md b/automanual/new_delete/6-12.md deleted file mode 100644 index 10cb703..0000000 --- a/automanual/new_delete/6-12.md +++ /dev/null @@ -1,26 +0,0 @@ -## 6.12. CONTINUE - -図6-39-CONTINUE構文 - -![alt text](Image/6-39-Continue.png) - -CONTINUE文は動作がないためアクションを実行しない。 - -1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 - - ![alt text](Image/6-12-1.png) - - 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 - -2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 - - ![alt text](Image/6-12-2.png) - -COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 - - IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ - -プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 - -従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 - diff --git a/automanual/new_delete/6-13-1.md b/automanual/new_delete/6-13-1.md deleted file mode 100644 index c196ed7..0000000 --- a/automanual/new_delete/6-13-1.md +++ /dev/null @@ -1,24 +0,0 @@ -## 6.13. DELETE - -### 6.13.1. DELETE文の書き方1 ― DELETE - -図6-40-DELETE構文(レコードの削除) - -![alt text](Image/6-40-Delete.png) - -DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 - -1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 - -2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 - -3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 - -4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 - -5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 - -6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 - -7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 - diff --git a/automanual/new_delete/6-13-2.md b/automanual/new_delete/6-13-2.md deleted file mode 100644 index f6c4455..0000000 --- a/automanual/new_delete/6-13-2.md +++ /dev/null @@ -1,14 +0,0 @@ -### 6.13.2. DELETE文の書き方2 ― DELETE FILE - -図6-41-DELETE FILE構文(ファイルの削除) - -![alt text](Image/6-41(delete).png) - -DELETE FILE文は、ディスクファイルを削除する。 - -1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 - -2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 - -3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 - diff --git a/automanual/new_delete/6-14-1.md b/automanual/new_delete/6-14-1.md deleted file mode 100644 index c1221fa..0000000 --- a/automanual/new_delete/6-14-1.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.14. DISPLAY - -### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE - -図6-42-DISPLAY構文(UPON CONSOLE) - -![alt text](Image/6-42-Display.png) - -プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 - -1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 - -2. 指定するニーモニック名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義のニーモニック名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 - -3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 - diff --git a/automanual/new_delete/6-14-2.md b/automanual/new_delete/6-14-2.md deleted file mode 100644 index 291c1f4..0000000 --- a/automanual/new_delete/6-14-2.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス - -図6-43-DISPLAY構文(コマンドライン引数へのアクセス) - -![alt text](Image/6-43-Display.png) - -後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 - -1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 - diff --git a/automanual/new_delete/6-14-3.md b/automanual/new_delete/6-14-3.md deleted file mode 100644 index dcb6f0a..0000000 --- a/automanual/new_delete/6-14-3.md +++ /dev/null @@ -1,22 +0,0 @@ -### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 - -図6-44-DISPLAY構文(環境変数へのアクセス/設定) - -![alt text](Image/6-44-Display.png) - -環境変数を作成または変更するために使われる。 - -1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 - - DISPLAY - environment-variable-name UPON ENVIRONMENT-NAME - END-DISPLAY - DISPLAY - environment-variable-name UPON ENVIRONMENT-VALUE - END-DISPLAY - - -2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 - -3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 -  diff --git a/automanual/new_delete/6-14-4.md b/automanual/new_delete/6-14-4.md deleted file mode 100644 index 47d6b34..0000000 --- a/automanual/new_delete/6-14-4.md +++ /dev/null @@ -1,16 +0,0 @@ -### 6.14.4. DISPLAY文の書き方4 ― 画面データ - -図6-45-DISPLAY構文(画面データ) - -![alt text](Image/6-45-Display.png) - -形式化された画面にデータを表示する。 - -1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 - -2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 - -4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 - diff --git a/automanual/new_delete/6-14-5.md b/automanual/new_delete/6-14-5.md deleted file mode 100644 index 9c6955c..0000000 --- a/automanual/new_delete/6-14-5.md +++ /dev/null @@ -1,8 +0,0 @@ -### 6.14.5. DISPLAY文の例外処理 - -図6-46-DISPLAY構文(例外処理) - -![alt text](Image/6-46-Display.png) - -DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 - diff --git a/automanual/new_delete/6-15-1.md b/automanual/new_delete/6-15-1.md deleted file mode 100644 index e27d5e0..0000000 --- a/automanual/new_delete/6-15-1.md +++ /dev/null @@ -1,18 +0,0 @@ -## 6.15. DIVIDE - -### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO - -図6-47-DIVIDE INTO構文 - -![alt text](Image/6-47-Divide.png) - -指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new_delete/6-15-2.md b/automanual/new_delete/6-15-2.md deleted file mode 100644 index 89dbecc..0000000 --- a/automanual/new_delete/6-15-2.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING - -図6-48-DIVIDE INTO GIVING構文 - -![alt text](Image/6-48-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new_delete/6-15-3.md b/automanual/new_delete/6-15-3.md deleted file mode 100644 index da155e6..0000000 --- a/automanual/new_delete/6-15-3.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING - -図6-49-DIVIDE BY GIVING構文 - -![alt text](Image/6-49-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new_delete/6-15-4.md b/automanual/new_delete/6-15-4.md deleted file mode 100644 index 8918cde..0000000 --- a/automanual/new_delete/6-15-4.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER - -図6-50-DIVIDE INTO REMAINDER構文 - -![alt text](Image/6-50-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new_delete/6-15-5.md b/automanual/new_delete/6-15-5.md deleted file mode 100644 index e0e7003..0000000 --- a/automanual/new_delete/6-15-5.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER - -図6-51-DIVIDE BY REMAINDER構文 - -![alt text](Image/6-51-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/new_delete/6-16.md b/automanual/new_delete/6-16.md deleted file mode 100644 index ff1e640..0000000 --- a/automanual/new_delete/6-16.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.16. ENTRY - -図6-52-ENTRY構文 - -![alt text](Image/6-52-Entry.png) - -ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 - -1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 - -2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 - -3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 - diff --git a/automanual/new_delete/6-17.md b/automanual/new_delete/6-17.md deleted file mode 100644 index fe614e9..0000000 --- a/automanual/new_delete/6-17.md +++ /dev/null @@ -1,52 +0,0 @@ -## 6.17. EVALUATE - -図6-53-EVALUATE構文 - -![alt text](Image/6-53-Evaluate.png) - -EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 - -1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 - -2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: - - - Legal: Not Legal: - - (3 + Years-Of-Service) THROUGH 99 0 THRU “A” - - “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is - - X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) - - 15.7 THROUGH 19.4 - -3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択サブジェクトと呼ばれ、各WHEN句の後に指定された値は選択オブジェクトと呼ばれる。 - -4. 各WHEN句には、EVALUATE文の選択サブジェクトと同じ数の選択オブジェクトが必要である。 - -5. 各EVALUATE句の選択サブジェクトは、選択オブジェクトに対応する各WHEN句と等しいかどうかテストされる。 - -6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 - -7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 - -8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 - -9. ANYの選択オブジェクトを使うと、ANYと一致する選択サブジェクトと自動的に合致する。 - -ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 - -1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 - -2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 - -3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 - -4. 上記以外の種類の口座には利子が適用されない。 - -これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 - -図6-54-EVALUATE文のデモプログラム -![alt text](Image/6-54-Evaluate.png) - diff --git a/automanual/new_delete/6-18.md b/automanual/new_delete/6-18.md deleted file mode 100644 index 2f8d3bd..0000000 --- a/automanual/new_delete/6-18.md +++ /dev/null @@ -1,35 +0,0 @@ -## 6.18. EXIT - -図6-55-EXIT構文 - -![alt text](Image/6-55-Exit.png) - -EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 - -1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 - - 図6-56-EXIT文
- ![alt text](Image/6-56-Exit.png) - -2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 - -3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 - -4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 - - EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 - - 図6-57-EXIT PARAGRAPH文
- ![alt text](Image/6-57-Exit.png) - -5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 - -6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 - -7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 - - 図6-58-EXIT PERFORM文
- ![alt text](Image/6-58-Exit.png) - -8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 - diff --git a/automanual/new_delete/6-19.md b/automanual/new_delete/6-19.md deleted file mode 100644 index 249fae7..0000000 --- a/automanual/new_delete/6-19.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.19. FREE - -図6-59-FREE構文 - -![alt text](Image/6-59-Free.png) - -FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 - -1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 - -2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 - -3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 - -4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 - diff --git a/automanual/new_delete/6-2.md b/automanual/new_delete/6-2.md deleted file mode 100644 index 145e530..0000000 --- a/automanual/new_delete/6-2.md +++ /dev/null @@ -1,24 +0,0 @@ -## 6.2. 記述形式 - -図6-16-記述形式構文 - -![alt text](Image/6-16.png) - -手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 - -手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 - -1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 - -2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 - -3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 - -4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 - -5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 - -6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 - -7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 - diff --git a/automanual/new_delete/6-20.md b/automanual/new_delete/6-20.md deleted file mode 100644 index b8a62b7..0000000 --- a/automanual/new_delete/6-20.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.20. GENERATE - -図6-60-GENERATE構文 - -![alt text](Image/6-60-Generate.png) - -GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - diff --git a/automanual/new_delete/6-21.md b/automanual/new_delete/6-21.md deleted file mode 100644 index e6460f3..0000000 --- a/automanual/new_delete/6-21.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.21. GOBACK - -図6-61-GOBACK構文 - -![alt text](Image/6-61-Goback.png) - -GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 - -1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 - -2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 - diff --git a/automanual/new_delete/6-22-1.md b/automanual/new_delete/6-22-1.md deleted file mode 100644 index 5745f59..0000000 --- a/automanual/new_delete/6-22-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.22. GO TO - -### 6.22.1. GO TO文の書き方1 ― GO TO - -図6-62-GOTO構文 - -![alt text](Image/6-62-Goto.png) - -プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 - -1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 - diff --git a/automanual/new_delete/6-22-2.md b/automanual/new_delete/6-22-2.md deleted file mode 100644 index ac064ad..0000000 --- a/automanual/new_delete/6-22-2.md +++ /dev/null @@ -1,22 +0,0 @@ -### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON - -図6-63-GOTO DEPENDING ON構文 - -![alt text](Image/6-63-Goto.png) - -文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 - -1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 - -2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 - -3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 - -4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 - - 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE - - ![alt text](Image/6-64-Goto.png) - - 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 - diff --git a/automanual/new_delete/6-23.md b/automanual/new_delete/6-23.md deleted file mode 100644 index a5334d9..0000000 --- a/automanual/new_delete/6-23.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.23. IF - -図6-65-IF構文 - -![alt text](Image/6-65-If.png) - -IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 - -1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 - diff --git a/automanual/new_delete/6-24.md b/automanual/new_delete/6-24.md deleted file mode 100644 index ef2d1c8..0000000 --- a/automanual/new_delete/6-24.md +++ /dev/null @@ -1,36 +0,0 @@ -## 6.24. INITIALIZE - -図6-66-INITIALIZE構文 - -![alt text](Image/6-66-Initialize.png) - -INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 - -1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 - - - 一意名-1として指定されたすべての基本項目。 - - - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: - - - USAGE INDEX項目は除外される。 - - - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 - - 以上は受け取り項目のリストである。 - -2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 - -3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 - -4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 - -5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 - -6. 各受け取り項目の初期化は、以下のルールに従って行われる。 - - - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 - - - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 - - - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 - diff --git a/automanual/new_delete/6-25.md b/automanual/new_delete/6-25.md deleted file mode 100644 index 091d700..0000000 --- a/automanual/new_delete/6-25.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.25. INITIATE - -図6-67-INITIATE構文 - -![alt text](Image/6-67-Initiate.png) - -INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - diff --git a/automanual/new_delete/6-26.md b/automanual/new_delete/6-26.md deleted file mode 100644 index c3bc80c..0000000 --- a/automanual/new_delete/6-26.md +++ /dev/null @@ -1,81 +0,0 @@ -## 6.26. INSPECT - -図6-68-INSPECT構文 - -![alt text](Image/6-68-Inspect.png) - -INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 - -1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 - -2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 - -3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 - -INSPECT文のルールは、指定された句によって異なる。 - -**TALLYING句の場合:** - -TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 - -1. 一意名-2は編集不可の数値項目でなければならない。 - -2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 - -3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 - - a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 - -4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 - - 図6-69-INSPECT文TALLYING句の例
- ![alt text](Image/6-69-Inspect.png) - - 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない - -**REPLACING句の場合:** - -REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 - -1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 - -3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 - -5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -6. ターゲット文字列は次のように識別できる: - - a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - -7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 - -**CONVERTING句の場合:** - -CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 - -1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 - -3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 - -4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 - -6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 - -8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 - diff --git a/automanual/new_delete/6-27.md b/automanual/new_delete/6-27.md deleted file mode 100644 index 99b472f..0000000 --- a/automanual/new_delete/6-27.md +++ /dev/null @@ -1,49 +0,0 @@ -## 6.27. MERGE - -図6-70-MERGE構文 - -![alt text](Image/6-70-Merge.png) - -MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 - -1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 - -2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 - -3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 - -5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 - - MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 - -6. USING句で指定されたファイルには、以下のルールが適用される。 - - a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 - - b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 - - c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 - -7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 - -8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 - -9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 - -10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 - -11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 - -12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 - -13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** - -14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 - -15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 - ---- -`21` [4.2.2](4-2-2.md)参照。 - diff --git a/automanual/new_delete/6-28-1.md b/automanual/new_delete/6-28-1.md deleted file mode 100644 index 23619cf..0000000 --- a/automanual/new_delete/6-28-1.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.28. MOVE - -### 6.28.1. MOVE文の書き方1 ― MOVE - -図6-71-MOVE構文 - -![alt text](Image/6-71-Move.png) - -特定の値を一つ以上の受け取りデータ項目に移動することができる。 - -1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 - -2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 - diff --git a/automanual/new_delete/6-28-2.md b/automanual/new_delete/6-28-2.md deleted file mode 100644 index 7b76e5d..0000000 --- a/automanual/new_delete/6-28-2.md +++ /dev/null @@ -1,84 +0,0 @@ -### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING - -図6-72-MOVE CORRESPONDING構文 - -![alt text](Image/6-72-Move.png) - -同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 - -1. CORRESPONDINGという単語は、CORRと省略される場合がある。 - -2. 一意名-1と一意名-2の両方が集団項目でなければならない。 - -3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: - - a. どちらも同じ名前ではあるがFILLERではない。 - - b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 - - c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 - - d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 - - e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 - -4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 - -この規則は、以下の例題を使うとよく理解できる。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. corrdemo. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 X. - 05 A VALUE 'A' PIC X(1). - 05 G1. - 10 G2. - 15 B VALUE 'B' PIC X(1). - 05 C. - 10 FILLER VALUE 'C' PIC X(1). - 05 G3. - 10 G4. - 15 D VALUE 'D' PIC X(1). - 05 V1 VALUE 'E' PIC X(1). - 05 E REDEFINES V1 PIC X(1). - 05 F VALUE 'F' PIC X(1). - 05 G VALUE ALL 'G'. - 10 G2 OCCURS 4 TIMES PIC X(1). - 05 H VALUE ALL 'H' PIC X(4). - 01 Y. - 02 A PIC X(1). - 02 G1. - 03 G2. - 04 B PIC X(1). - 02 C PIC X(1). - 02 G3. - 03 G5. - 04 D PIC X(1). - 02 E PIC X(1). - 02 V2 PIC X(1). - 02 G PIC X(4). - 02 H OCCURS 4 TIMES PIC X(1). - 66 F RENAMES V2. - PROCEDURE DIVISION. - 100-Main. - MOVE ALL '-' TO Y. - DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. - DISPLAY 'Before: ' Y. - MOVE CORR X TO Y. - DISPLAY ' After: ' Y. - STOP RUN - -DISPLAY文で表示される結果は以下の通りである。 - - Names: ABCDEFGGGGHHHH - Before: -------------- - After: ABC---GGGG---- - -- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 -- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 -- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 -- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 -- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 -- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 - diff --git a/automanual/new_delete/6-29-1.md b/automanual/new_delete/6-29-1.md deleted file mode 100644 index 5c73830..0000000 --- a/automanual/new_delete/6-29-1.md +++ /dev/null @@ -1,18 +0,0 @@ -## 6.29. MULTIPLY - -### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY - -図6-73-MULTIPLY BY構文 - -![alt text](Image/6-73-Multiply.png) - -算術積を実行する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. それぞれ一意名-2を掛けた一意名-1またはinteger-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - diff --git a/automanual/new_delete/6-29-2.md b/automanual/new_delete/6-29-2.md deleted file mode 100644 index 9dfa607..0000000 --- a/automanual/new_delete/6-29-2.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING - -図6-74-MULTIPLY GIVING構文 - -![alt text](Image/6-74-Multiply.png) - -二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. 一意名-1および一意名-2の値は変更できない。 - -5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - diff --git a/automanual/new_delete/6-3.md b/automanual/new_delete/6-3.md deleted file mode 100644 index 045f192..0000000 --- a/automanual/new_delete/6-3.md +++ /dev/null @@ -1,18 +0,0 @@ -## 6.3. 宣言の記述形式 - -図6-17-宣言構文 - -![alt text](Image/6-17.png) - -プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 - -1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 - -2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 - -4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 - -5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 - diff --git a/automanual/new_delete/6-30.md b/automanual/new_delete/6-30.md deleted file mode 100644 index db20748..0000000 --- a/automanual/new_delete/6-30.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.30. NEXT SENTENCE - -図6-75-NEXT SENTENCE構文 - -![alt text](Image/6-75-Nextsentnce.png) - -NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 - -1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 - -2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 - -3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 - -4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 - diff --git a/automanual/new_delete/6-31.md b/automanual/new_delete/6-31.md deleted file mode 100644 index 6e28b8f..0000000 --- a/automanual/new_delete/6-31.md +++ /dev/null @@ -1,31 +0,0 @@ -## 6.31. OPEN - -図6-76-OPEN構文 - -![alt text](Image/6-76-Open.png) - -OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 - -1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 - -2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 - -3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 - -4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 - - | オプション | 処理 | - | --- | --- | - | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | - | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | - | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - -5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 - -6. WITH NO REWIND句とWITH LOCK句は機能しない。 - - WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 - - WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 - diff --git a/automanual/new_delete/6-32-1.md b/automanual/new_delete/6-32-1.md deleted file mode 100644 index 42cfe04..0000000 --- a/automanual/new_delete/6-32-1.md +++ /dev/null @@ -1,64 +0,0 @@ -## 6.32. PERFORM - -### 6.32.1. PERFORM文の書き方1 ― 手続き型 - -図6-77-手続き型PERFORM構文 - -![alt text](Image/6-77-Perform.png) - -制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 - -1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 - -2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 - -3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 -4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 - -5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 - -6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 - -7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 - -8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 - -9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 - -10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 - -11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 - - - 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 - - ![alt text](Image/6-32-1-1.png) - - ``` - 01 PERFORM-DEMO. - 05 PD-ROW OCCURS 3 TIMES. - 10 PD-COL OCCURS 4 TIMES. - 15 PD PIC X(1). - 01 PD-Col-No PIC 9 COMP. - 01 PD-Row-No PIC 9 COMP. - ``` - ![alt text](Image/6-32-1-2.png) - - ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 - PERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 - AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. - ``` - ![alt text](Image/6-32-1-3.png) - - 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. - ``` - diff --git a/automanual/new_delete/6-32-2.md b/automanual/new_delete/6-32-2.md deleted file mode 100644 index 3936f36..0000000 --- a/automanual/new_delete/6-32-2.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.32.2. PERFORM文の書き方2 ― インライン型 - -図6-78-インライン型PERFORM構文 - -![alt text](Image/6-78-Perform.png) - -PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 - -1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 - -2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 - diff --git a/automanual/new_delete/6-33-1.md b/automanual/new_delete/6-33-1.md deleted file mode 100644 index fd4efa6..0000000 --- a/automanual/new_delete/6-33-1.md +++ /dev/null @@ -1,36 +0,0 @@ -## 6.33. READ - -### 6.33.1. READ文の書き方1 ― 順次読み取り - -図6-79-READ構文(順次読み取り) - -![alt text](Image/6-79-Read.png) - -ファイルから次の(または前の)レコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 - -5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 - -7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 - -8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 - -11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 - diff --git a/automanual/new_delete/6-33-2.md b/automanual/new_delete/6-33-2.md deleted file mode 100644 index 3c4523c..0000000 --- a/automanual/new_delete/6-33-2.md +++ /dev/null @@ -1,44 +0,0 @@ -### 6.33.2. READ文の書き方2 ― ランダム読み取り - -図6-80-READ構文(ランダム読み取り) - -![alt text](Image/6-80-Read.png) - -ファイルから任意のレコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 - -5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 - - KEY句がない場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 - - KEY句が指定されている場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 - -6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 - -10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 - diff --git a/automanual/new_delete/6-34.md b/automanual/new_delete/6-34.md deleted file mode 100644 index fb7aee9..0000000 --- a/automanual/new_delete/6-34.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.34. RELEASE - -図6-81-RELEASE構文 - -![alt text](Image/6-81-Release.png) - -RELEASE文は、整列ファイルに新しいレコードを追加する。 - -1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 - -2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 - diff --git a/automanual/new_delete/6-35.md b/automanual/new_delete/6-35.md deleted file mode 100644 index 2a02c3c..0000000 --- a/automanual/new_delete/6-35.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.35. RETURN - -図6-82-RETURN構文 - -![alt text](Image/6-82-Return.png) - -RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 - -1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 - -2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 - -3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 - diff --git a/automanual/new_delete/6-36.md b/automanual/new_delete/6-36.md deleted file mode 100644 index 5fc3275..0000000 --- a/automanual/new_delete/6-36.md +++ /dev/null @@ -1,34 +0,0 @@ -## 6.36. REWRITE - -図6-83-REWRITE構文 - -![alt text](Image/6-83-Rewrite.png) - -REWRITE文は、ディスクファイル上の論理レコードを置き換える。 - -1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 - -2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 - -3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 - -4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 - -6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: - - a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 - - b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 - -7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: - - a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 - - b. レコード名-1のサイズは更新される可能性がある。 - -8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 - -9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 - diff --git a/automanual/new_delete/6-37.md b/automanual/new_delete/6-37.md deleted file mode 100644 index aeb0332..0000000 --- a/automanual/new_delete/6-37.md +++ /dev/null @@ -1,10 +0,0 @@ -## 6.37. ROLLBACK - -図6-84-ROLLBACK構文 - -![alt text](Image/6-84-Rollback.png) - -ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 - -1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 - diff --git a/automanual/new_delete/6-38-1.md b/automanual/new_delete/6-38-1.md deleted file mode 100644 index d05e06c..0000000 --- a/automanual/new_delete/6-38-1.md +++ /dev/null @@ -1,26 +0,0 @@ -## 6.38. SEARCH - -### 6.38.1. SEARCH文の書き方1 ― 順次探索 - -図6-85-SEARCH構文(順次探索) - -![alt text](Image/6-85-Search.png) - -SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 - -1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 - -2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 - -3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: - ``` - SET 指標名-1 TO 1 - ``` -4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 - -5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 - -6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 - -7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 -  diff --git a/automanual/new_delete/6-38-2.md b/automanual/new_delete/6-38-2.md deleted file mode 100644 index c1e8a3d..0000000 --- a/automanual/new_delete/6-38-2.md +++ /dev/null @@ -1,61 +0,0 @@ -### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) - -図6-86-SEARCH構文(二分探索) - -![alt text](Image/6-86-Search.png) - -整列されたテーブルに対して二分探索を実行する。 - -1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 - -2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 - - a. テーブルは上記1項の要件を満たしている。 - - b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` - - c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 - - aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 - -3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 - -4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 - -5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 - -6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 - -7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 - -8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` - - a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 - - b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 - - - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 - - - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 - - - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 - - c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 - - d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 - -上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 - -コンピュータ研究者は、二つの探索方法を次のように比較する: - -- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 - -- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 - -探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 - ---- -`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 - -`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 - diff --git a/automanual/new_delete/6-39-1.md b/automanual/new_delete/6-39-1.md deleted file mode 100644 index dbc9f68..0000000 --- a/automanual/new_delete/6-39-1.md +++ /dev/null @@ -1,22 +0,0 @@ -## 6.39. SET - -### 6.39.1. SET文の書き方1 ― 環境設定 - -図6-87-SET構文(環境設定) - -![alt text](Image/6-87-Set.png) - -プログラム内から環境値を簡単に設定することができる。 - -1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 - -2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 - - DSIPLAY SET ENVIRONMENT “VARNAME” TO - "VALUE" - “VARNAME” UPON ENVIRONMENT-NAME - END-DISPLAY - DSIPLAY - “VALUE” UPON ENVIRONMENT-VALUE - END-DISPLAY - diff --git a/automanual/new_delete/6-39-2.md b/automanual/new_delete/6-39-2.md deleted file mode 100644 index 2d79aca..0000000 --- a/automanual/new_delete/6-39-2.md +++ /dev/null @@ -1,16 +0,0 @@ -### 6.39.2. SET文の書き方2 ― プログラムポインター設定 - -図6-88-SET構文(プログラムポインター設定) - -![alt text](Image/6-88-Set.png) - -手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 - -1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 - -2. program-pointer-1はプログラムポインターとして使用しなければならない。 - -3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 - -4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 - diff --git a/automanual/new_delete/6-39-3.md b/automanual/new_delete/6-39-3.md deleted file mode 100644 index 17af070..0000000 --- a/automanual/new_delete/6-39-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.39.3. SET文の書き方3 ― アドレス設定 - -図6-89-SET構文(アドレス設定) - -![alt text](Image/6-89-Set.png) - -データ項目の内容ではなく、アドレスを処理するために使われる。 - -1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 - -2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 - diff --git a/automanual/new_delete/6-39-4.md b/automanual/new_delete/6-39-4.md deleted file mode 100644 index 6e54a5f..0000000 --- a/automanual/new_delete/6-39-4.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.39.4. SET文の書き方4 ― インデックス設定 - -図6-90-SET構文(インデックス設定) - -![alt text](Image/6-90-Set.png) - -USAGE INDEXデータ項目に値を割り当てる。 - -1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 - diff --git a/automanual/new_delete/6-39-5.md b/automanual/new_delete/6-39-5.md deleted file mode 100644 index 0d19591..0000000 --- a/automanual/new_delete/6-39-5.md +++ /dev/null @@ -1,11 +0,0 @@ -### 6.39.5. SET文の書き方5 ― UP/DOWN設定 - -図6-91-SET構文(UP/DOWN設定) - -![alt text](Image/6-91-Set.png) - -インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 - -1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 - -2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 diff --git a/automanual/new_delete/6-39-6.md b/automanual/new_delete/6-39-6.md deleted file mode 100644 index 5a6e842..0000000 --- a/automanual/new_delete/6-39-6.md +++ /dev/null @@ -1,14 +0,0 @@ -### 6.39.6. SET文の書き方6 ― 条件名設定 - -図6-92-SET構文(条件名設定) - -![alt text](Image/6-92-Set.png) - -レベル88条件名のTRUE/FALSE値を指定することができる。 - -1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 - -2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 - -3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 - diff --git a/automanual/new_delete/6-39-7.md b/automanual/new_delete/6-39-7.md deleted file mode 100644 index 637d4c6..0000000 --- a/automanual/new_delete/6-39-7.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.39.7. SET文の書き方7 ― スイッチ設定 - -図6-93-SET構文(スイッチ設定) - -![alt text](Image/6-93-Set.png) - -スイッチをオンまたはオフにする。 - -1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 - diff --git a/automanual/new_delete/6-4-1.md b/automanual/new_delete/6-4-1.md deleted file mode 100644 index 3778313..0000000 --- a/automanual/new_delete/6-4-1.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.4. ACCEPT - -### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り - -図6-18-ACCEPT構文(コンソールからの読み取り) - -![alt text](Image/6-18.png) - -コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 - -1. FROM句を使う場合、指定するニーモニック名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義のニーモニック名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 - -2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 - diff --git a/automanual/new_delete/6-4-2.md b/automanual/new_delete/6-4-2.md deleted file mode 100644 index db82816..0000000 --- a/automanual/new_delete/6-4-2.md +++ /dev/null @@ -1,25 +0,0 @@ -### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 - -図6-19-ACCEPT構文(コマンドライン引数) - -![alt text](Image/6-19.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 - -2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 - - - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 - - - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 - - - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 - -3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 - -4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 - diff --git a/automanual/new_delete/6-4-3.md b/automanual/new_delete/6-4-3.md deleted file mode 100644 index 7e96959..0000000 --- a/automanual/new_delete/6-4-3.md +++ /dev/null @@ -1,17 +0,0 @@ -### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 - -図6-20-ACCEPT構文(環境変数値の取得) - -![alt text](Image/6-20.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 - -2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 - -3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 - diff --git a/automanual/new_delete/6-4-4.md b/automanual/new_delete/6-4-4.md deleted file mode 100644 index 993a6ed..0000000 --- a/automanual/new_delete/6-4-4.md +++ /dev/null @@ -1,20 +0,0 @@ -### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 - -図6-21-ACCEPT構文(画面データの取得) - -![alt text](Image/6-21.png) - -画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 - -1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 - -2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 - -4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 - -5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 - -6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - diff --git a/automanual/new_delete/6-4-5.md b/automanual/new_delete/6-4-5.md deleted file mode 100644 index 80d6812..0000000 --- a/automanual/new_delete/6-4-5.md +++ /dev/null @@ -1,14 +0,0 @@ -### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 - -図6-22-ACCEPT構文(日付/時刻の取得)構文 - -![alt text](Image/6-22.png) - -システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 - -1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 - - 表6-23-ACCEPTオプション(日付/時刻の取得) - - ![!\[alt text\](Image/6-23.png)](Image/6-23.png) - diff --git a/automanual/new_delete/6-4-6.md b/automanual/new_delete/6-4-6.md deleted file mode 100644 index 8fcfc08..0000000 --- a/automanual/new_delete/6-4-6.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 - -図6-24-ACCEPT(画面サイズデータの取得)構文 - -![alt text](Image/6-24.png) - -プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 - -1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 - diff --git a/automanual/new_delete/6-4-7.md b/automanual/new_delete/6-4-7.md deleted file mode 100644 index 6ff0c0a..0000000 --- a/automanual/new_delete/6-4-7.md +++ /dev/null @@ -1,8 +0,0 @@ -### 6.4.7. ACCEPT文の例外処理 - -図6-25-ACCEPT例外処理構文 - -![alt text](Image/6-25.png) - -ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 - diff --git a/automanual/new_delete/6-40-1.md b/automanual/new_delete/6-40-1.md deleted file mode 100644 index f203b04..0000000 --- a/automanual/new_delete/6-40-1.md +++ /dev/null @@ -1,82 +0,0 @@ -## 6.40. SORT - -### 6.40.1. SORT文の書き方1 ― ファイルソート - -図6-94-SORT構文(ファイルソート) - -![alt text](Image/6-94-Sort.png) - -一つ以上のキー項目に従って、大量のデータを整列することができる。 - -1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 - -2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 - -3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 - -6. SORT文は次の3段階の働きがある。 - - ステージ1(入力フェーズ): - - a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 - - b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 - - c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 - - d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 - - e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 - - g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 - - h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 - - ステージ2(ソートフェーズ): - - a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - - b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 - - SORT Sort-File - ASCENDING KEY Transaction-Date - ASCENDING KEY Account-Number - DESCENDING KEY Transaction-Amount - . - . - . - - - このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 - - c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 - - ステージ3(出力フェーズ): - - a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 - - b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 - - c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 - - d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 - - e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 - - g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 - -7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 - ---- -`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 - -`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 - diff --git a/automanual/new_delete/6-40-2.md b/automanual/new_delete/6-40-2.md deleted file mode 100644 index 59e778b..0000000 --- a/automanual/new_delete/6-40-2.md +++ /dev/null @@ -1,22 +0,0 @@ -### 6.40.2. SORT文の書き方2 ― テーブルソート - -図6-95-SORT構文(テーブルソート) - -![alt text](Image/6-95-Set.png) - -一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 - -1. テーブル名データ項目には、OCCURS句が必要である。 - -2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 - -3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 - -5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 - -6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - -7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 - diff --git a/automanual/new_delete/6-41.md b/automanual/new_delete/6-41.md deleted file mode 100644 index 0d5429e..0000000 --- a/automanual/new_delete/6-41.md +++ /dev/null @@ -1,34 +0,0 @@ -## 6.41. START - -図6-96-START構文 - -![alt text](Image/6-96-Start.png) - -START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 - -1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 - -2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 - -3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 - -4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 - -5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 - -6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 - -7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 - - a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 - - b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 - -8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 - -9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 - -10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 - -11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 - diff --git a/automanual/new_delete/6-42.md b/automanual/new_delete/6-42.md deleted file mode 100644 index 7d12ec5..0000000 --- a/automanual/new_delete/6-42.md +++ /dev/null @@ -1,19 +0,0 @@ -## 6.42. STOP - -図6-97-STOP構文 - -![alt text](Image/6-97-Stop.png) - -STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 - -1. RETURNING句とGIVING句は同意義のものとして利用できる。 - -2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 - -3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 - -4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: - - STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE - STOP RUN - diff --git a/automanual/new_delete/6-43.md b/automanual/new_delete/6-43.md deleted file mode 100644 index 255f905..0000000 --- a/automanual/new_delete/6-43.md +++ /dev/null @@ -1,30 +0,0 @@ -## 6.43. STRING - -図6-98-STRING構文 - -![alt text](Image/6-98-String.png) - -STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 - -1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 - -2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 - -3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 - -4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 - -5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 - -6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 - -7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 - -8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 - -9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 - -10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 - -11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 - diff --git a/automanual/new_delete/6-44-1.md b/automanual/new_delete/6-44-1.md deleted file mode 100644 index 2d51a41..0000000 --- a/automanual/new_delete/6-44-1.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.44. SUBTRACT - -### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM - -図6-99-SUBSTRACT構文 - -![alt text](Image/6-99-Subtract.png) - -FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/new_delete/6-44-2.md b/automanual/new_delete/6-44-2.md deleted file mode 100644 index 5e5b0cd..0000000 --- a/automanual/new_delete/6-44-2.md +++ /dev/null @@ -1,16 +0,0 @@ -### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING - -図6-100-SUBSTRACT GIVING構文 - -![alt text](Image/6-100-Subtract.png) - -FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/new_delete/6-44-3.md b/automanual/new_delete/6-44-3.md deleted file mode 100644 index 9001dcf..0000000 --- a/automanual/new_delete/6-44-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING - -図6-101-SUBSTRACT CORRESPONDING構文 - -![alt text](Image/6-101-Subtract.png) - -二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 - -1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/new_delete/6-45.md b/automanual/new_delete/6-45.md deleted file mode 100644 index 6bc0b86..0000000 --- a/automanual/new_delete/6-45.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.45. SUPPRESS - -図6-102-SUPPRESS構文 - -![alt text](Image/6-102-Suppress.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 - diff --git a/automanual/new_delete/6-46.md b/automanual/new_delete/6-46.md deleted file mode 100644 index 8ec0703..0000000 --- a/automanual/new_delete/6-46.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.46. TERMINATE - -図6-103-TERMINATE構文 - -![alt text](Image/6-103-Terminate.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 - diff --git a/automanual/new_delete/6-47.md b/automanual/new_delete/6-47.md deleted file mode 100644 index 7ad4f71..0000000 --- a/automanual/new_delete/6-47.md +++ /dev/null @@ -1,24 +0,0 @@ -## 6.47. TRANSFORM - -図6-104-TRANSFORM構文 - -![alt text](Image/6-104-Transform.png) - -TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 - -1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 - -2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 - -3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 - -4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 - -5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 - - 図6-105-機能的なTRANSFORM文 - - ![alt text](Image/6-105-Transform.png) - diff --git a/automanual/new_delete/6-48.md b/automanual/new_delete/6-48.md deleted file mode 100644 index 2696b86..0000000 --- a/automanual/new_delete/6-48.md +++ /dev/null @@ -1,15 +0,0 @@ -## 6.48. UNLOCK - -図6-106-UNLOCK構文 - -![alt text](Image/6-106-Unlock.png) - -この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 - -1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 - -2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 - ---- -`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 - diff --git a/automanual/new_delete/6-49.md b/automanual/new_delete/6-49.md deleted file mode 100644 index b7db717..0000000 --- a/automanual/new_delete/6-49.md +++ /dev/null @@ -1,61 +0,0 @@ -## 6.49. UNSTRING - -図6-107-UNSTRING構文 - -![alt text](Image/6-107-Unstring.png) - -UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 - -1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 - -2. 定数-1および定数-2は、英数字の定数でなければならない。 - -3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 - -4. 一意名-10の値は0より大きい必要がある。 - -5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 - -6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 - -7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 - -8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 - -9. ソース文字列が部分文字列に解析される例を次に示す: - - ![alt text](Image/6-49-1.png) - - 図6-108-STRING文の例 - - ![alt text](Image/6-108-Unstring.png) - - 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 - - ![alt text](Image/6-49-2.png) - - すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 - - すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 - -10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-3.png) - -11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-4.png) - -12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 - -13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 - -14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 - -15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 - ---- -`27` 空白文字列のMOVEは、空白のMOVEと同じである。 - -`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 - diff --git a/automanual/new_delete/6-5-1.md b/automanual/new_delete/6-5-1.md deleted file mode 100644 index a21c2f9..0000000 --- a/automanual/new_delete/6-5-1.md +++ /dev/null @@ -1,26 +0,0 @@ -## 6.5. ADD - -### 6.5.1. ADD文の書き方1 ― ADD TO - -図6-26-ADD TO構文 - -![alt text](Image/6-26.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 - -4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 - -5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 - - 図6-27-ON SIZE ERROR句を使用するサンプルプログラム - - ![alt text](Image/6-27.png) - -6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 - diff --git a/automanual/new_delete/6-5-2.md b/automanual/new_delete/6-5-2.md deleted file mode 100644 index f99be48..0000000 --- a/automanual/new_delete/6-5-2.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.5.2. ADD文の書き方2 ― ADD GIVING - -図6-28-ADD GIVING構文 - -![alt text](Image/6-28.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. 一意名-2の内容は変更できない。 - -5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - diff --git a/automanual/new_delete/6-5-3.md b/automanual/new_delete/6-5-3.md deleted file mode 100644 index a200cb6..0000000 --- a/automanual/new_delete/6-5-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING - -図6-29-ADD CORRESPONDING構文 - -![alt text](Image/6-29.png) - -二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 - -1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - diff --git a/automanual/new_delete/6-50.md b/automanual/new_delete/6-50.md deleted file mode 100644 index 166d7a3..0000000 --- a/automanual/new_delete/6-50.md +++ /dev/null @@ -1,81 +0,0 @@ -## 6.50. WRITE - -図6-109-WRITE構文 - -![alt text](Image/6-109-Write.png) - -WRITE文は、OPENファイルに新しいレコードを書き込む。 - -1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 - -2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 - -3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 - -4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 - -5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 - -6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 - -7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 - -8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 - -9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 - -10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 - -11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 - -12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 - -13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: - - a. AFTER ADVANCINGが指定されている場合: - - - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - c. BEFORE ADVANCINGが指定されている場合: - - - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 - - - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 - -14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 - - FD Report-File - LINAGE IS 66 LINES - ........WITH FOOTER AT 57 - ........LINES AT TOP 3 - ........LINES AT BOTTOM 3 - . - . - . - OPEN OUTPUT Report-File - PERFORM Generate-Page-Header - . - . - . - WRITE Report-Rec AFTER ADVANCING 1 LINE - AT END-OF-PAGE PERFORM Generate-Page-Header - END-WRITE - . - . - . - CLOSE Report-File - -15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 - -16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 - -17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 - diff --git a/automanual/new_delete/6-6.md b/automanual/new_delete/6-6.md deleted file mode 100644 index 010bca5..0000000 --- a/automanual/new_delete/6-6.md +++ /dev/null @@ -1,42 +0,0 @@ -## 6.6. ALLOCATE - -図6-30-ALLOCATE構文 - -![alt text](Image/6-30.png) - -ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 - -1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 - -2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 - -3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 - -4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 - -5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 -6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 - -7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 - -8. 基本的な使用法は二つあり、最も単純なものは次の例である。 - - ALLOCATE My-01-Item - - `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 - - 二つ目の使用法は以下の通りである。 - - ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. - - SET ADDRESS OF My-01-Item TO The-Pointer. - - ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 - - 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 - -9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 - ---- -`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 - diff --git a/automanual/new_delete/6-7.md b/automanual/new_delete/6-7.md deleted file mode 100644 index bd033c9..0000000 --- a/automanual/new_delete/6-7.md +++ /dev/null @@ -1,47 +0,0 @@ -## 6.7. CALL - -図6-31-CALL構文 - -![alt text](Image/6-31.png) - -CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 - -1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 - -2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 - -3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 - -4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 - -5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 - -6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 - -7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 - -8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 - -9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 - -10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 - -11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 - - 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) - - ![alt text](Image/6-32.png) - -12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 - - 図6-33-CALL BY VALUE句 - - ![alt text](Image/6-33.png) - -13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 - -14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 - ---- -`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 - diff --git a/automanual/new_delete/6-8-1.md b/automanual/new_delete/6-8-1.md deleted file mode 100644 index 69edccd..0000000 --- a/automanual/new_delete/6-8-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.8. CANSEL - -### 6.8.1. CANCEL文の書き方1 ― CANCEL - -図6-34-CANCEL構文 - -![alt text](Image/6-34.png) - -CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 - -1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 - diff --git a/automanual/new_delete/6-8-2.md b/automanual/new_delete/6-8-2.md deleted file mode 100644 index 8d6803a..0000000 --- a/automanual/new_delete/6-8-2.md +++ /dev/null @@ -1,8 +0,0 @@ -### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL - -図6-35-CANCEL ALL構文 - -![alt text](Image/6-35(cancel).png) - -CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 - diff --git a/automanual/new_delete/6-9.md b/automanual/new_delete/6-9.md deleted file mode 100644 index 90a3261..0000000 --- a/automanual/new_delete/6-9.md +++ /dev/null @@ -1,22 +0,0 @@ -## 6.9. CLOSE - -図6-36-CLOSE構文 - -![alt text](Image/6-36-CLOSE.png) - -CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 - -1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 - -2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 - -3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 - -4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 - -5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 - -6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 - -7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 - diff --git a/automanual/new_delete/7-1.md b/automanual/new_delete/7-1.md deleted file mode 100644 index 5d7c127..0000000 --- a/automanual/new_delete/7-1.md +++ /dev/null @@ -1,20 +0,0 @@ -# 7. 日本語の使用 - -日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 - -## 7.1. 英数字項目の日本語 - -文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 - - - 01 データ項目1 PIC X(8) VALUE"顧客code" - - 01 データ項目2 PIC X(10) VALUE"顧客コード" - -データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 - -注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 - -1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 -2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) - diff --git a/automanual/new_delete/7-2.md b/automanual/new_delete/7-2.md deleted file mode 100644 index 7267dc2..0000000 --- a/automanual/new_delete/7-2.md +++ /dev/null @@ -1,13 +0,0 @@ -## 7.2. 日本語項目と表意定数 - -日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 - -表7-1-日本語項目と表意定数の値 - -| 表意定数 | シフトJISコード | -| --- | :--- | -| SPACE(S) | 日本語空白文字 X"8140" | -| HIGH-VALUE(S) | X"FFFF" | -| LOW-VALUE(S) | X"0000" | -| ALL 定数 | 定数の値に依存する | - diff --git a/automanual/new_delete/7-3-1.md b/automanual/new_delete/7-3-1.md deleted file mode 100644 index d5284d0..0000000 --- a/automanual/new_delete/7-3-1.md +++ /dev/null @@ -1,49 +0,0 @@ -## 7.3. 各命令文と日本語の取扱い - -### 7.3.1. MOVE文 - -MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 - -表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 - -表7-2-転記の処理方法 - -| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | -| :--- | :--- | :--- | -| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | -| 非整数 | 日本語,日本語編集 | コンパイルエラー | -| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 日本語,日本語編集 | 英字 | そのまま転記 | -| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | -| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | -| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | - -データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 - -文字には半角カタカナも含まれる。 - -ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 - -受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 - -表7-3-送出し側データ項目の内容に対する処理方法 - -| 送出し側データ項目の内容 | 処理方式 | -| --- | --- | -| 正しい文字 | 全角文字へコード変換 | -| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | -| 正しい日本語文字 | そのまま転記 | -| 不正な日本語文字(≠文字) | そのまま転記 | -| X”00” | X”0000”29 | -| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | -| X”FF” | X”FFFF” | -| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | - -ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 - ---- -`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 - diff --git a/automanual/new_delete/7-3-2.md b/automanual/new_delete/7-3-2.md deleted file mode 100644 index df3acf6..0000000 --- a/automanual/new_delete/7-3-2.md +++ /dev/null @@ -1,6 +0,0 @@ -### 7.3.2. ACCEPT/DISPLAY文 - -ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 - -日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 - diff --git a/automanual/new_delete/7-4.md b/automanual/new_delete/7-4.md deleted file mode 100644 index b7b50ea..0000000 --- a/automanual/new_delete/7-4.md +++ /dev/null @@ -1,12 +0,0 @@ -## 7.4. UTF-8の使用 - -opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 - -1. PICTURE句において、「N」1つは3バイトと見なす。 - -2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 - -3. 空白詰めは半角空白で行われる。 - -4. STRING文において、項目の種類が混在した時のチェックを抑止する。 - diff --git a/automanual/new_delete/8-1-1.md b/automanual/new_delete/8-1-1.md deleted file mode 100644 index 783f243..0000000 --- a/automanual/new_delete/8-1-1.md +++ /dev/null @@ -1,12 +0,0 @@ -# 8. opensource COBOLシステムインターフェース - -## 8.1. opensource COBOLコンパイラの使い方(cobc) - -### 8.1.1. 解説 - -プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 -プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 -空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 -opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 -opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 - diff --git a/automanual/new_delete/8-1-2.md b/automanual/new_delete/8-1-2.md deleted file mode 100644 index 1f0a78b..0000000 --- a/automanual/new_delete/8-1-2.md +++ /dev/null @@ -1,88 +0,0 @@ -### 8.1.2. コンパイルオプション - -次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 - - 使い方: cobc [options] file... - オプション: - --help このメッセージを表示します - --version, -V コンパイラのバージョンを表示します - -v コンパイラが起動したプログラムを表示します - -x 実行可能プログラムをビルドします - -m 動的ロード可能モジュールをビルドします(デフォルト) - -std=<方言> 指定した方言に基づいて警告/機能します : - cobol2002 Cobol 2002 - cobol85 Cobol 85 - ibm IBM互換 - mvs MVS互換 - bs2000 BS2000互換 - mf Micro Focus互換 - default 指定しない - config/default.conf および config/*.conf を参照してください - -free 自由形式を使用します - -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します - -fixed 固定形式を使用します(デフォルト) - -O, -O2, -Os 最適化を有功にします - -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします - -debug すべての実行時エラーチェックを有功にします - -o <ファイル> 出力先を <ファイル> にします - -b すべての入力ファイルをひとつに結合します - 動的ロード可能モジュール - -E 前処理のみ; コンパイルやリンクを行いません - -C トランスレートのみ; COBOL から C へ変換します - -S コンパイルのみ; アセンブリファイルを出力します - -c コンパイルとアセンブルを行い、リンクを行いません - -t <ファイル> プログラムリストを <ファイル> に生成します - -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます - -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます - -l ライブラリ をリンクします - -B Cコンパイルフェーズに を追加します - -Q Cリンクフェーズに を追加します - -D Cコンパイラに を渡します - -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください - --list-reserved 予約語の一覧を表示します - --list-intrinsics 組み込み関数の一覧を表示します - --list-mnemonics 作成者語の一覧を表示します - -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) - -MT 依存関係リストで使用される対象ファイルを指定します - -MF <ファイル> 依存関係リストを <ファイル> に生成します - -ext 既定のファイル拡張子を追加します - -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします - -reference_check 実行時の参照チェックを有効にします - -constant(=) $IF 文で評価する定数名 に 値 を設定します - - -W すべての警告を有功にする - -Wall 以下を除くすべての警告を有功にする - -Wobsolete 廃要素が使われていれば警告する - -Warchaic 古い仕様が使われていれば警告する - -Wredefinition データ項目の再定義を警告する - -Wconstant 不適切な定数を警告する - -Wparentheses OR と AND が括弧なしで並んでいれば警告する - -Wstrict-typing タイプの不適合を厳密に警告する - -Wimplicit-define データ項目の再定義を警告する - -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する - (-Wall指定時は適用されません) - -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) - -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) - -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) - -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) - -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) - -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) - - -ftrace トレースコードの生成(実行された節/段落の追跡) - -ftraceall トレースコードの生成(実行された節/段落/文の追跡) - -fsyntax-only 文法チェックのみ。何も出力しない - -fdebugging-line デバッグ行(標識領域に'D')を有効にする - -fsource-location ソース行情報の生成(-debugか-gで有効) - -fimplicit-init Cobolラインタイム初期化の自動実行 - -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) - -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) - -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) - -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) - -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) - -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない - -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す - -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) - -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す - -[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 - diff --git a/automanual/new_delete/8-1-3.md b/automanual/new_delete/8-1-3.md deleted file mode 100644 index 7e2ea31..0000000 --- a/automanual/new_delete/8-1-3.md +++ /dev/null @@ -1,10 +0,0 @@ -### 8.1.3. 実行可能プログラムのコンパイル - -最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 - - cobc –x prog1.cbl prog2.cbl prog3.cbl - -メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 - -これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 - diff --git a/automanual/new_delete/8-1-4.md b/automanual/new_delete/8-1-4.md deleted file mode 100644 index f241eb8..0000000 --- a/automanual/new_delete/8-1-4.md +++ /dev/null @@ -1,35 +0,0 @@ -### 8.1.4. 動的にロード可能なサブプログラム - -実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 - - cobc –m sprog1.cbl -または - - cobc –m sprog1.cbl sprog2.cbl sprog3.cbl - -上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 - -次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 - -1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 - -2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 - -3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 - -4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき - - a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 - - b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 - - c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 - - - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 - - - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 - -5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 - -「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 - diff --git a/automanual/new_delete/8-1-5.md b/automanual/new_delete/8-1-5.md deleted file mode 100644 index f00e201..0000000 --- a/automanual/new_delete/8-1-5.md +++ /dev/null @@ -1,16 +0,0 @@ -### 8.1.5. 静的サブルーチン - -opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 - - cobc –S sprog1.cbl - -(注:「**-S**」は大文字で表記する) - -これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 - -メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 - - cobc –x mainprog.cbl sprog1.s - -複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 - diff --git a/automanual/new_delete/8-1-6.md b/automanual/new_delete/8-1-6.md deleted file mode 100644 index c243152..0000000 --- a/automanual/new_delete/8-1-6.md +++ /dev/null @@ -1,132 +0,0 @@ -### 8.1.6. COBOLとCプログラムの結合 - -opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 - -#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 - -COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 - -#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い - -どちらの言語も、文字列を固定長の連続した文字順序として格納する。 - -COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: - - 01 LastName PIC X(15). - -USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 - -実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: - - char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ - -Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 - -#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 - -これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 - -表8-1-Cまたはopensource COBOLのデータ型の一致 - -| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | -| :--- | :--- | :--- | :--- | -|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | -| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | -| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | -| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| -| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | -| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | -| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | -| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | -|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | -|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | -|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | -| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | - - - - -同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 - -様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 - -#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し - -CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 - -図8-2-opensource COBOLのC呼び出し - -![alt text](Image/8-2.png) - -考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 - -COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 - -Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` - -これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - $ cc –c subc.c - $ cobc -x maincob.cbl subc.o - $ maincob - Starting cobmain - Starting subc - Arg1=Arg1 - Arg2=Arg2 - Arg3=123456789 - Back - Arg1=Arg1 - Arg2=Yrg2 - Arg3=+0987654321 - Returned value=+000000002 - $ - - - -null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 - -[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 - -#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し - -ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 - -図8-3-Cのopensource COBOL呼び出し - -![alt text](Image/8-3.png) - -Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 - -「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 - -Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 - -コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl - C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob - C:\Users\Gary\Documents\Programs> mainc.exe - Starting mainc... - Starting cobsub.cbl - Arg1=Arg1 - Arg2=Arg2 - Arg3=+0123456789 - Back - Arg1=Xrg1 - Arg2=Xrg2 - Arg3=987654321 - Returned value=2 - C:\Users\Gary\Documents\Programs> - - -第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 - -ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 - ---- -`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 - -`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 - -`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 - diff --git a/automanual/new_delete/8-1-7.md b/automanual/new_delete/8-1-7.md deleted file mode 100644 index 66de2b6..0000000 --- a/automanual/new_delete/8-1-7.md +++ /dev/null @@ -1,29 +0,0 @@ -### 8.1.7. 重要な環境変数 - -次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 - -表8-4-環境変数コンパイラ - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | -| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | -| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | -| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | -|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | -| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | -| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | -| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | -| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | -| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | -| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | -|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | -|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | - ---- -`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 - diff --git a/automanual/new_delete/8-1-8.md b/automanual/new_delete/8-1-8.md deleted file mode 100644 index 9cddd97..0000000 --- a/automanual/new_delete/8-1-8.md +++ /dev/null @@ -1,24 +0,0 @@ -### 8.1.8. コンパイル時のコピーブックの検索 - -opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 - -- コンパイルされるプログラムが存在するフォルダ。 -- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 -- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 -- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 - -上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 - -- XXXXXXXX.CPY -- XXXXXXXX.CBL -- XXXXXXXX.COB -- XXXXXXXX.cpy -- XXXXXXXX.cbl -- XXXXXXXX.cob -- XXXXXXXX - -UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 - ---- -`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 - diff --git a/automanual/new_delete/8-1-9.md b/automanual/new_delete/8-1-9.md deleted file mode 100644 index cf58c51..0000000 --- a/automanual/new_delete/8-1-9.md +++ /dev/null @@ -1,116 +0,0 @@ -### 8.1.9. コンパイラ構成ファイルの使い方 - -opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 - -以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 - -``` -# COBOL compiler configuration -*- sh -*- - -# Value: any string -name: "opensource COBOL" - -# Value: int -tab-width: 8 -text-column: 72 - -# Value: 'cobol2002', 'mf', 'ibm' -# -assign-clause: mf - -# If yes, file names are resolved at run time using environment variables. -# For example, given ASSIGN TO "DATAFILE", the actual file name will be -# 1. the value of environment variable 'DD_DATAFILE' or -# 2. the value of environment variable 'dd_DATAFILE' or -# 3. the value of environment variable 'DATAFILE' or -# 4. the literal "DATAFILE" -# If no, the value of the assign clause is the file name. -# -# Value: 'yes', 'no' -filename-mapping: yes - -# Value: 'yes', 'no' -pretty-display: yes - -# Value: 'yes', 'no' -auto-initialize: yes - -# Value: 'yes', 'no' -complex-odo: no - -# Value: 'yes', 'no' -indirect-redefines: no - -# Binary byte size - defines the allocated bytes according to PIC -# Value: signed unsigned bytes -# ------ -------- ----- -# '2-4-8' 1 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1-2-4-8' 1 - 2 1 -# 3 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1--8' 1 - 2 1 - 2   1 -# 3 - 4 3 - 4 2 -# 5 - 6 5 - 7 3 -# 7 - 9 8 - 9 4 -# 10 - 11 10 - 12 5 -# 12 - 14 13 - 14 6 -# 15 - 16 15 - 16 7 -# 17 - 18 17 - 18 8 -binary-size: 1-2-4-8 - -# Value: 'yes', 'no' -binary-truncate: yes - -# Value: 'native', 'big-endian' -binary-byteorder: big-endian - -# Value: 'yes', 'no' -larger-redefines-ok: no - -# Value: 'yes', 'no' -relaxed-syntax-check: no - -# Perform type OSVS - If yes, the exit point of any currently executing perform -# is recognized if reached. -# Value: 'yes', 'no' -perform-osvs: no - -# If yes, linkage-section items remain allocated -# between invocations. -# Value: 'yes', 'no' -sticky-linkage: no - -# If yes, allow non-matching level numbers -# Value: 'yes', 'no' -relax-level-hierarchy: no - -# not-reserved: -# Value: Word to be taken out of the reserved words list -# (case independent) - -# Dialect features -# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' -author-paragraph: obsolete -memory-size-clause: obsolete -multiple-file-tape-clause: obsolete -label-records-clause: obsolete -value-of-clause: obsolete -data-records-clause: obsolete -top-level-occurs-clause: skip -synchronized-clause: ok -goto-statement-without-name: obsolete -stop-literal-statement: obsolete -debugging-line: obsolete -padding-character-clause: obsolete -next-sentence-phrase: archaic -eject-statement: skip -entry-statement: obsolete -move-noninteger-to-alphanumeric: error -odo-without-to: ok -``` - diff --git a/automanual/new_delete/8-2-1.md b/automanual/new_delete/8-2-1.md deleted file mode 100644 index 6c0e9f7..0000000 --- a/automanual/new_delete/8-2-1.md +++ /dev/null @@ -1,24 +0,0 @@ -## 8.2. opensource COBOLプログラムの実行 - -### 8.2.1. プログラムの直接実行 - -「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 - -これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 - -これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 - -プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 - -プログラムの直接実行構文は次の通りである。 - - [path]program [arguments] - -例: -``` - /usr/local/printaccount ACCT=6625378 - または - C:\Users\Me\Documents\Programs\printaccount.exe - ACCT=6625378 -``` - diff --git a/automanual/new_delete/8-2-2.md b/automanual/new_delete/8-2-2.md deleted file mode 100644 index bf162cf..0000000 --- a/automanual/new_delete/8-2-2.md +++ /dev/null @@ -1,22 +0,0 @@ -### 8.2.2. 「cobcrun」ユーティリティの使用 - -「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 - -opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 - -この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: - - [path]cobcrun program [arguments] - -プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 - -cobcrunの使用例: - - cd /usr/local - cobcrun printaccount ACCT=6625378 - または - cd C:\Users\Me\Documents\Programs - cobcrun printaccount.exe ACCT=6625378 - -cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 - diff --git a/automanual/new_delete/8-2-3.md b/automanual/new_delete/8-2-3.md deleted file mode 100644 index b0be69e..0000000 --- a/automanual/new_delete/8-2-3.md +++ /dev/null @@ -1,7 +0,0 @@ -### 8.2.3. プログラムの引数 - -プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 - -- ACCEPT ・・・ FROM COMMAND-LINE -- ACCEPT ・・・ FROM ARGUMENT-VALUE - diff --git a/automanual/new_delete/8-2-4.md b/automanual/new_delete/8-2-4.md deleted file mode 100644 index 43f0652..0000000 --- a/automanual/new_delete/8-2-4.md +++ /dev/null @@ -1,24 +0,0 @@ -### 8.2.4. 重要な環境変数 - -次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 - -表8-5-実行時環境変数 - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| -|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | -|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | -|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| -|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| -|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| -|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| -|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| - ---- -`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 -`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 -`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 - diff --git a/automanual/new_delete/8-3-1.md b/automanual/new_delete/8-3-1.md deleted file mode 100644 index db09af2..0000000 --- a/automanual/new_delete/8-3-1.md +++ /dev/null @@ -1,749 +0,0 @@ -## 8.3. 組み込みサブルーチン - -### 8.3.1. 「名前による呼び出し」ルーチン - -opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 - -これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 - - -- 現在のディレクトリの変更 -- ファイルのコピー -- ディレクトリの作成 -- ファイルの作成、開く、閉じる、読み取り、書き込み -- ディレクトリ(フォルダ)の削除 -- ファイルの削除 -- サブルーチンに渡された引数の数の決定 -- ファイル情報の取得(サイズと最終変更日時) -- サブルーチンに渡される引数の長さ(バイト単位)の取得 -- 項目の左揃え、右揃え、または中央揃えの決定 -- ファイルの移動(破壊的な「コピー」) -- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする -- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする - - 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない -- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する - -次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 - -#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* - -このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 - -*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 - -statusは次のいずれかの値を受け取る。 - -| | | -| --- | --- | -| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | -| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | -| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | - - -#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 - -[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 - -#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -第3引数は必須ではあるが、使用されない。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 - -#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -第2引数は必須ではあるが、使用されない。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 - -#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* - -このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 File-Info. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date - 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time - -変更時刻の小数点以下2桁は常に0である。 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 - -#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” - -C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 - -- なし 「R」と同じように扱われる -- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる -- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる -- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる -- それ以外 「R」として扱われる - -#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* - -このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 - -与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 - -| | | -| --- | --- | -| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | -| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | -| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | - -``` - 01 PATTERN PIC X(5) VALUE "*". - 01 DIRECTORY PIC X(256) VALUE - "./list". - 01 FILENAME PIC X(30). - 01 MYDIR PIC 9(8) COMP-5. - PROCEDURE DIVISION. - CALL "C$LIST-DIRECTORY" USING 1, - DIRECTORY, - PATTERN - END-CALL. - MOVE RETURN-CODE TO MYDIR. - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL. - PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES - DISPLAY FUNCTION TRIM(FILENAME) - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL - END-PERFORM. - CALL "C$LIST-DIRECTORY" USING 3, MYDIR - END-CALL. -``` - -#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 - -#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* - -C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 - -メインプログラムからCALLされた場合、戻り値は常に0になる。 - -[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 - -#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* - -このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 - -サイズは、RETURN-CODE特殊レジスタに返される。 - -指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 - -#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* - -C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 - -1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 - -[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 - -#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 - -#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 - -#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「AND」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 - -操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 - -[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 - -#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* - -このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 Argument-2. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-DD PIC 9(2) COMP. *> Modification Time - 05 Mod-MO PIC 9(2) COMP. - 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date - 05 Mod-HH PIC 9(2) COMP. - 05 Mod-MM PIC 9(2) COMP. - 05 Mod-SS PIC 9(2) COMP. - 05 FILLER PIC 9(2) COMP. *> This will always be 00 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 - -#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* - -CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 - -*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 - -サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 - -#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 - -#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 - -#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* - -CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 - -引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` - -後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 - -サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 - -[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 - -#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* - -CBL_DELETE_DIRを使って空のディレクトリを削除する。 - -唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 - -指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 - -RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 - -#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* - -このルーチンは、一般的なエラー処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 - -一度に有効にできるユーザ定義のエラー手続きは1つだけである。 - -エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 - -エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoerrproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Err-Proc. - SET Err-Proc-Address TO ENTRY "999-Err" - CALL "CBL_ERROR_PROC" - USING Err-Proc-Install, Err-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not' & - 'register Error Procedure' - END-IF - . - 099-Now-Test-Err-Proc. - CALL "Tilt" END-CALL - GOBACK - . - 999-Err-Proc. - ENTRY "999-Err" - DISPLAY - '** A Runtime Error Has Occurred **' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* - -このルーチンは、一般的な終了処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 - -一度に有効にできるユーザ定義の終了手続きは1つだけである。 - -終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 - -終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoexitproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Exit-Proc. - SET Exit-Proc-Address TO ENTRY "999-Exit" - CALL "CBL_EXIT_PROC" - USING Exit-Proc-Install, Exit-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not register Exit Procedure' - END-IF - 099-Now-Test-Exit-Proc. - DISPLAY - 'Executing a STOP RUN...' - END-DISPLAY - GOBACK - . - 999-Exit-Proc. - ENTRY "999-Exit" - DISPLAY - '*** STOP RUN has been executed ***' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「EQ」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* - -このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 - -このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 - -#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* - -現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 - -第1引数は使用されないが、**BY VALUE**で指定する必要がある。 - -*length*引数は**BY VALUE**で指定する必要がある。 - -*buffer*引数は**BY REFERENCE**で指定する必要がある。 - -*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 - -*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 - -ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 - -#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「IMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 1 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NIMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* - -このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 - -項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOT」プロセスを示している。 - -| 古い引数2ビット | 新しい引数2ビット | -| :---: | :---: | -| 0 | 1 | -| 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* - -CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 - -item-1として次の集団項目を定義する。 - - 01 KEISEN. - 02 KEI-CMD PIC 9(1) COMP-X. - 02 KEI-LINE PIC 9(2) COMP-X. - 02 KEI-COL PIC 9(2) COMP-X. - 02 KEI-LNG1 PIC 9(2) COMP-X. - 02 KEI-LNG2 PIC 9(2) COMP-X. - 02 KEI-COLOR PIC 9(2) COMP-X. - 02 KEI-PRN PIC 9(2) COMP-X. - -各項目の意味を以下に示す。 - -| | | -| --- | --- | -| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| -| KEI-LINE | 開始ライン(1~24) | -| KEI-COL | 開始カラム(1~80) | -| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | -| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | -| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | -| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | - -#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* - -CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 - -*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 - -1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 - -[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 - -#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* - -このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 - -*file-path*引数は、英数字定数またはデータ項目である。 - -*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 - -- 1 = 入力 (読み取り専用) -- 2 = 出力 (書き込み専用) -- 3 = 入力または出力 - -第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 - -最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 - -RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 - -[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 - -#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「OR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 1 | - - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer - -このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 - -*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* - -このサブルーチンを使用してファイル名を変更できる。 - -*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 - -このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 - -ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 - -#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 - -#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 - -#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* - -このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 -唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「XOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.42. CALL “SYSTEM” USING *command* - -このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 - -CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 - -コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 - -Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 - -ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 - -実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 - ---- -`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
-`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
- diff --git a/automanual/new_delete/9-1.md b/automanual/new_delete/9-1.md deleted file mode 100644 index f30a611..0000000 --- a/automanual/new_delete/9-1.md +++ /dev/null @@ -1,51 +0,0 @@ -# 9. サンプルプログラム - -## 9.1. FileStat-Msgs.cpy – ファイル状態コード - -このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 - -コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 - -``` - COPY FileStat-Msgs - REPLACING STATUS BY Input-File-Status - MSG BY Error-Message. -``` - -以下は、コピーブック「FileStat-Msgs.cpy」である。 - -``` - EVALUATE STATUS - WHEN 00 MOVE 'SUCCESS ' TO MSG - WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG - WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG - WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG - WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG - WHEN 10 MOVE 'END OF FILE ' TO MSG - WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG - WHEN 21 MOVE 'KEY INVALID ' TO MSG - WHEN 22 MOVE 'KEY EXISTS ' TO MSG - WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG - WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG - WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG - WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG - WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG - WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG - WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG - WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG - WHEN 41 MOVE 'ALREADY OPEN ' TO MSG - WHEN 42 MOVE 'NOT OPEN ' TO MSG - WHEN 43 MOVE 'READ NOT DONE ' TO MSG - WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG - WHEN 46 MOVE 'READ ERROR ' TO MSG - WHEN 47 MOVE 'INPUT DENIED ' TO MSG - WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG - WHEN 49 MOVE 'I/O DENIED ' TO MSG - WHEN 51 MOVE 'RECORD LOCKED ' TO MSG - WHEN 52 MOVE 'END-OF-PAGE ' TO MSG - WHEN 57 MOVE 'I/O LINAGE ' TO MSG - WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG - WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG - END-EVALUATE. -``` - diff --git a/automanual/new_delete/9-2.md b/automanual/new_delete/9-2.md deleted file mode 100644 index 510be72..0000000 --- a/automanual/new_delete/9-2.md +++ /dev/null @@ -1,198 +0,0 @@ -## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン - -次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 - -``` -IDENTIFICATION DIVISION. -PROGRAM-ID. COBDUMP. -***************************************************************** -** This is an OpenCOBOL subroutine that will generate a ** -** formatted Hex/Char dump of a storage area. To use this ** -** subroutine, simply CALL it as follows: ** -** ** -** CALL "COBDUMP" USING ** -** [ ] ** -** ** -** If specified, the argument specifies how many ** -** bytes of are to be dumped. If absent, all of ** -** will be dumped (i.e. LENGTH() will ** -** be assumed for ). ** -** ** -** >>> Note that the subroutine name MUST be specified in <<< ** -** >>> UPPERCASE <<< ** -** ** -** The dump is generated to STDERR, so you may pipe it to a ** -** file when you execute your program using "2> file". ** -** ** -** AUTHOR: GARY L. CUTLER ** -** CutlerGL@gmail.c ** -** ** -** NOTE: The author has a sentimental attachment to ** -** this subroutine - it's been around since 1971 ** -** and it's been converted to and run on 10 dif- ** -** ferent operating system/compiler environments ** -** ** -** DATE-WRITTEN: October 14, 1971 ** -** ** -***************************************************************** -** DATE CHANGE DESCRIPTION ** -** ====== ==================================================== ** -** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** -** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** -** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** -** SCREEN SECTION enhancements ** -** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** -** GC0983 Converted to IBM VS COBOL - COBOL '74 ** -** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** -** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** -** extensions ** -** GC0703 Converted to Unisys Universal Compiling System (UCS) ** -** COBOL (UCOB) - COBOL '85 ** -** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** -** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** -** 2002 features ** -** GC0410 Enhanced to make 2nd argument (buffer length) ** -** optional ** -***************************************************************** -ENVIRONMENT DIVISION. -CONFIGURATION SECTION. -REPOSITORY. - FUNCTION ALL INTRINSIC. -DATA DIVISION. -WORKING-STORAGE SECTION. -78 Undisplayable-Char-Symbol VALUE X'F9'. -01 Addr-Pointer USAGE POINTER. -01 Addr-Number REDEFINES Addr-Pointer - USAGE BINARY-LONG. - -01 Addr-Sub USAGE BINARY-CHAR. - -01 Addr-Value USAGE BINARY-LONG. - -01 Buffer-Length USAGE BINARY-LONG. - -01 Buffer-Sub COMP-5 PIC 9(4). - -01 Hex-Digits VALUE '0123456789ABCDEF'. -05 Hex-Digit OCCURS 16 TIMES PIC X(1). - -01 Left-Nibble COMP-5 PIC 9(1). -01 Nibble REDEFINES Left-Nibble - BINARY-CHAR. -01 Output-Detail. -05 OD-Addr. -10 OD-Addr-Hex OCCURS 8 TIMES PIC X. -05 FILLER PIC X(1). -05 OD-Byte PIC Z(3)9. -05 FILLER PIC X(1). -05 OD-Hex OCCURS 16 TIMES. -10 OD-Hex-1 PIC X. -10 OD-Hex-2 PIC X. -10 FILLER PIC X. -05 OD-ASCII OCCURS 16 TIMES - PIC X. -01 Output-Sub COMP-5 PIC 9(2). - -01 Output-Header-1. - 05 FILLER PIC X(80) VALUE - '<-Addr-> Byte ' & - '<---------------- Hexadecimal ----------------> ' & - '<---- Char ---->'. -01 Output-Header-2. - 05 FILLER PIC X(80) VALUE - '======== ==== ' & - '=============================================== ' & - '================'. -01 PIC-XX. -05 FILLER PIC X VALUE LOW-VALUES. -05 PIC-X PIC X. -01 PIC-Halfword REDEFINES PIC-XX - PIC 9(4) COMP-X. -01 PIC-X10. -05 FILLER PIC X(2). -05 PIC-X8 PIC X(8). -01 Right-Nibble COMP-5 PIC 9(1). - -LINKAGE SECTION. -01 Buffer PIC X ANY LENGTH. - -01 Buffer-Len USAGE BINARY-LONG. -PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. -000-COBDUMP. - IF NUMBER-OF-CALL-PARAMETERS = 1 - MOVE LENGTH(Buffer) TO Buffer-Length - ELSE - MOVE Buffer-Len TO Buffer-Length - END-IF - MOVE SPACES TO Output-Detail - SET Addr-Pointer TO ADDRESS OF Buffer - PERFORM 100-Generate-Address - MOVE 0 TO Output-Sub - DISPLAY - Output-Header-1 UPON SYSERR - END-DISPLAY - DISPLAY - Output-Header-2 UPON SYSERR - END-DISPLAY - PERFORM VARYING Buffer-Sub FROM 1 BY 1 - UNTIL Buffer-Sub > Buffer-Length - ADD 1 - TO Output-Sub - END-ADD - IF Output-Sub = 1 - MOVE Buffer-Sub TO OD-Byte - END-IF - MOVE Buffer (Buffer-Sub : 1) TO PIC-X - IF (PIC-X < ' ') - OR (PIC-X > '~') - MOVE Undisplayable-Char-Symbol - TO OD-ASCII (Output-Sub) - ELSE - MOVE PIC-X - TO OD-ASCII (Output-Sub) - END-IF - DIVIDE PIC-Halfword BY 16 - GIVING Left-Nibble - REMAINDER Right-Nibble - END-DIVIDE - ADD 1 TO Left-Nibble - Right-Nibble - END-ADD - MOVE Hex-Digit (Left-Nibble) - TO OD-Hex-1 (Output-Sub) - MOVE Hex-Digit (Right-Nibble) - TO OD-Hex-2 (Output-Sub) - IF Output-Sub = 16 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - MOVE SPACES TO Output-Detail - MOVE 0 TO Output-Sub - SET Addr-Pointer UP BY 16 - PERFORM 100-Generate-Address - END-IF -END-PERFORM -IF Output-Sub > 0 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - END-IF - EXIT PROGRAM - . -100-Generate-Address. - MOVE 8 TO Addr-Sub - MOVE Addr-Number TO Addr-Value - MOVE ALL '0' TO OD-Addr - PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 - DIVIDE Addr-Value BY 16 - GIVING Addr-Value - REMAINDER Nibble - END-DIVIDE - ADD 1 TO Nibble - MOVE Hex-Digit (Nibble) - TO OD-Addr-Hex (Addr-Sub) - SUBTRACT 1 FROM Addr-Sub -END-PERFORM -. -``` - diff --git a/automanual/new_delete/TOC.md b/automanual/new_delete/TOC.md deleted file mode 100644 index ec9ca47..0000000 --- a/automanual/new_delete/TOC.md +++ /dev/null @@ -1,236 +0,0 @@ -目次 -1. [まえがき](1-1.md) - - [1.1. opensource COBOL とは](1-1.md#11-opensource-cobolとは) - - [1.2. COBOL/opensource COBOL の重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) - - [1.2.1. COBOL プログラムの構文](1-2-1.md#121-cobolプログラムの構文) - - [1.2.2. コピーブック](1-2-2.md) - - [1.2.3. 構造化データ](1-2-3.md) - - [1.2.4. ファイル](1-2-4.md) - - [1.2.5. 表操作](1-2-5.md) - - [1.2.6. データの並び替えと結合](1-2-6.md) - - [1.2.7. 文字列操作](1-2-7.md) - - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) - - [1.3. 構文規則](1-3.md) - - [1.4. ソースコードの形式](1-4.md) - - [1.5. カンマ/セミコロンの使い方](1-5.md) - - [1.6. COPY 文の使い方](1-6.md) - - [1.7. 定数の使い方](1-7-1.md) - - [1.7.1. 数字定数](1-7-1.md#171-数字定数) - - [1.7.2. 英数字定数](1-7-2.md) - - [1.7.3. 日本語定数](1-7-3.md) - - [1.8. 表意定数の使い方](1-8.md) - - [1.9. ユーザ定義名](1-9.md) - - [1.10. LENGTH OF の使い方](1-10.md) -2. [opensource COBOL のプログラム形式](2-1.md) - - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) - - [2.2. ネストされたユーザ定義関数](2-2.md) -3. [見出し部](3.md) -4. [環境部](4-1-1.md) - - [4.1. 構成節](4-1-1.md#41-構成節) - - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) - - [4.1.2. 実行用計算機段落](4-1-2.md) - - [4.1.3. リポジトリ段落](4-1-3.md) - - [4.1.4. 特殊名段落](4-1-4.md) - - [4.2. 入出力節](4-2-1-1.md) - - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) - - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) - - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) - - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) - - [4.2.2. 入出力管理段落](4-2-2.md) -5. [データ部](5-1.md) - - [5.1. ファイル記述](5-1.md#51-ファイル記述) - - [5.2. 整列用記述](5-2.md) - - [5.3. データ記述の形式](5-3.md) - - [5.4. 条件名](5-4.md) - - [5.5. 定数記述](5-5.md) - - [5.6. 画面記述](5-6.md) -6. [手続き部](6-1-1.md) - - [6.1. 構成要素](6-1-1.md#61-構成要素) - - [6.1.1. 表の参照](6-1-1.md#611-表の参照) - - [6.1.2. データ名の修飾](6-1-2.md) - - [6.1.3. 部分参照](6-1-3.md) - - [6.1.4. 式](6-1-4-1.md) - - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) - - [6.1.4.2. 条件式](6-1-4-2.md) - - [6.1.5. ピリオド(.)](6-1-5.md) - - [6.1.6. 動詞/END-動詞](6-1-6.md) - - [6.1.7. 特殊レジスタ](6-1-7.md) - - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) - - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) - - [6.1.8.2. レコードロック](6-1-8-2.md) - - [6.2. 記述形式](6-2.md) - - [6.3. 宣言の記述形式](6-3.md) - - [6.4. ACCEPT](6-4-1.md) - - [6.4.1. ACCEPT 文の書き方 1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) - - [6.4.2. ACCEPT 文の書き方 2 ― コマンドライン引数の取得](6-4-2.md) - - [6.4.3. ACCEPT 文の書き方 3 ― 環境変数値の取得](6-4-3.md) - - [6.4.4. ACCEPT 文の書き方 4 ― 画面データの取得](6-4-4.md) - - [6.4.5. ACCEPT 文の書き方 5 ― 日付/時刻の取得](6-4-5.md) - - [6.4.6. ACCEPT 文の書き方 6 ― 画面サイズデータの取得](6-4-6.md) - - [6.4.7. ACCEPT 文の例外処理](6-4-7.md) - - [6.5. ADD](6-5-1.md) - - [6.5.1. ADD 文の書き方 1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) - - [6.5.2. ADD 文の書き方 2 ― ADD GIVING](6-5-2.md) - - [6.5.3. ADD 文の書き方 3 ― ADD CORRESPONDING](6-5-3.md) - - [6.6. ALLOCATE](6-6.md) - - [6.7. CALL](6-7.md) - - [6.8. CANCEL](6-8-1.md) - - [6.8.1. CANCEL 文の書き方 1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) - - [6.8.2. CANCEL 文の書き方 2 ― CANCEL ALL](6-8-2.md) - - [6.9. CLOSE](6-9.md) - - [6.10. COMMIT](6-10.md) - - [6.11. COMPUTE](6-11.md) - - [6.12. CONTINUE](6-12.md) - - [6.13. DELETE](6-13-1.md) - - [6.13.1. DELETE 文の書き方 1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) - - [6.13.2. DELETE 文の書き方 2 ― DELETE FILE](6-13-2.md) - - [6.14. DISPLAY](6-14-1.md) - - [6.14.1. DISPLAY 文の書き方 1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) - - [6.14.2. DISPLAY 文の書き方 2 ― コマンドライン引数へのアクセス](6-14-2.md) - - [6.14.3. DISPLAY 文の書き方 3 ― 環境変数へのアクセスまたは設定](6-14-3.md) - - [6.14.4. DISPLAY 文の書き方 4 ― 画面データ](6-14-4.md) - - [6.14.5. DISPLAY 文の例外処理](6-14-5.md) - - [6.15. DIVIDE](6-15-1.md) - - [6.15.1. DIVIDE 文の書き方 1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) - - [6.15.2. DIVIDE 文の書き方 2 ― DIVIDE INTO GIVING](6-15-2.md) - - [6.15.3. DIVIDE 文の書き方 3 ― DIVIDE BY GIVING](6-15-3.md) - - [6.15.4. DIVIDE 文の書き方 4 ― DIVIDE INTO REMAINDER](6-15-4.md) - - [6.15.5. DIVIDE 文の書き方 5 ― DIVIDE BY REMAINDER](6-15-5.md) - - [6.16. ENTRY](6-16.md) - - [6.17. EVALUATE](6-17.md) - - [6.18. EXIT](6-18.md) - - [6.19. FREE](6-19.md) - - [6.20. GENERATE](6-20.md) - - [6.21. GOBACK](6-21.md) - - [6.22. GO TO](6-22-1.md) - - [6.22.1. GO TO 文の書き方 1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) - - [6.22.2. GO TO 文の書き方 2 ― GO TO DEPENDING ON](6-22-2.md) - - [6.23. IF](6-23.md) - - [6.24. INITIALIZE](6-24.md) - - [6.25. INITIATE](6-25.md) - - [6.26. INSPECT](6-26.md) - - [6.27. MERGE](6-27.md) - - [6.28. MOVE](6-28-1.md) - - [6.28.1. MOVE 文の書き方 1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) - - [6.28.2. MOVE 文の書き方 2 ― MOVE CORRESPONDING](6-28-2.md) - - [6.29. MULTIPLY](6-29-1.md) - - [6.29.1. MULTIPLY 文の書き方 1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) - - [6.29.2. MULTIPLY 文の書き方 2 ― MULTIPLY GIVING](6-29-2.md) - - [6.30. NEXT SENTENCE](6-30.md) - - [6.31. OPEN](6-31.md) - - [6.32. PERFORM](6-32-1.md) - - [6.32.1. PERFORM 文の書き方 1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) - - [6.32.2. PERFORM 文の書き方 2 ― インライン型](6-32-2.md) - - [6.33. READ](6-33-1.md) - - [6.33.1. READ 文の書き方 1 ―順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) - - [6.33.2. READ 文の書き方 2 ― ランダム読み取り](6-33-2.md) - - [6.34. RELEASE](6-34.md) - - [6.35. RETURN](6-35.md) - - [6.36. REWRITE](6-36.md) - - [6.37. ROLLBACK](6-37.md) - - [6.38. SEARCH](6-38-1.md) - - [6.38.1. SEARCH 文の書き方 1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) - - [6.38.2. SEARCH 文の書き方 2 ― 二分探索(SEARCH ALL)](6-38-2.md) - - [6.39. SET](6-39-1.md) - - [6.39.1. SET 文の書き方 1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) - - [6.39.2. SET 文の書き方 2 ― プログラムポインター設定](6-39-2.md) - - [6.39.3. SET 文の書き方 3 ― アドレス設定](6-39-3.md) - - [6.39.4. SET 文の書き方 4 ― インデックス設定](6-39-4.md) - - [6.39.5. SET 文の書き方 5 ― UP/DOWN 設定](6-39-5.md) - - [6.39.6. SET 文の書き方 6 ― 条件名設定](6-39-6.md) - - [6.39.7. SET 文の書き方 7 ― スイッチ設定](6-39-7.md) - - [6.40. SORT](6-40-1.md) - - [6.40.1. SORT 文の書き方 1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) - - [6.40.2. SORT 文の書き方 2 ― テーブルソート](6-40-2.md) - - [6.41. START](6-41.md) - - [6.42. STOP](6-42.md) - - [6.43. STRING](6-43.md) - - [6.44. SUBTRACT](6-44-1.md) - - [6.44.1. SUBTRACT 文の書き方 1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) - - [6.44.2. SUBTRACT 文の書き方 2 ― SUBTRACT GIVING](6-44-2.md) - - [6.44.3. SUBTRACT 文の書き方 3 ― SUBTRACT CORRESPONDING](6-44-3.md) - - [6.45. SUPPRESS](6-45.md) - - [6.46. TERMINATE](6-46.md) - - [6.47. TRANSFORM](6-47.md) - - [6.48. UNLOCK](6-48.md) - - [6.49. UNSTRING](6-49.md) - - [6.50. WRITE](6-50.md) -7. [日本語の使用](7-1.md) - - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) - - [7.2. 日本語項目と表意定数](7-2.md) - - [7.3. 各命令文と日本語の取扱い](7-3-1.md) - - [7.3.1. MOVE 文](7-3-1.md#731-move文) - - [7.3.2. ACCEPT/DISPLAY 文](7-3-2.md) - - [7.4. UTF-8 の使用](7-4.md) -8. [opensource COBOL システムインターフェース](8-1-1.md) - - [8.1. opensource COBOL コンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) - - [8.1.1. 解説](8-1-1.md#811-解説) - - [8.1.2. コンパイルオプション](8-1-2.md) - - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) - - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) - - [8.1.5. 静的サブルーチン](8-1-5.md) - - [8.1.6. COBOL と C ブログラムの結合](8-1-6.md) - - [8.1.6.1. opensource COBOL ランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) - - [8.1.6.2. opensource COBOL と C の文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) - - [8.1.6.3. C データ型と opensource COBOL USAGE 句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) - - [8.1.6.4. opensource COBOL メインプログラムの C サブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) - - [8.1.6.5. C メインプログラムの opensource COBOL サブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) - - [8.1.7. 重要な環境変数](8-1-7.md) - - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) - - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) - - [8.2. opensource COBOL プログラムの実行](8-2-1.md) - - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) - - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) - - [8.2.3. プログラムの引数](8-2-3.md) - - [8.2.4. 重要な環境変数](8-2-4.md) - - [8.3. 組み込みサブルーチン](8-3-1.md) - - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) - - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) - - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) - - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) - - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) - - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) - - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) - - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) - - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) - - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) - - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) - - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) - - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) - - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) - - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) - - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) - - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) - - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) - - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) - - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) - - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) - - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) - - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) - - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) - - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) - - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) - - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) - - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) - - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) - - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) - - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) - - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) - - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) - - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) - - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) - - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) - - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) - - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) - - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) -9. [サンプルプログラム](9-1.md) - - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) - - [9.2. COBDUMP –16 進数/文字データダンプサブルーチン](9-2.md) - -[クレジット](credit.md) - - diff --git a/automanual/new_delete/credit.md b/automanual/new_delete/credit.md deleted file mode 100644 index f37ce77..0000000 --- a/automanual/new_delete/credit.md +++ /dev/null @@ -1,29 +0,0 @@ -
-opensource COBOL Programmer's Guide - -【制作】
-OSSコンソーシアム オープンCOBOLソリューション部会 - -【原著】
-Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") - -【翻訳・執筆】
-東京システムハウス株式会社 島田桃花 - -【マークダウン化】
-東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 - -【監修】
-東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
-株式会社SIT11 飯島裕一 - -【協力】(50音順)
-OVOL ICTソリューションズ株式会社
-株式会社SIT11
-株式会社CIJ
-サン情報サービス株式会社
- -【発行】
-OSSコンソーシアム オープンCOBOLソリューション部会
-URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) - diff --git a/automanual/old/1-1.md b/automanual/old/1-1.md deleted file mode 100644 index 9b09412..0000000 --- a/automanual/old/1-1.md +++ /dev/null @@ -1,15 +0,0 @@ -# 1. まえがき - -## 1.1. opensource COBOLとは - -このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 - -opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 - -opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 - -Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 - ---- -`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 - diff --git a/automanual/old/1-10.md b/automanual/old/1-10.md deleted file mode 100644 index 18fc7fd..0000000 --- a/automanual/old/1-10.md +++ /dev/null @@ -1,20 +0,0 @@ -## 1.10. LENGTH OFの使い方 - -オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 - -``` -01 Demo-Identifier PIC X(27). *> This is a 27-character data-item -. -. -. -DISPLAY LENGTH OF “This is a LENGTH OF Example” -DISPLAY LENGTH OF Demo-Identifier -DISPLAY 27 -``` - -定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 - -1. DISPLAY文の定数の代わりとして -2. WRITE文またはRELEASE文のFROM句の一部として -3. PERFORM文のTIMES句の一部として - diff --git a/automanual/old/1-2-1.md b/automanual/old/1-2-1.md deleted file mode 100644 index 7f76a9b..0000000 --- a/automanual/old/1-2-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 1.2. COBOL/opensource COBOLの重要機能 - -### 1.2.1. COBOLプログラムの構文 - -COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 - -部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 - -このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 - -4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 - diff --git a/automanual/old/1-2-2.md b/automanual/old/1-2-2.md deleted file mode 100644 index 4be66aa..0000000 --- a/automanual/old/1-2-2.md +++ /dev/null @@ -1,6 +0,0 @@ -### 1.2.2. コピーブック - -「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 - -現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 - diff --git a/automanual/old/1-2-3.md b/automanual/old/1-2-3.md deleted file mode 100644 index e8d2dae..0000000 --- a/automanual/old/1-2-3.md +++ /dev/null @@ -1,4 +0,0 @@ -### 1.2.3. 構造化データ - -COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 - diff --git a/automanual/old/1-2-4.md b/automanual/old/1-2-4.md deleted file mode 100644 index a4454ac..0000000 --- a/automanual/old/1-2-4.md +++ /dev/null @@ -1,15 +0,0 @@ -### 1.2.4. ファイル - -COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 - -||| -|:---|:---| -|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| -ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![!\[alt text\](Image/1-0-1.png)](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![!\[alt text\](Image/1-0-2.png)](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| - -すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 - -データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 - diff --git a/automanual/old/1-2-5.md b/automanual/old/1-2-5.md deleted file mode 100644 index 942f23d..0000000 --- a/automanual/old/1-2-5.md +++ /dev/null @@ -1,8 +0,0 @@ -### 1.2.5. 表操作 - -他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 - -1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 - -2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 - diff --git a/automanual/old/1-2-6.md b/automanual/old/1-2-6.md deleted file mode 100644 index 9246fa5..0000000 --- a/automanual/old/1-2-6.md +++ /dev/null @@ -1,8 +0,0 @@ -### 1.2.6. データの並び替えと結合 - -COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 - -表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 - -同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 - diff --git a/automanual/old/1-2-7.md b/automanual/old/1-2-7.md deleted file mode 100644 index 2f3758f..0000000 --- a/automanual/old/1-2-7.md +++ /dev/null @@ -1,25 +0,0 @@ -### 1.2.7. 文字列操作 - -テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 - -| 機能 | サポートするopensource COBOL機能 | -| :--- | :--- | -|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | -| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | -| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | -| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | -| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | -| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | -| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | -| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| -| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | -| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | -| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | -| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | - diff --git a/automanual/old/1-2-8.md b/automanual/old/1-2-8.md deleted file mode 100644 index 2536280..0000000 --- a/automanual/old/1-2-8.md +++ /dev/null @@ -1,18 +0,0 @@ -### 1.2.8. テキストユーザインターフェース(TUI)機能 - -COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 - -以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 - -図1-1-TUIサンプル画面 - -![!\[alt text\](Image/1-1.png)](Image/1-1.png) - -このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 - -COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 - ---- - -`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 - diff --git a/automanual/old/1-3.md b/automanual/old/1-3.md deleted file mode 100644 index 2ec4693..0000000 --- a/automanual/old/1-3.md +++ /dev/null @@ -1,16 +0,0 @@ -## 1.3. 構文規則 - -opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 - -| | | -| :--- | :--- | -| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | -| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | -| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | -| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | -| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | -| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | -| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | -| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | -| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | - diff --git a/automanual/old/1-4.md b/automanual/old/1-4.md deleted file mode 100644 index 6978319..0000000 --- a/automanual/old/1-4.md +++ /dev/null @@ -1,26 +0,0 @@ -## 1.4. ソースコードの形式 - -従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 - -opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 - -| | | -| :--- | :--- | -| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | -| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | -| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | -| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | - -以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 - -| | | -| :--- | :--- | -| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | -| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | -| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | -| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | -| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | -| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | - diff --git a/automanual/old/1-5.md b/automanual/old/1-5.md deleted file mode 100644 index 572aff7..0000000 --- a/automanual/old/1-5.md +++ /dev/null @@ -1,12 +0,0 @@ -## 1.5. カンマ/セミコロンの使い方 - -空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 - -次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: - - CALL “SUBROUTINE” USING 1,2 - -DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 - -句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 - diff --git a/automanual/old/1-6.md b/automanual/old/1-6.md deleted file mode 100644 index ad18af4..0000000 --- a/automanual/old/1-6.md +++ /dev/null @@ -1,30 +0,0 @@ -## 1.6. COPY文の使い方 - -図1-2-COPY構文 - -![alt text](Image/1-2.png) - -COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 - -1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 - -2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 - -3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 - -4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 - -5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 - -6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 - -7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 - -8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 - -9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 - -10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 - -11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 - diff --git a/automanual/old/1-7-1.md b/automanual/old/1-7-1.md deleted file mode 100644 index 6f65cde..0000000 --- a/automanual/old/1-7-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 1.7. 定数の使い方 - -定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 -### 1.7.1. 数字定数 -数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 - -- 1、56、2192、-54などの整数。 - -- 1.12や-2.95などの整数でない固定小数点値。 - -- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 - diff --git a/automanual/old/1-7-2.md b/automanual/old/1-7-2.md deleted file mode 100644 index 339839c..0000000 --- a/automanual/old/1-7-2.md +++ /dev/null @@ -1,34 +0,0 @@ -### 1.7.2. 英数字定数 - -英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 - -英数字定数は、次の形式のいずれかを取ることができる。 - -- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 - -- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - -英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 - -- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 - - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l - – “iteral that must - – “be continued.” - - -- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

- - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & - “ long literal that must ” & - “ be continued.” - - -プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 - -数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 - diff --git a/automanual/old/1-7-3.md b/automanual/old/1-7-3.md deleted file mode 100644 index 21c4901..0000000 --- a/automanual/old/1-7-3.md +++ /dev/null @@ -1,6 +0,0 @@ -### 1.7.3. 日本語定数 - -- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 - -- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - diff --git a/automanual/old/1-8.md b/automanual/old/1-8.md deleted file mode 100644 index 94415b6..0000000 --- a/automanual/old/1-8.md +++ /dev/null @@ -1,17 +0,0 @@ -## 1.8. 表意定数の使い方 - -表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 - -次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 - -表1-3-表意定数 - -| 表意定数 | 定数型 | 値 | -| :--- | :--- | :--- | -| ZERO, ZEROS, ZEROES | 数字 | 0 | -| SPACE, SPACES | 英数字 | 空白 | -| QUOTE, QUOTES | 英数字 | 二重引用符 | -| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | -| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | -| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | - diff --git a/automanual/old/1-9.md b/automanual/old/1-9.md deleted file mode 100644 index b9fb58c..0000000 --- a/automanual/old/1-9.md +++ /dev/null @@ -1,8 +0,0 @@ -## 1.9. ユーザ定義名 - -opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 - -ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 - -プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 - diff --git a/automanual/old/2-1.md b/automanual/old/2-1.md deleted file mode 100644 index 0db6100..0000000 --- a/automanual/old/2-1.md +++ /dev/null @@ -1,39 +0,0 @@ -# 2. opensource COBOLのプログラム形式 - -図2-1-opensource COBOLのプログラム形式 - -![alt text](Image/2-1.png) - -COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 - -すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 - -1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 - -2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 - -3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 - -4. 各区分の目的の概要は次の通りである: - -| 区分 | 目的 | -| :--- | :--- | -| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | -| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | -| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | -| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | - -## 2.1. ネストされたユーザプログラム - -図2-2-ネストされたユーザプログラム - -![alt text](Image/2-2.png) - -ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 - -1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 - ---- - -`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 - diff --git a/automanual/old/2-2.md b/automanual/old/2-2.md deleted file mode 100644 index 353c33f..0000000 --- a/automanual/old/2-2.md +++ /dev/null @@ -1,12 +0,0 @@ -## 2.2. ネストされたユーザ定義関数 - -図2-3-ネストされたユーザ定義関数 - -![alt text](Image/2-3.png) - -ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 - -1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 - - name:line: Error: FUNCTION-ID is not yet implemented - diff --git a/automanual/old/3.md b/automanual/old/3.md deleted file mode 100644 index 634bc36..0000000 --- a/automanual/old/3.md +++ /dev/null @@ -1,21 +0,0 @@ -# 3. 見出し部 - -図3-1-見出し部構文 - -![alt text](Image/3-1.png) - -プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 -1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 - -2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 - -3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 - -4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 - -5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 - -6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 - -7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 - diff --git a/automanual/old/4-1-1.md b/automanual/old/4-1-1.md deleted file mode 100644 index 1db0690..0000000 --- a/automanual/old/4-1-1.md +++ /dev/null @@ -1,34 +0,0 @@ -# 4. 環境部 - -図4-1-環境部構文 - -![alt text](Image/4-1.png) - -プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 - -1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 - -## 4.1. 構成節 - -図4-2-構成節構文 - -![alt text](Image/4-2.png) - -プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 - -1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 - -### 4.1.1. 翻訳用計算機段落 - -図4-3-翻訳用計算機段落構文 - -![alt text](Image/4-3.png) - -翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 - -1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 - -3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 - diff --git a/automanual/old/4-1-2.md b/automanual/old/4-1-2.md deleted file mode 100644 index 1ecd3ae..0000000 --- a/automanual/old/4-1-2.md +++ /dev/null @@ -1,16 +0,0 @@ -### 4.1.2. 実行用計算機段落 - -図4-4-実行用計算機段落構文 - -![alt text](Image/4-4.png) - -実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 - -1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 - -3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 - -4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 - diff --git a/automanual/old/4-1-3.md b/automanual/old/4-1-3.md deleted file mode 100644 index bc8acb3..0000000 --- a/automanual/old/4-1-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 4.1.3. リポジトリ段落 - -図4-5-リポジトリ段落構文 - -![alt text](Image/4-5.png) - -リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 - -1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 - -2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 - diff --git a/automanual/old/4-1-4.md b/automanual/old/4-1-4.md deleted file mode 100644 index 8197007..0000000 --- a/automanual/old/4-1-4.md +++ /dev/null @@ -1,107 +0,0 @@ -### 4.1.4. 特殊名段落 - -図4-6-特殊名段落構文 - -![alt text](Image/4-6-1.png) -![alt text](Image/4-6-2.png) - -特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定のニーモニック名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 - -つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 - -1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 - -2. IS ニーモニック名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 - -3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 - -4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 - -5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 - - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ - - このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 - - LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: - - 表4-7-局所名 - - | | | | | | - | :---: | :---: | :---: | :---: | :---: | - | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | - | am_ET | el_GR | fil_PH | lv_LV | sma_SE | - | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | - | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | - | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | - | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | - | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | - | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | - | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | - | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | - | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | - | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | - | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | - | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | - | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | - | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | - | ar_TN | en_ZA | he_IL | nn_NO | te_IN | - | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | - | arn_CL | es_AR | hr_BA | oc_FR | th_TH | - | as_IN | es_BO | hr_HR | or_IN | tk_TM | - | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | - | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | - | ba_R | es_CR | id_ID | ps_AF | tr_IN | - | be_BY | es_DO | ig_NG | pt_BR | tr_TR | - | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | - | bn_IN | es_ES | is_IS | qut_GT | ug_CN | - | bo_BT | es_GT | it_CH | quz_BO | uk_UA | - | bo_CN | es_HN | it_IT | quz_EC | ur_PK | - | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | - | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | - | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | - | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | - | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | - | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | - | da_DK | es_SV | kl_GL | sah_RU | yo_NG | - | de_AT | es_US | kn_IN | se_FI | zh_CN | - | de_CH | es_UY | ko_KR | se_NO | zh_HK | - | de_DE | es_VE | kok_IN | se_SE | zh_MO | - | de_LI | et_EE | ky_KG | si_LK | zh_SG | - | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | - | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | - - -7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 - -8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 - -9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 - - 表4-8-ACCEPT画面ステータスコード - - | コード | 意味 | - | :--- | :--- | - | 0000 | ENTERキー押下 | - | 1001 - 1064| F1 — F64 | - | 2001, 2002 | PgUP, PgDn4 | - | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | - | 2005 | Esc6 | - | 8000 | ACCEPT画面に利用できるデータがない | - | 9000 | 致命的なI/O画面エラー | - - -10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 - -11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 - ---- - -`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 - -`5` Windowsシステムでは検出できない。 - -`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) - diff --git a/automanual/old/4-2-1-1.md b/automanual/old/4-2-1-1.md deleted file mode 100644 index d6cbb63..0000000 --- a/automanual/old/4-2-1-1.md +++ /dev/null @@ -1,105 +0,0 @@ -## 4.2. 入出力節 - -図4-9-入出力節構文 - -![alt text](Image/4-9.png) - -入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 - -1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - -### 4.2.1. ファイル管理段落 - -図4-10-ファイル管理段落構文 - -![alt text](Image/4-10.png) - -ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 - -1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 - -2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 - -3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 - - SELECT My-File ASSIGN TO DISK DISPLAY. - - 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 - - SELECT My-File ASSIGN TO DISPLAY. - - -4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 - - - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 - - この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - - 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 - - 表4-11-ステータスコード - - |ステータス値 | 意味 | - | :--- | :--- | - |00 | 成功| - |02 | 成功(重複レコードキーが検出された)| - |05 | 成功(オプションファイルが存在しない)| - |07 | 成功(ユニットが存在しない)| - |10 |ファイル終了| - |14 |キー範囲外| - |21 |キーが無効である| - |22 |キーの値の重複が検出された| - |23 |キーが存在しない| - |30 |永続的入出力エラー| - |31 |ファイル名に一貫性がない| - |34 |ファイル区域外である| - |35 |ファイルが存在しない| - |37 |アクセス権拒否| - |38 |ファイルがロックで閉じられている| - |39 |属性の矛盾が検出された| - |41 |ファイルが既に開かれている| - |42 |ファイルが開かれていない| - |43 |読み込みが行われていない| - |44 |レコードのオーバーフロー| - |46 |読み込みエラー| - |47 |OPEN INPUTが拒否された| - |48 |OPEN OUTPUTが拒否された| - |49 |OPEN I/Oが拒否された| - |51 |レコードがロックされている| - |52 |ページ終了| - |57 |LINAGE指定が無効である| - |61 |ファイル共有の失敗| - |91 |ファイルが利用できない| - -5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 - -#### 4.2.1.1. 順編成ファイル - -図4-12-順編成ファイルの指定 - -![alt text](Image/4-12.png) - -SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 - -1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 - -2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 - -3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 - -4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 - -5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 - -6. 固定長と可変長、両方のレコード形式がサポートされている。 - -7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 - -8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/old/4-2-1-2.md b/automanual/old/4-2-1-2.md deleted file mode 100644 index 87969ca..0000000 --- a/automanual/old/4-2-1-2.md +++ /dev/null @@ -1,22 +0,0 @@ -#### 4.2.1.2. 相対編成ファイル - -図4-13-相対編成ファイルの指定 - -![alt text](Image/4-13.png) - -RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 - -1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 - -2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 - -3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 - -4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 - -7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/old/4-2-1-3.md b/automanual/old/4-2-1-3.md deleted file mode 100644 index b0c2ca7..0000000 --- a/automanual/old/4-2-1-3.md +++ /dev/null @@ -1,24 +0,0 @@ -#### 4.2.1.3. 索引編成ファイル - -図4-14-索引編成ファイルの指定 - -![alt text](Image/4-14.png) - -RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 - -例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 - -1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 - -4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 - -5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 - -6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 - -7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - diff --git a/automanual/old/4-2-2.md b/automanual/old/4-2-2.md deleted file mode 100644 index b1a35fa..0000000 --- a/automanual/old/4-2-2.md +++ /dev/null @@ -1,15 +0,0 @@ -### 4.2.2. 入出力管理段落 - -図4-15-入出力管理段落構文 - -![alt text](Image/4-15.png) - - -入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 - -1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 - -2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 - -3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 - diff --git a/automanual/old/5-1.md b/automanual/old/5-1.md deleted file mode 100644 index 7bd633d..0000000 --- a/automanual/old/5-1.md +++ /dev/null @@ -1,50 +0,0 @@ -# 5. データ部 - -図5-1-データ部の形式 - -![alt text](Image/5-1.png) - -データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 - -1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 - -2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) - -3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 - -4. 局所場所はネストされたプログラムでは使用できない。 - -5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 - -6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 - -## 5.1. ファイル記述 - -図5-2-ファイル記述構文 - -![alt text](Image/5-2.png) - -プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 - -1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 - -2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 - -3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 - -4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 - -5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 - -6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 - -7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 - - 図5-3-LINAGE句指定ページ構造 - - ![alt text](Image/5-3.png) - -8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 - -9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 - diff --git a/automanual/old/5-2.md b/automanual/old/5-2.md deleted file mode 100644 index 0347911..0000000 --- a/automanual/old/5-2.md +++ /dev/null @@ -1,19 +0,0 @@ -## 5.2. 整列用記述 - -図5-4-整列用記述段落 - -![alt text](Image/5-4.png) - - -整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 - -1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 - -2. 整列用ファイルをディスクに割り当てる必要がある。 - -3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 - -4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 - -5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 - diff --git a/automanual/old/5-3.md b/automanual/old/5-3.md deleted file mode 100644 index 161cf86..0000000 --- a/automanual/old/5-3.md +++ /dev/null @@ -1,295 +0,0 @@ -## 5.3. データ記述の形式 - -図5-5-データ記述の一般形式 - -![alt text](Image/5-5.png) - -ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 - -1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 - -2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 - - - | | | - | --- | --- | - | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | - | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | - | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | - | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | - - - この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 - -3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 - -4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 - - 表5-6-データのクラス定義 PICTURE記号(9/A/X) - - | 基本記号 | 意味・使用方法 | - | :--- | :--- | - | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | - | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | - | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | - | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | - - 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: - - | | | - | --- | --- | - | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | - | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | - | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | - | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | - - - - 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 - - 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 - - 表5-7-数値形式オプションのPICTURE記号(P/S/V) - - | 数値形式のオプション記号 | 意味・使用方法 | - | :--- | :--- | - | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | - | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | - | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | - -5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 - - 表5-8-符号エンコード文字 - - | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | - | :---: | :---: |:---: | - | 0 | 0 | p | - | 1 | 1 | q | - | 2 | 2 | r | - | 3 | 3 | s | - | 4 | 4 | t | - | 5 | 5 | u | - | 6 | 6 | v | - | 7 | 7 | w | - | 8 | 8 | x | - | 9 | 9 | y | - - SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 - - -6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 - - 表5-9-数字編集PICTURE記号 - - | 編集記号 | 意味・使用方法 | - | :--- | :--- | - | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | - | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | - | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | - | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | - | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | - | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | - | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | - | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | - | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | - | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | - - 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 - -7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 - -8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 - -9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 - -10. EXTERNAL句は、77または01レベルでのみ指定できる。 - -11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 - -12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 - -13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 - -14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 - - 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. - - 以下のように割り当てられる。 - - ![alt text](Image/5-3-9.png) - - 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 - ``` - 05 X OCCURS 3 TIMES. - 10 A PIC X(1). - 10 B PIC X(1). - 10 C PIC X(1). - ``` - ![alt text](Image/5-3-10.png) - - 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 - -15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 - -16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 - -17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 - - ``` - PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 - PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” - PIC 9(3) VALUE 1 – 次の値を保持する 001 - PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 - ``` - -18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 - -19. BASED句とANY LENGTH句を併用することはできない。 - -20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 - -21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 - -22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 - -23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 - -24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある - - a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 - - b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 - - c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 - - d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 - - e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 - - f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 - -25. 次の表は、利用可能なUSAGE句をまとめたものである。 - - 表5-10-USAGE句一覧
- - | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| - | :--- | :--- |:--- | :--- |:--- | :--- | - | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | - | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | - |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | - | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | - | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | - | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | - | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | - | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | - | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | - | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | - | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | - | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | - | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | - | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | - | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | - | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | - | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | - | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | - | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | - | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | - | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | - -26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 - - ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 - - リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 - - CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 - - 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 - - バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 - -27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 - -28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 - -29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 - - a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 - - b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 - - c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 - - 図5-11-SYNCHRONIZED句の効果 - - ![alt text](Image/5-11.png) - - 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 - - SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 - -30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 - - a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 - - b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 - ``` - 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 - - ``` - 05 SHIRT-SIZE-VALUES. - 10 PIC X(4) VALUE “S 14”. - 10 PIC X(4) VALUE “M 15”. - 10 PIC X(4) VALUE “L 16”. - 10 PIC X(4) VALUE “XL17”. - 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - - - cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) - - 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 - - ``` - 05 X OCCURS 6 TIMES. - 10 A PIC X(1) VALUE “?‟. - 10 B PIC X(1) VALUE “%‟. - 10 N PIC 9(2) VALUE 10. - ``` - - この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 - ---- -`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 - -`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 - -`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 - -`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 - diff --git a/automanual/old/5-4.md b/automanual/old/5-4.md deleted file mode 100644 index 94bdfd9..0000000 --- a/automanual/old/5-4.md +++ /dev/null @@ -1,18 +0,0 @@ -## 5.4. 条件名 - -図5-12-レベル88条件名記述構文 - -![alt text](Image/5-12.png) - -条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 - -1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 - -2. また、ストレージを占有しない。 - -3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 - -4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 - -5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 - diff --git a/automanual/old/5-5.md b/automanual/old/5-5.md deleted file mode 100644 index da8d3c9..0000000 --- a/automanual/old/5-5.md +++ /dev/null @@ -1,12 +0,0 @@ -## 5.5. 定数記述 - -図5-13-78レベル定数記述構文 - -![alt text](Image/5-13.png) - -この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 - -1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 - -2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 - diff --git a/automanual/old/5-6.md b/automanual/old/5-6.md deleted file mode 100644 index 0991f14..0000000 --- a/automanual/old/5-6.md +++ /dev/null @@ -1,98 +0,0 @@ -## 5.6. 画面記述 - -図5-14-画面節データ項目記述構文 - -![alt text](Image/5-14-1.png) -![alt text](Image/5-14-2.png) - -上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 - -1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 - -2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 - -3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 - -4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 - -5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 - -6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 - -7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` - -8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 - -9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 - -10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 - -11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 - - LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 - - もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 - - TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 - - 必要に応じてCOLUMNはCOLに省略が可能である。 - -12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 - - 表5-15-番号によって指定される画面色 - - | 整数 | 色 | - | :---: | :---: | - | 0 | 黒 | - | 1 | 青 | - | 2 | 緑 | - | 3 | 青緑 | - | 4 | 赤 | - | 5 | 赤紫 | - | 6 | 黄 | - | 7 | 白 | - -13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 - - 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
- - - | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | - | :---: | :---: |:---: | - | 0 | 黒 | 暗灰 | - | 1 | 暗青/藍 | 明青 | - | 2 | 暗緑 | 明緑 | - | 3 | 暗青緑 | 明青緑 | - | 4 | 暗赤 | 明赤 | - | 5 | 暗赤紫 | 明赤紫 | - | 6 | 金/茶 | 黄 | - | 7 | 明灰 | 白 | - - -14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 - -15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 - - ``` - 78 Black VALUE 0. - 78 Blue VALUE 1. - 78 Green VALUE 2. - 78 White VALUE 7. - ・・・ - 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ - 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ - 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ - ``` - DEF項目の色は緑と白になる(XYZから継承される) - -16. VALUE句は変更できない固定のテキストを定義するために使用される。 - -17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 - -18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 - -19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 - ---- -`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 - diff --git a/automanual/old/6-1-1.md b/automanual/old/6-1-1.md deleted file mode 100644 index 3acc843..0000000 --- a/automanual/old/6-1-1.md +++ /dev/null @@ -1,31 +0,0 @@ -# 6. 手続き部 - -## 6.1. 構成要素 - -### 6.1.1. 表の参照 - -COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 - -4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: - -``` - 01 GRID. - 05 GRID-ROW OCCURS 3 TIMES. - 10 GRID-COLUMN OCCURS 4 TIMES. - 15 GRID-CHARACTER PIC X(1). -``` - -次の図で網掛けされているGRID-CHARACTERは、 - -![alt text](Image/6-0.png) - - -次のコードで参照できる。 - - GRID-CHARACTER(2, 3) - -添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または -これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 - -算術式については[6.1.4.1](6-1-4-1.md)で説明する。 - diff --git a/automanual/old/6-1-2.md b/automanual/old/6-1-2.md deleted file mode 100644 index a855435..0000000 --- a/automanual/old/6-1-2.md +++ /dev/null @@ -1,47 +0,0 @@ -### 6.1.2. データ名の修飾 - -COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 - -動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: - -``` - 01 EMPLOYEE. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). - 01 CUSTOMER. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). -``` - -それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: - - MOVE “Philadelphia” TO CITY. - -この問題を解決するために、CITYの参照を次のように修飾できる。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. - -残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. - -これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 - - MOVE “Philadelphia” TO CITY OF EMPLOYEE. - -テーブルへの参照を修飾する場合は次のように記述する。 - - 一意名-1 OF 一意名-2(添え字・・・) - -予約語の「IN」は「OF」の代わりとして使うことができる。 - diff --git a/automanual/old/6-1-3.md b/automanual/old/6-1-3.md deleted file mode 100644 index fa94d49..0000000 --- a/automanual/old/6-1-3.md +++ /dev/null @@ -1,23 +0,0 @@ -### 6.1.3. 部分参照 - -図6-1-部分参照構文 - -![alt text](Image/6-1.png) - -COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 - -開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 - -ここでいくつか例を挙げる。 - -| | | -| --- | --- | -| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | -| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | -| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | -| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | -| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | - - -参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 - diff --git a/automanual/old/6-1-4-1.md b/automanual/old/6-1-4-1.md deleted file mode 100644 index cfee90a..0000000 --- a/automanual/old/6-1-4-1.md +++ /dev/null @@ -1,50 +0,0 @@ -### 6.1.4. 式 - -opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 - -- 数値結果を計算する「算術式」 - -- TRUEまたはFALSE値を計算する「条件式」 - -0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 - -#### 6.1.4.1. 算術式 - -算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 - -| 優先順位 演算子 | 意味 | - | :---: | :--- | - | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| - | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | - | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | - | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | - | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | - | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | - | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | - -COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 - -1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 - -2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 - -3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 - -4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 - -5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 - -6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 - -ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 - -| 式 | 計算結果 | 解説 | -| :--- | :--- |:--- | -| 3 * 4 + 1|13|* は + よりも優先される。 | -| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | -| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | -| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | -| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | - -もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 - diff --git a/automanual/old/6-1-4-2.md b/automanual/old/6-1-4-2.md deleted file mode 100644 index f1a85b8..0000000 --- a/automanual/old/6-1-4-2.md +++ /dev/null @@ -1,141 +0,0 @@ -#### 6.1.4.2. 条件式 - -条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 - -##### 6.1.4.2.1. 条件名(レベル88項目) - -次のコードは最も単純な条件の一例である。 - -``` - 05 SHIRT-SIZE PIC 99V9. - 88 LILLIPUTIAN VALUE 0 THRU 12.5 - 88 XS VALUE 13 THRU 13.5. - 88 S VALUE 14, 14.5. - 88 M VALUE 15, 15.5. - 88 L VALUE 16, 16.5. - 88 XL VALUE 17, 17.5. - 88 XXL VALUE 18, 18.5. - 88 HUMUNGOUS VALUE 19 THRU 99.9. -``` - -条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 - - - IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 - - -または次のように条件名「XL」を使用することもできる。 - - IF XL - -##### 6.1.4.2.2. 字類条件 - -図6-9-字類条件構文 - -![alt text](Image/6-9.png) - -字類条件は、データ項目に格納されている現在のデータ型を判別する。 - -1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 - -2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 - -3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 - -4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 - -5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 - -6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 - -7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 - - ``` - SPECIAL-NAMES. - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. - ``` - -次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 - -``` - IF Entered-Value IS Hexadecimal - PERFORM 150-Process-Hex-Value - END-IF -``` - -##### 6.1.4.2.3. 正負条件 -図6-10-正負条件構文 - -![alt text](Image/6-10.png) - -正負条件は、PIC 9データ項目の数値状態を判別する。 - -1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 - -2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 - -##### 6.1.4.2.4. スイッチ状態条件 -図6-11-スイッチ状態条件 - -![alt text](Image/6-11.png) - -特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 - -##### 6.1.4.2.5. 比較条件 -図6-12-比較条件構文 - -![alt text](Image/6-12.png) - -比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 - -1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 - -2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 - -##### 6.1.4.2.6. 組み合わせ条件 -図6-13-組み合わせ条件構文 - -![alt text](Image/6-13.png) - -組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 - -1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 - -2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 - -3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 -``` - IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 -``` -以下のように省略される。 -``` - IF ACCOUNT-STATUS = 1 OR 2 OR 7 -``` - -4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 - - ``` - FALSE OR TRUE AND TRUE 結果:TRUE - (FALSE OR FALSE) AND TRUE 結果:FALSE - FALSE OR (FALSE AND TRUE) 結果:TRUE - ``` - -##### 6.1.4.2.7. 否定条件 -図6-14-否定条件構文 - -![alt text](Image/6-14.png) - -否定条件はNOT演算子を用いて、条件を否定する。 - -1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 - -2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 -``` - NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE - 結果:FALSE - NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) - 結果:TRUE - NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) - 結果:FALSE -``` - diff --git a/automanual/old/6-1-5.md b/automanual/old/6-1-5.md deleted file mode 100644 index 5ce0394..0000000 --- a/automanual/old/6-1-5.md +++ /dev/null @@ -1,45 +0,0 @@ -### 6.1.5. ピリオド(.) - -COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 - -``` - MOVE SPACES TO Employee-Address - ADD 1 TO Record-Counter - DISPLAY “Record-Counter=” Record-Counter -``` - -一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 - -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest - DISPLAY “Interest Amount = “ Interest -``` - -この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 - -しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: - -``` - IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 - GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 - GIVING Interest DISPLAY “Interest Amount = “ Interest -``` - -では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 - -そこで用いるのが完結文である。 - -COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest. - DISPLAY “Interest Amount = “ Interest -``` - -二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 - diff --git a/automanual/old/6-1-6.md b/automanual/old/6-1-6.md deleted file mode 100644 index 00c1644..0000000 --- a/automanual/old/6-1-6.md +++ /dev/null @@ -1,39 +0,0 @@ -### 6.1.6. 動詞/END-動詞 - -1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 - -``` - IF A = 1 - IF B = 1 - DISPLAY “A & B = 1” - ELSE - IF B = 1 - DISPLAY “A NOT = 1 BUT B = 1” - ELSE - DISPLAY “NEITHER A NOR B = 1”. -``` - -このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 - -![alt text](Image/6-16-1.png) - -NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 - -1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: - -![alt text](Image/6-16-2.png) - -しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 - -![alt text](Image/6-16-3.png) - -COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 - -COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` - -既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 - ---- -`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 - -`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? diff --git a/automanual/old/6-1-7.md b/automanual/old/6-1-7.md deleted file mode 100644 index 72515da..0000000 --- a/automanual/old/6-1-7.md +++ /dev/null @@ -1,17 +0,0 @@ -### 6.1.7. 特殊レジスタ - -opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 - -表6-15-特殊レジスタ - -| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | -| :--- | :--- |:--- | -| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | -| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | -| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | -| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | -| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | - ---- -`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 - diff --git a/automanual/old/6-1-8-1.md b/automanual/old/6-1-8-1.md deleted file mode 100644 index 5983e7e..0000000 --- a/automanual/old/6-1-8-1.md +++ /dev/null @@ -1,27 +0,0 @@ -### 6.1.8. ファイルへの同時アクセス制御 - -データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 - -すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 - -#### 6.1.8.1. ファイル共有 - -opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 - -OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 - -ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 - -| 共有オプション |効果 | -| :--- | :--- | -| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | -| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | -| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | - -誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 - ---- -`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 - -`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 - diff --git a/automanual/old/6-1-8-2.md b/automanual/old/6-1-8-2.md deleted file mode 100644 index f985ce0..0000000 --- a/automanual/old/6-1-8-2.md +++ /dev/null @@ -1,18 +0,0 @@ -#### 6.1.8.2. レコードロック - -レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 - -ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 - -レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 - -| レコードロック オプション |効果 | -| :--- | :--- | -| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | -| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | -| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | -| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | - - -使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 - diff --git a/automanual/old/6-10.md b/automanual/old/6-10.md deleted file mode 100644 index 58cb864..0000000 --- a/automanual/old/6-10.md +++ /dev/null @@ -1,10 +0,0 @@ -## 6.10. COMMIT - -図6-37-COMMIT構文 - -![alt text](Image/6-37-Commit.png) - -COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 - -1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 - diff --git a/automanual/old/6-11.md b/automanual/old/6-11.md deleted file mode 100644 index a1e99da..0000000 --- a/automanual/old/6-11.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.11. COMPUTE - -図6-38-COMPUTE構文 - -![alt text](Image/6-38-Compute.png) - -COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 - -1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 - -2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 - diff --git a/automanual/old/6-12.md b/automanual/old/6-12.md deleted file mode 100644 index 10cb703..0000000 --- a/automanual/old/6-12.md +++ /dev/null @@ -1,26 +0,0 @@ -## 6.12. CONTINUE - -図6-39-CONTINUE構文 - -![alt text](Image/6-39-Continue.png) - -CONTINUE文は動作がないためアクションを実行しない。 - -1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 - - ![alt text](Image/6-12-1.png) - - 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 - -2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 - - ![alt text](Image/6-12-2.png) - -COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 - - IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ - -プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 - -従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 - diff --git a/automanual/old/6-13-1.md b/automanual/old/6-13-1.md deleted file mode 100644 index c196ed7..0000000 --- a/automanual/old/6-13-1.md +++ /dev/null @@ -1,24 +0,0 @@ -## 6.13. DELETE - -### 6.13.1. DELETE文の書き方1 ― DELETE - -図6-40-DELETE構文(レコードの削除) - -![alt text](Image/6-40-Delete.png) - -DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 - -1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 - -2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 - -3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 - -4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 - -5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 - -6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 - -7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 - diff --git a/automanual/old/6-13-2.md b/automanual/old/6-13-2.md deleted file mode 100644 index f6c4455..0000000 --- a/automanual/old/6-13-2.md +++ /dev/null @@ -1,14 +0,0 @@ -### 6.13.2. DELETE文の書き方2 ― DELETE FILE - -図6-41-DELETE FILE構文(ファイルの削除) - -![alt text](Image/6-41(delete).png) - -DELETE FILE文は、ディスクファイルを削除する。 - -1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 - -2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 - -3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 - diff --git a/automanual/old/6-14-1.md b/automanual/old/6-14-1.md deleted file mode 100644 index c1221fa..0000000 --- a/automanual/old/6-14-1.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.14. DISPLAY - -### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE - -図6-42-DISPLAY構文(UPON CONSOLE) - -![alt text](Image/6-42-Display.png) - -プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 - -1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 - -2. 指定するニーモニック名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義のニーモニック名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 - -3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 - diff --git a/automanual/old/6-14-2.md b/automanual/old/6-14-2.md deleted file mode 100644 index 291c1f4..0000000 --- a/automanual/old/6-14-2.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス - -図6-43-DISPLAY構文(コマンドライン引数へのアクセス) - -![alt text](Image/6-43-Display.png) - -後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 - -1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 - diff --git a/automanual/old/6-14-3.md b/automanual/old/6-14-3.md deleted file mode 100644 index dcb6f0a..0000000 --- a/automanual/old/6-14-3.md +++ /dev/null @@ -1,22 +0,0 @@ -### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 - -図6-44-DISPLAY構文(環境変数へのアクセス/設定) - -![alt text](Image/6-44-Display.png) - -環境変数を作成または変更するために使われる。 - -1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 - - DISPLAY - environment-variable-name UPON ENVIRONMENT-NAME - END-DISPLAY - DISPLAY - environment-variable-name UPON ENVIRONMENT-VALUE - END-DISPLAY - - -2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 - -3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 -  diff --git a/automanual/old/6-14-4.md b/automanual/old/6-14-4.md deleted file mode 100644 index 47d6b34..0000000 --- a/automanual/old/6-14-4.md +++ /dev/null @@ -1,16 +0,0 @@ -### 6.14.4. DISPLAY文の書き方4 ― 画面データ - -図6-45-DISPLAY構文(画面データ) - -![alt text](Image/6-45-Display.png) - -形式化された画面にデータを表示する。 - -1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 - -2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 - -4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 - diff --git a/automanual/old/6-14-5.md b/automanual/old/6-14-5.md deleted file mode 100644 index 9c6955c..0000000 --- a/automanual/old/6-14-5.md +++ /dev/null @@ -1,8 +0,0 @@ -### 6.14.5. DISPLAY文の例外処理 - -図6-46-DISPLAY構文(例外処理) - -![alt text](Image/6-46-Display.png) - -DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 - diff --git a/automanual/old/6-15-1.md b/automanual/old/6-15-1.md deleted file mode 100644 index e27d5e0..0000000 --- a/automanual/old/6-15-1.md +++ /dev/null @@ -1,18 +0,0 @@ -## 6.15. DIVIDE - -### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO - -図6-47-DIVIDE INTO構文 - -![alt text](Image/6-47-Divide.png) - -指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/old/6-15-2.md b/automanual/old/6-15-2.md deleted file mode 100644 index 89dbecc..0000000 --- a/automanual/old/6-15-2.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING - -図6-48-DIVIDE INTO GIVING構文 - -![alt text](Image/6-48-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/old/6-15-3.md b/automanual/old/6-15-3.md deleted file mode 100644 index da155e6..0000000 --- a/automanual/old/6-15-3.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING - -図6-49-DIVIDE BY GIVING構文 - -![alt text](Image/6-49-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/old/6-15-4.md b/automanual/old/6-15-4.md deleted file mode 100644 index 8918cde..0000000 --- a/automanual/old/6-15-4.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER - -図6-50-DIVIDE INTO REMAINDER構文 - -![alt text](Image/6-50-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/old/6-15-5.md b/automanual/old/6-15-5.md deleted file mode 100644 index e0e7003..0000000 --- a/automanual/old/6-15-5.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER - -図6-51-DIVIDE BY REMAINDER構文 - -![alt text](Image/6-51-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - diff --git a/automanual/old/6-16.md b/automanual/old/6-16.md deleted file mode 100644 index ff1e640..0000000 --- a/automanual/old/6-16.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.16. ENTRY - -図6-52-ENTRY構文 - -![alt text](Image/6-52-Entry.png) - -ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 - -1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 - -2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 - -3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 - diff --git a/automanual/old/6-17.md b/automanual/old/6-17.md deleted file mode 100644 index fe614e9..0000000 --- a/automanual/old/6-17.md +++ /dev/null @@ -1,52 +0,0 @@ -## 6.17. EVALUATE - -図6-53-EVALUATE構文 - -![alt text](Image/6-53-Evaluate.png) - -EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 - -1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 - -2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: - - - Legal: Not Legal: - - (3 + Years-Of-Service) THROUGH 99 0 THRU “A” - - “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is - - X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) - - 15.7 THROUGH 19.4 - -3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択サブジェクトと呼ばれ、各WHEN句の後に指定された値は選択オブジェクトと呼ばれる。 - -4. 各WHEN句には、EVALUATE文の選択サブジェクトと同じ数の選択オブジェクトが必要である。 - -5. 各EVALUATE句の選択サブジェクトは、選択オブジェクトに対応する各WHEN句と等しいかどうかテストされる。 - -6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 - -7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 - -8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 - -9. ANYの選択オブジェクトを使うと、ANYと一致する選択サブジェクトと自動的に合致する。 - -ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 - -1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 - -2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 - -3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 - -4. 上記以外の種類の口座には利子が適用されない。 - -これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 - -図6-54-EVALUATE文のデモプログラム -![alt text](Image/6-54-Evaluate.png) - diff --git a/automanual/old/6-18.md b/automanual/old/6-18.md deleted file mode 100644 index 2f8d3bd..0000000 --- a/automanual/old/6-18.md +++ /dev/null @@ -1,35 +0,0 @@ -## 6.18. EXIT - -図6-55-EXIT構文 - -![alt text](Image/6-55-Exit.png) - -EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 - -1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 - - 図6-56-EXIT文
- ![alt text](Image/6-56-Exit.png) - -2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 - -3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 - -4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 - - EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 - - 図6-57-EXIT PARAGRAPH文
- ![alt text](Image/6-57-Exit.png) - -5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 - -6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 - -7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 - - 図6-58-EXIT PERFORM文
- ![alt text](Image/6-58-Exit.png) - -8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 - diff --git a/automanual/old/6-19.md b/automanual/old/6-19.md deleted file mode 100644 index 249fae7..0000000 --- a/automanual/old/6-19.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.19. FREE - -図6-59-FREE構文 - -![alt text](Image/6-59-Free.png) - -FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 - -1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 - -2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 - -3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 - -4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 - diff --git a/automanual/old/6-2.md b/automanual/old/6-2.md deleted file mode 100644 index 145e530..0000000 --- a/automanual/old/6-2.md +++ /dev/null @@ -1,24 +0,0 @@ -## 6.2. 記述形式 - -図6-16-記述形式構文 - -![alt text](Image/6-16.png) - -手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 - -手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 - -1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 - -2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 - -3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 - -4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 - -5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 - -6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 - -7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 - diff --git a/automanual/old/6-20.md b/automanual/old/6-20.md deleted file mode 100644 index b8a62b7..0000000 --- a/automanual/old/6-20.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.20. GENERATE - -図6-60-GENERATE構文 - -![alt text](Image/6-60-Generate.png) - -GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - diff --git a/automanual/old/6-21.md b/automanual/old/6-21.md deleted file mode 100644 index e6460f3..0000000 --- a/automanual/old/6-21.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.21. GOBACK - -図6-61-GOBACK構文 - -![alt text](Image/6-61-Goback.png) - -GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 - -1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 - -2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 - diff --git a/automanual/old/6-22-1.md b/automanual/old/6-22-1.md deleted file mode 100644 index 5745f59..0000000 --- a/automanual/old/6-22-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.22. GO TO - -### 6.22.1. GO TO文の書き方1 ― GO TO - -図6-62-GOTO構文 - -![alt text](Image/6-62-Goto.png) - -プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 - -1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 - diff --git a/automanual/old/6-22-2.md b/automanual/old/6-22-2.md deleted file mode 100644 index ac064ad..0000000 --- a/automanual/old/6-22-2.md +++ /dev/null @@ -1,22 +0,0 @@ -### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON - -図6-63-GOTO DEPENDING ON構文 - -![alt text](Image/6-63-Goto.png) - -文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 - -1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 - -2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 - -3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 - -4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 - - 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE - - ![alt text](Image/6-64-Goto.png) - - 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 - diff --git a/automanual/old/6-23.md b/automanual/old/6-23.md deleted file mode 100644 index a5334d9..0000000 --- a/automanual/old/6-23.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.23. IF - -図6-65-IF構文 - -![alt text](Image/6-65-If.png) - -IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 - -1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 - diff --git a/automanual/old/6-24.md b/automanual/old/6-24.md deleted file mode 100644 index ef2d1c8..0000000 --- a/automanual/old/6-24.md +++ /dev/null @@ -1,36 +0,0 @@ -## 6.24. INITIALIZE - -図6-66-INITIALIZE構文 - -![alt text](Image/6-66-Initialize.png) - -INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 - -1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 - - - 一意名-1として指定されたすべての基本項目。 - - - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: - - - USAGE INDEX項目は除外される。 - - - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 - - 以上は受け取り項目のリストである。 - -2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 - -3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 - -4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 - -5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 - -6. 各受け取り項目の初期化は、以下のルールに従って行われる。 - - - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 - - - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 - - - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 - diff --git a/automanual/old/6-25.md b/automanual/old/6-25.md deleted file mode 100644 index 091d700..0000000 --- a/automanual/old/6-25.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.25. INITIATE - -図6-67-INITIATE構文 - -![alt text](Image/6-67-Initiate.png) - -INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - diff --git a/automanual/old/6-26.md b/automanual/old/6-26.md deleted file mode 100644 index c3bc80c..0000000 --- a/automanual/old/6-26.md +++ /dev/null @@ -1,81 +0,0 @@ -## 6.26. INSPECT - -図6-68-INSPECT構文 - -![alt text](Image/6-68-Inspect.png) - -INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 - -1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 - -2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 - -3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 - -INSPECT文のルールは、指定された句によって異なる。 - -**TALLYING句の場合:** - -TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 - -1. 一意名-2は編集不可の数値項目でなければならない。 - -2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 - -3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 - - a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 - -4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 - - 図6-69-INSPECT文TALLYING句の例
- ![alt text](Image/6-69-Inspect.png) - - 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない - -**REPLACING句の場合:** - -REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 - -1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 - -3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 - -5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -6. ターゲット文字列は次のように識別できる: - - a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - -7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 - -**CONVERTING句の場合:** - -CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 - -1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 - -3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 - -4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 - -6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 - -8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 - diff --git a/automanual/old/6-27.md b/automanual/old/6-27.md deleted file mode 100644 index 99b472f..0000000 --- a/automanual/old/6-27.md +++ /dev/null @@ -1,49 +0,0 @@ -## 6.27. MERGE - -図6-70-MERGE構文 - -![alt text](Image/6-70-Merge.png) - -MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 - -1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 - -2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 - -3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 - -5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 - - MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 - -6. USING句で指定されたファイルには、以下のルールが適用される。 - - a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 - - b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 - - c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 - -7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 - -8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 - -9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 - -10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 - -11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 - -12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 - -13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** - -14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 - -15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 - ---- -`21` [4.2.2](4-2-2.md)参照。 - diff --git a/automanual/old/6-28-1.md b/automanual/old/6-28-1.md deleted file mode 100644 index 23619cf..0000000 --- a/automanual/old/6-28-1.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.28. MOVE - -### 6.28.1. MOVE文の書き方1 ― MOVE - -図6-71-MOVE構文 - -![alt text](Image/6-71-Move.png) - -特定の値を一つ以上の受け取りデータ項目に移動することができる。 - -1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 - -2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 - diff --git a/automanual/old/6-28-2.md b/automanual/old/6-28-2.md deleted file mode 100644 index 7b76e5d..0000000 --- a/automanual/old/6-28-2.md +++ /dev/null @@ -1,84 +0,0 @@ -### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING - -図6-72-MOVE CORRESPONDING構文 - -![alt text](Image/6-72-Move.png) - -同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 - -1. CORRESPONDINGという単語は、CORRと省略される場合がある。 - -2. 一意名-1と一意名-2の両方が集団項目でなければならない。 - -3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: - - a. どちらも同じ名前ではあるがFILLERではない。 - - b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 - - c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 - - d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 - - e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 - -4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 - -この規則は、以下の例題を使うとよく理解できる。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. corrdemo. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 X. - 05 A VALUE 'A' PIC X(1). - 05 G1. - 10 G2. - 15 B VALUE 'B' PIC X(1). - 05 C. - 10 FILLER VALUE 'C' PIC X(1). - 05 G3. - 10 G4. - 15 D VALUE 'D' PIC X(1). - 05 V1 VALUE 'E' PIC X(1). - 05 E REDEFINES V1 PIC X(1). - 05 F VALUE 'F' PIC X(1). - 05 G VALUE ALL 'G'. - 10 G2 OCCURS 4 TIMES PIC X(1). - 05 H VALUE ALL 'H' PIC X(4). - 01 Y. - 02 A PIC X(1). - 02 G1. - 03 G2. - 04 B PIC X(1). - 02 C PIC X(1). - 02 G3. - 03 G5. - 04 D PIC X(1). - 02 E PIC X(1). - 02 V2 PIC X(1). - 02 G PIC X(4). - 02 H OCCURS 4 TIMES PIC X(1). - 66 F RENAMES V2. - PROCEDURE DIVISION. - 100-Main. - MOVE ALL '-' TO Y. - DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. - DISPLAY 'Before: ' Y. - MOVE CORR X TO Y. - DISPLAY ' After: ' Y. - STOP RUN - -DISPLAY文で表示される結果は以下の通りである。 - - Names: ABCDEFGGGGHHHH - Before: -------------- - After: ABC---GGGG---- - -- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 -- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 -- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 -- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 -- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 -- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 - diff --git a/automanual/old/6-29-1.md b/automanual/old/6-29-1.md deleted file mode 100644 index 5c73830..0000000 --- a/automanual/old/6-29-1.md +++ /dev/null @@ -1,18 +0,0 @@ -## 6.29. MULTIPLY - -### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY - -図6-73-MULTIPLY BY構文 - -![alt text](Image/6-73-Multiply.png) - -算術積を実行する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. それぞれ一意名-2を掛けた一意名-1またはinteger-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - diff --git a/automanual/old/6-29-2.md b/automanual/old/6-29-2.md deleted file mode 100644 index 9dfa607..0000000 --- a/automanual/old/6-29-2.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING - -図6-74-MULTIPLY GIVING構文 - -![alt text](Image/6-74-Multiply.png) - -二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. 一意名-1および一意名-2の値は変更できない。 - -5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - diff --git a/automanual/old/6-3.md b/automanual/old/6-3.md deleted file mode 100644 index 045f192..0000000 --- a/automanual/old/6-3.md +++ /dev/null @@ -1,18 +0,0 @@ -## 6.3. 宣言の記述形式 - -図6-17-宣言構文 - -![alt text](Image/6-17.png) - -プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 - -1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 - -2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 - -4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 - -5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 - diff --git a/automanual/old/6-30.md b/automanual/old/6-30.md deleted file mode 100644 index db20748..0000000 --- a/automanual/old/6-30.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.30. NEXT SENTENCE - -図6-75-NEXT SENTENCE構文 - -![alt text](Image/6-75-Nextsentnce.png) - -NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 - -1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 - -2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 - -3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 - -4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 - diff --git a/automanual/old/6-31.md b/automanual/old/6-31.md deleted file mode 100644 index 6e28b8f..0000000 --- a/automanual/old/6-31.md +++ /dev/null @@ -1,31 +0,0 @@ -## 6.31. OPEN - -図6-76-OPEN構文 - -![alt text](Image/6-76-Open.png) - -OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 - -1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 - -2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 - -3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 - -4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 - - | オプション | 処理 | - | --- | --- | - | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | - | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | - | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - -5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 - -6. WITH NO REWIND句とWITH LOCK句は機能しない。 - - WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 - - WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 - diff --git a/automanual/old/6-32-1.md b/automanual/old/6-32-1.md deleted file mode 100644 index 42cfe04..0000000 --- a/automanual/old/6-32-1.md +++ /dev/null @@ -1,64 +0,0 @@ -## 6.32. PERFORM - -### 6.32.1. PERFORM文の書き方1 ― 手続き型 - -図6-77-手続き型PERFORM構文 - -![alt text](Image/6-77-Perform.png) - -制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 - -1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 - -2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 - -3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 -4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 - -5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 - -6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 - -7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 - -8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 - -9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 - -10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 - -11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 - - - 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 - - ![alt text](Image/6-32-1-1.png) - - ``` - 01 PERFORM-DEMO. - 05 PD-ROW OCCURS 3 TIMES. - 10 PD-COL OCCURS 4 TIMES. - 15 PD PIC X(1). - 01 PD-Col-No PIC 9 COMP. - 01 PD-Row-No PIC 9 COMP. - ``` - ![alt text](Image/6-32-1-2.png) - - ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 - PERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 - AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. - ``` - ![alt text](Image/6-32-1-3.png) - - 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. - ``` - diff --git a/automanual/old/6-32-2.md b/automanual/old/6-32-2.md deleted file mode 100644 index 3936f36..0000000 --- a/automanual/old/6-32-2.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.32.2. PERFORM文の書き方2 ― インライン型 - -図6-78-インライン型PERFORM構文 - -![alt text](Image/6-78-Perform.png) - -PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 - -1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 - -2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 - diff --git a/automanual/old/6-33-1.md b/automanual/old/6-33-1.md deleted file mode 100644 index fd4efa6..0000000 --- a/automanual/old/6-33-1.md +++ /dev/null @@ -1,36 +0,0 @@ -## 6.33. READ - -### 6.33.1. READ文の書き方1 ― 順次読み取り - -図6-79-READ構文(順次読み取り) - -![alt text](Image/6-79-Read.png) - -ファイルから次の(または前の)レコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 - -5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 - -7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 - -8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 - -11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 - diff --git a/automanual/old/6-33-2.md b/automanual/old/6-33-2.md deleted file mode 100644 index 3c4523c..0000000 --- a/automanual/old/6-33-2.md +++ /dev/null @@ -1,44 +0,0 @@ -### 6.33.2. READ文の書き方2 ― ランダム読み取り - -図6-80-READ構文(ランダム読み取り) - -![alt text](Image/6-80-Read.png) - -ファイルから任意のレコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 - -5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 - - KEY句がない場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 - - KEY句が指定されている場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 - -6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 - -10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 - diff --git a/automanual/old/6-34.md b/automanual/old/6-34.md deleted file mode 100644 index fb7aee9..0000000 --- a/automanual/old/6-34.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.34. RELEASE - -図6-81-RELEASE構文 - -![alt text](Image/6-81-Release.png) - -RELEASE文は、整列ファイルに新しいレコードを追加する。 - -1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 - -2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 - diff --git a/automanual/old/6-35.md b/automanual/old/6-35.md deleted file mode 100644 index 2a02c3c..0000000 --- a/automanual/old/6-35.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.35. RETURN - -図6-82-RETURN構文 - -![alt text](Image/6-82-Return.png) - -RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 - -1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 - -2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 - -3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 - diff --git a/automanual/old/6-36.md b/automanual/old/6-36.md deleted file mode 100644 index 5fc3275..0000000 --- a/automanual/old/6-36.md +++ /dev/null @@ -1,34 +0,0 @@ -## 6.36. REWRITE - -図6-83-REWRITE構文 - -![alt text](Image/6-83-Rewrite.png) - -REWRITE文は、ディスクファイル上の論理レコードを置き換える。 - -1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 - -2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 - -3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 - -4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 - -6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: - - a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 - - b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 - -7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: - - a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 - - b. レコード名-1のサイズは更新される可能性がある。 - -8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 - -9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 - diff --git a/automanual/old/6-37.md b/automanual/old/6-37.md deleted file mode 100644 index aeb0332..0000000 --- a/automanual/old/6-37.md +++ /dev/null @@ -1,10 +0,0 @@ -## 6.37. ROLLBACK - -図6-84-ROLLBACK構文 - -![alt text](Image/6-84-Rollback.png) - -ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 - -1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 - diff --git a/automanual/old/6-38-1.md b/automanual/old/6-38-1.md deleted file mode 100644 index d05e06c..0000000 --- a/automanual/old/6-38-1.md +++ /dev/null @@ -1,26 +0,0 @@ -## 6.38. SEARCH - -### 6.38.1. SEARCH文の書き方1 ― 順次探索 - -図6-85-SEARCH構文(順次探索) - -![alt text](Image/6-85-Search.png) - -SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 - -1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 - -2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 - -3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: - ``` - SET 指標名-1 TO 1 - ``` -4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 - -5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 - -6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 - -7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 -  diff --git a/automanual/old/6-38-2.md b/automanual/old/6-38-2.md deleted file mode 100644 index c1e8a3d..0000000 --- a/automanual/old/6-38-2.md +++ /dev/null @@ -1,61 +0,0 @@ -### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) - -図6-86-SEARCH構文(二分探索) - -![alt text](Image/6-86-Search.png) - -整列されたテーブルに対して二分探索を実行する。 - -1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 - -2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 - - a. テーブルは上記1項の要件を満たしている。 - - b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` - - c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 - - aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 - -3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 - -4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 - -5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 - -6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 - -7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 - -8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` - - a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 - - b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 - - - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 - - - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 - - - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 - - c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 - - d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 - -上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 - -コンピュータ研究者は、二つの探索方法を次のように比較する: - -- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 - -- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 - -探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 - ---- -`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 - -`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 - diff --git a/automanual/old/6-39-1.md b/automanual/old/6-39-1.md deleted file mode 100644 index dbc9f68..0000000 --- a/automanual/old/6-39-1.md +++ /dev/null @@ -1,22 +0,0 @@ -## 6.39. SET - -### 6.39.1. SET文の書き方1 ― 環境設定 - -図6-87-SET構文(環境設定) - -![alt text](Image/6-87-Set.png) - -プログラム内から環境値を簡単に設定することができる。 - -1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 - -2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 - - DSIPLAY SET ENVIRONMENT “VARNAME” TO - "VALUE" - “VARNAME” UPON ENVIRONMENT-NAME - END-DISPLAY - DSIPLAY - “VALUE” UPON ENVIRONMENT-VALUE - END-DISPLAY - diff --git a/automanual/old/6-39-2.md b/automanual/old/6-39-2.md deleted file mode 100644 index 2d79aca..0000000 --- a/automanual/old/6-39-2.md +++ /dev/null @@ -1,16 +0,0 @@ -### 6.39.2. SET文の書き方2 ― プログラムポインター設定 - -図6-88-SET構文(プログラムポインター設定) - -![alt text](Image/6-88-Set.png) - -手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 - -1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 - -2. program-pointer-1はプログラムポインターとして使用しなければならない。 - -3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 - -4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 - diff --git a/automanual/old/6-39-3.md b/automanual/old/6-39-3.md deleted file mode 100644 index 17af070..0000000 --- a/automanual/old/6-39-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.39.3. SET文の書き方3 ― アドレス設定 - -図6-89-SET構文(アドレス設定) - -![alt text](Image/6-89-Set.png) - -データ項目の内容ではなく、アドレスを処理するために使われる。 - -1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 - -2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 - diff --git a/automanual/old/6-39-4.md b/automanual/old/6-39-4.md deleted file mode 100644 index 6e54a5f..0000000 --- a/automanual/old/6-39-4.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.39.4. SET文の書き方4 ― インデックス設定 - -図6-90-SET構文(インデックス設定) - -![alt text](Image/6-90-Set.png) - -USAGE INDEXデータ項目に値を割り当てる。 - -1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 - diff --git a/automanual/old/6-39-5.md b/automanual/old/6-39-5.md deleted file mode 100644 index f8248bd..0000000 --- a/automanual/old/6-39-5.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.39.5. SET文の書き方5 ― UP / DOWN設定 - -図6-91-SET構文(UP/DOWN設定) - -![alt text](Image/6-91-Set.png) - -インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 - -1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 - -2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 - diff --git a/automanual/old/6-39-6.md b/automanual/old/6-39-6.md deleted file mode 100644 index 5a6e842..0000000 --- a/automanual/old/6-39-6.md +++ /dev/null @@ -1,14 +0,0 @@ -### 6.39.6. SET文の書き方6 ― 条件名設定 - -図6-92-SET構文(条件名設定) - -![alt text](Image/6-92-Set.png) - -レベル88条件名のTRUE/FALSE値を指定することができる。 - -1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 - -2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 - -3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 - diff --git a/automanual/old/6-39-7.md b/automanual/old/6-39-7.md deleted file mode 100644 index 637d4c6..0000000 --- a/automanual/old/6-39-7.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.39.7. SET文の書き方7 ― スイッチ設定 - -図6-93-SET構文(スイッチ設定) - -![alt text](Image/6-93-Set.png) - -スイッチをオンまたはオフにする。 - -1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 - diff --git a/automanual/old/6-4-1.md b/automanual/old/6-4-1.md deleted file mode 100644 index 3778313..0000000 --- a/automanual/old/6-4-1.md +++ /dev/null @@ -1,14 +0,0 @@ -## 6.4. ACCEPT - -### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り - -図6-18-ACCEPT構文(コンソールからの読み取り) - -![alt text](Image/6-18.png) - -コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 - -1. FROM句を使う場合、指定するニーモニック名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義のニーモニック名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 - -2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 - diff --git a/automanual/old/6-4-2.md b/automanual/old/6-4-2.md deleted file mode 100644 index db82816..0000000 --- a/automanual/old/6-4-2.md +++ /dev/null @@ -1,25 +0,0 @@ -### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 - -図6-19-ACCEPT構文(コマンドライン引数) - -![alt text](Image/6-19.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 - -2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 - - - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 - - - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 - - - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 - -3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 - -4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 - diff --git a/automanual/old/6-4-3.md b/automanual/old/6-4-3.md deleted file mode 100644 index 7e96959..0000000 --- a/automanual/old/6-4-3.md +++ /dev/null @@ -1,17 +0,0 @@ -### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 - -図6-20-ACCEPT構文(環境変数値の取得) - -![alt text](Image/6-20.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 - -2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 - -3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 - diff --git a/automanual/old/6-4-4.md b/automanual/old/6-4-4.md deleted file mode 100644 index 993a6ed..0000000 --- a/automanual/old/6-4-4.md +++ /dev/null @@ -1,20 +0,0 @@ -### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 - -図6-21-ACCEPT構文(画面データの取得) - -![alt text](Image/6-21.png) - -画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 - -1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 - -2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 - -4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 - -5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 - -6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - diff --git a/automanual/old/6-4-5.md b/automanual/old/6-4-5.md deleted file mode 100644 index 80d6812..0000000 --- a/automanual/old/6-4-5.md +++ /dev/null @@ -1,14 +0,0 @@ -### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 - -図6-22-ACCEPT構文(日付/時刻の取得)構文 - -![alt text](Image/6-22.png) - -システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 - -1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 - - 表6-23-ACCEPTオプション(日付/時刻の取得) - - ![!\[alt text\](Image/6-23.png)](Image/6-23.png) - diff --git a/automanual/old/6-4-6.md b/automanual/old/6-4-6.md deleted file mode 100644 index 8fcfc08..0000000 --- a/automanual/old/6-4-6.md +++ /dev/null @@ -1,10 +0,0 @@ -### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 - -図6-24-ACCEPT(画面サイズデータの取得)構文 - -![alt text](Image/6-24.png) - -プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 - -1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 - diff --git a/automanual/old/6-4-7.md b/automanual/old/6-4-7.md deleted file mode 100644 index 6ff0c0a..0000000 --- a/automanual/old/6-4-7.md +++ /dev/null @@ -1,8 +0,0 @@ -### 6.4.7. ACCEPT文の例外処理 - -図6-25-ACCEPT例外処理構文 - -![alt text](Image/6-25.png) - -ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 - diff --git a/automanual/old/6-40-1.md b/automanual/old/6-40-1.md deleted file mode 100644 index f203b04..0000000 --- a/automanual/old/6-40-1.md +++ /dev/null @@ -1,82 +0,0 @@ -## 6.40. SORT - -### 6.40.1. SORT文の書き方1 ― ファイルソート - -図6-94-SORT構文(ファイルソート) - -![alt text](Image/6-94-Sort.png) - -一つ以上のキー項目に従って、大量のデータを整列することができる。 - -1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 - -2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 - -3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 - -6. SORT文は次の3段階の働きがある。 - - ステージ1(入力フェーズ): - - a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 - - b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 - - c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 - - d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 - - e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 - - g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 - - h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 - - ステージ2(ソートフェーズ): - - a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - - b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 - - SORT Sort-File - ASCENDING KEY Transaction-Date - ASCENDING KEY Account-Number - DESCENDING KEY Transaction-Amount - . - . - . - - - このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 - - c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 - - ステージ3(出力フェーズ): - - a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 - - b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 - - c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 - - d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 - - e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 - - g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 - -7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 - ---- -`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 - -`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 - diff --git a/automanual/old/6-40-2.md b/automanual/old/6-40-2.md deleted file mode 100644 index 59e778b..0000000 --- a/automanual/old/6-40-2.md +++ /dev/null @@ -1,22 +0,0 @@ -### 6.40.2. SORT文の書き方2 ― テーブルソート - -図6-95-SORT構文(テーブルソート) - -![alt text](Image/6-95-Set.png) - -一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 - -1. テーブル名データ項目には、OCCURS句が必要である。 - -2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 - -3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 - -5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 - -6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - -7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 - diff --git a/automanual/old/6-41.md b/automanual/old/6-41.md deleted file mode 100644 index 0d5429e..0000000 --- a/automanual/old/6-41.md +++ /dev/null @@ -1,34 +0,0 @@ -## 6.41. START - -図6-96-START構文 - -![alt text](Image/6-96-Start.png) - -START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 - -1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 - -2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 - -3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 - -4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 - -5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 - -6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 - -7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 - - a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 - - b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 - -8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 - -9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 - -10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 - -11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 - diff --git a/automanual/old/6-42.md b/automanual/old/6-42.md deleted file mode 100644 index 7d12ec5..0000000 --- a/automanual/old/6-42.md +++ /dev/null @@ -1,19 +0,0 @@ -## 6.42. STOP - -図6-97-STOP構文 - -![alt text](Image/6-97-Stop.png) - -STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 - -1. RETURNING句とGIVING句は同意義のものとして利用できる。 - -2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 - -3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 - -4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: - - STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE - STOP RUN - diff --git a/automanual/old/6-43.md b/automanual/old/6-43.md deleted file mode 100644 index 255f905..0000000 --- a/automanual/old/6-43.md +++ /dev/null @@ -1,30 +0,0 @@ -## 6.43. STRING - -図6-98-STRING構文 - -![alt text](Image/6-98-String.png) - -STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 - -1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 - -2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 - -3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 - -4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 - -5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 - -6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 - -7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 - -8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 - -9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 - -10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 - -11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 - diff --git a/automanual/old/6-44-1.md b/automanual/old/6-44-1.md deleted file mode 100644 index 2d51a41..0000000 --- a/automanual/old/6-44-1.md +++ /dev/null @@ -1,16 +0,0 @@ -## 6.44. SUBTRACT - -### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM - -図6-99-SUBSTRACT構文 - -![alt text](Image/6-99-Subtract.png) - -FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/old/6-44-2.md b/automanual/old/6-44-2.md deleted file mode 100644 index 5e5b0cd..0000000 --- a/automanual/old/6-44-2.md +++ /dev/null @@ -1,16 +0,0 @@ -### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING - -図6-100-SUBSTRACT GIVING構文 - -![alt text](Image/6-100-Subtract.png) - -FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/old/6-44-3.md b/automanual/old/6-44-3.md deleted file mode 100644 index 9001dcf..0000000 --- a/automanual/old/6-44-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING - -図6-101-SUBSTRACT CORRESPONDING構文 - -![alt text](Image/6-101-Subtract.png) - -二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 - -1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - diff --git a/automanual/old/6-45.md b/automanual/old/6-45.md deleted file mode 100644 index 6bc0b86..0000000 --- a/automanual/old/6-45.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.45. SUPPRESS - -図6-102-SUPPRESS構文 - -![alt text](Image/6-102-Suppress.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 - diff --git a/automanual/old/6-46.md b/automanual/old/6-46.md deleted file mode 100644 index 8ec0703..0000000 --- a/automanual/old/6-46.md +++ /dev/null @@ -1,8 +0,0 @@ -## 6.46. TERMINATE - -図6-103-TERMINATE構文 - -![alt text](Image/6-103-Terminate.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 - diff --git a/automanual/old/6-47.md b/automanual/old/6-47.md deleted file mode 100644 index 7ad4f71..0000000 --- a/automanual/old/6-47.md +++ /dev/null @@ -1,24 +0,0 @@ -## 6.47. TRANSFORM - -図6-104-TRANSFORM構文 - -![alt text](Image/6-104-Transform.png) - -TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 - -1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 - -2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 - -3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 - -4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 - -5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 - - 図6-105-機能的なTRANSFORM文 - - ![alt text](Image/6-105-Transform.png) - diff --git a/automanual/old/6-48.md b/automanual/old/6-48.md deleted file mode 100644 index 2696b86..0000000 --- a/automanual/old/6-48.md +++ /dev/null @@ -1,15 +0,0 @@ -## 6.48. UNLOCK - -図6-106-UNLOCK構文 - -![alt text](Image/6-106-Unlock.png) - -この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 - -1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 - -2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 - ---- -`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 - diff --git a/automanual/old/6-49.md b/automanual/old/6-49.md deleted file mode 100644 index b7db717..0000000 --- a/automanual/old/6-49.md +++ /dev/null @@ -1,61 +0,0 @@ -## 6.49. UNSTRING - -図6-107-UNSTRING構文 - -![alt text](Image/6-107-Unstring.png) - -UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 - -1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 - -2. 定数-1および定数-2は、英数字の定数でなければならない。 - -3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 - -4. 一意名-10の値は0より大きい必要がある。 - -5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 - -6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 - -7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 - -8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 - -9. ソース文字列が部分文字列に解析される例を次に示す: - - ![alt text](Image/6-49-1.png) - - 図6-108-STRING文の例 - - ![alt text](Image/6-108-Unstring.png) - - 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 - - ![alt text](Image/6-49-2.png) - - すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 - - すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 - -10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-3.png) - -11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-4.png) - -12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 - -13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 - -14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 - -15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 - ---- -`27` 空白文字列のMOVEは、空白のMOVEと同じである。 - -`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 - diff --git a/automanual/old/6-5-1.md b/automanual/old/6-5-1.md deleted file mode 100644 index a21c2f9..0000000 --- a/automanual/old/6-5-1.md +++ /dev/null @@ -1,26 +0,0 @@ -## 6.5. ADD - -### 6.5.1. ADD文の書き方1 ― ADD TO - -図6-26-ADD TO構文 - -![alt text](Image/6-26.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 - -4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 - -5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 - - 図6-27-ON SIZE ERROR句を使用するサンプルプログラム - - ![alt text](Image/6-27.png) - -6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 - diff --git a/automanual/old/6-5-2.md b/automanual/old/6-5-2.md deleted file mode 100644 index f99be48..0000000 --- a/automanual/old/6-5-2.md +++ /dev/null @@ -1,18 +0,0 @@ -### 6.5.2. ADD文の書き方2 ― ADD GIVING - -図6-28-ADD GIVING構文 - -![alt text](Image/6-28.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. 一意名-2の内容は変更できない。 - -5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - diff --git a/automanual/old/6-5-3.md b/automanual/old/6-5-3.md deleted file mode 100644 index a200cb6..0000000 --- a/automanual/old/6-5-3.md +++ /dev/null @@ -1,12 +0,0 @@ -### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING - -図6-29-ADD CORRESPONDING構文 - -![alt text](Image/6-29.png) - -二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 - -1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - diff --git a/automanual/old/6-50.md b/automanual/old/6-50.md deleted file mode 100644 index 166d7a3..0000000 --- a/automanual/old/6-50.md +++ /dev/null @@ -1,81 +0,0 @@ -## 6.50. WRITE - -図6-109-WRITE構文 - -![alt text](Image/6-109-Write.png) - -WRITE文は、OPENファイルに新しいレコードを書き込む。 - -1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 - -2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 - -3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 - -4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 - -5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 - -6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 - -7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 - -8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 - -9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 - -10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 - -11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 - -12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 - -13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: - - a. AFTER ADVANCINGが指定されている場合: - - - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - c. BEFORE ADVANCINGが指定されている場合: - - - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 - - - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 - -14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 - - FD Report-File - LINAGE IS 66 LINES - ........WITH FOOTER AT 57 - ........LINES AT TOP 3 - ........LINES AT BOTTOM 3 - . - . - . - OPEN OUTPUT Report-File - PERFORM Generate-Page-Header - . - . - . - WRITE Report-Rec AFTER ADVANCING 1 LINE - AT END-OF-PAGE PERFORM Generate-Page-Header - END-WRITE - . - . - . - CLOSE Report-File - -15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 - -16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 - -17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 - diff --git a/automanual/old/6-6.md b/automanual/old/6-6.md deleted file mode 100644 index 010bca5..0000000 --- a/automanual/old/6-6.md +++ /dev/null @@ -1,42 +0,0 @@ -## 6.6. ALLOCATE - -図6-30-ALLOCATE構文 - -![alt text](Image/6-30.png) - -ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 - -1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 - -2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 - -3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 - -4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 - -5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 -6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 - -7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 - -8. 基本的な使用法は二つあり、最も単純なものは次の例である。 - - ALLOCATE My-01-Item - - `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 - - 二つ目の使用法は以下の通りである。 - - ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. - - SET ADDRESS OF My-01-Item TO The-Pointer. - - ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 - - 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 - -9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 - ---- -`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 - diff --git a/automanual/old/6-7.md b/automanual/old/6-7.md deleted file mode 100644 index bd033c9..0000000 --- a/automanual/old/6-7.md +++ /dev/null @@ -1,47 +0,0 @@ -## 6.7. CALL - -図6-31-CALL構文 - -![alt text](Image/6-31.png) - -CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 - -1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 - -2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 - -3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 - -4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 - -5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 - -6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 - -7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 - -8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 - -9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 - -10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 - -11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 - - 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) - - ![alt text](Image/6-32.png) - -12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 - - 図6-33-CALL BY VALUE句 - - ![alt text](Image/6-33.png) - -13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 - -14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 - ---- -`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 - diff --git a/automanual/old/6-8-1.md b/automanual/old/6-8-1.md deleted file mode 100644 index 69edccd..0000000 --- a/automanual/old/6-8-1.md +++ /dev/null @@ -1,12 +0,0 @@ -## 6.8. CANSEL - -### 6.8.1. CANCEL文の書き方1 ― CANCEL - -図6-34-CANCEL構文 - -![alt text](Image/6-34.png) - -CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 - -1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 - diff --git a/automanual/old/6-8-2.md b/automanual/old/6-8-2.md deleted file mode 100644 index 8d6803a..0000000 --- a/automanual/old/6-8-2.md +++ /dev/null @@ -1,8 +0,0 @@ -### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL - -図6-35-CANCEL ALL構文 - -![alt text](Image/6-35(cancel).png) - -CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 - diff --git a/automanual/old/6-9.md b/automanual/old/6-9.md deleted file mode 100644 index 90a3261..0000000 --- a/automanual/old/6-9.md +++ /dev/null @@ -1,22 +0,0 @@ -## 6.9. CLOSE - -図6-36-CLOSE構文 - -![alt text](Image/6-36-CLOSE.png) - -CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 - -1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 - -2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 - -3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 - -4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 - -5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 - -6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 - -7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 - diff --git a/automanual/old/7-1.md b/automanual/old/7-1.md deleted file mode 100644 index 5d7c127..0000000 --- a/automanual/old/7-1.md +++ /dev/null @@ -1,20 +0,0 @@ -# 7. 日本語の使用 - -日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 - -## 7.1. 英数字項目の日本語 - -文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 - - - 01 データ項目1 PIC X(8) VALUE"顧客code" - - 01 データ項目2 PIC X(10) VALUE"顧客コード" - -データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 - -注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 - -1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 -2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) - diff --git a/automanual/old/7-2.md b/automanual/old/7-2.md deleted file mode 100644 index 7267dc2..0000000 --- a/automanual/old/7-2.md +++ /dev/null @@ -1,13 +0,0 @@ -## 7.2. 日本語項目と表意定数 - -日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 - -表7-1-日本語項目と表意定数の値 - -| 表意定数 | シフトJISコード | -| --- | :--- | -| SPACE(S) | 日本語空白文字 X"8140" | -| HIGH-VALUE(S) | X"FFFF" | -| LOW-VALUE(S) | X"0000" | -| ALL 定数 | 定数の値に依存する | - diff --git a/automanual/old/7-3-1.md b/automanual/old/7-3-1.md deleted file mode 100644 index d5284d0..0000000 --- a/automanual/old/7-3-1.md +++ /dev/null @@ -1,49 +0,0 @@ -## 7.3. 各命令文と日本語の取扱い - -### 7.3.1. MOVE文 - -MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 - -表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 - -表7-2-転記の処理方法 - -| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | -| :--- | :--- | :--- | -| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | -| 非整数 | 日本語,日本語編集 | コンパイルエラー | -| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 日本語,日本語編集 | 英字 | そのまま転記 | -| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | -| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | -| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | - -データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 - -文字には半角カタカナも含まれる。 - -ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 - -受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 - -表7-3-送出し側データ項目の内容に対する処理方法 - -| 送出し側データ項目の内容 | 処理方式 | -| --- | --- | -| 正しい文字 | 全角文字へコード変換 | -| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | -| 正しい日本語文字 | そのまま転記 | -| 不正な日本語文字(≠文字) | そのまま転記 | -| X”00” | X”0000”29 | -| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | -| X”FF” | X”FFFF” | -| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | - -ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 - ---- -`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 - diff --git a/automanual/old/7-3-2.md b/automanual/old/7-3-2.md deleted file mode 100644 index df3acf6..0000000 --- a/automanual/old/7-3-2.md +++ /dev/null @@ -1,6 +0,0 @@ -### 7.3.2. ACCEPT/DISPLAY文 - -ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 - -日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 - diff --git a/automanual/old/7-4.md b/automanual/old/7-4.md deleted file mode 100644 index b7b50ea..0000000 --- a/automanual/old/7-4.md +++ /dev/null @@ -1,12 +0,0 @@ -## 7.4. UTF-8の使用 - -opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 - -1. PICTURE句において、「N」1つは3バイトと見なす。 - -2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 - -3. 空白詰めは半角空白で行われる。 - -4. STRING文において、項目の種類が混在した時のチェックを抑止する。 - diff --git a/automanual/old/8-1-1.md b/automanual/old/8-1-1.md deleted file mode 100644 index 783f243..0000000 --- a/automanual/old/8-1-1.md +++ /dev/null @@ -1,12 +0,0 @@ -# 8. opensource COBOLシステムインターフェース - -## 8.1. opensource COBOLコンパイラの使い方(cobc) - -### 8.1.1. 解説 - -プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 -プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 -空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 -opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 -opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 - diff --git a/automanual/old/8-1-2.md b/automanual/old/8-1-2.md deleted file mode 100644 index 1f0a78b..0000000 --- a/automanual/old/8-1-2.md +++ /dev/null @@ -1,88 +0,0 @@ -### 8.1.2. コンパイルオプション - -次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 - - 使い方: cobc [options] file... - オプション: - --help このメッセージを表示します - --version, -V コンパイラのバージョンを表示します - -v コンパイラが起動したプログラムを表示します - -x 実行可能プログラムをビルドします - -m 動的ロード可能モジュールをビルドします(デフォルト) - -std=<方言> 指定した方言に基づいて警告/機能します : - cobol2002 Cobol 2002 - cobol85 Cobol 85 - ibm IBM互換 - mvs MVS互換 - bs2000 BS2000互換 - mf Micro Focus互換 - default 指定しない - config/default.conf および config/*.conf を参照してください - -free 自由形式を使用します - -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します - -fixed 固定形式を使用します(デフォルト) - -O, -O2, -Os 最適化を有功にします - -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします - -debug すべての実行時エラーチェックを有功にします - -o <ファイル> 出力先を <ファイル> にします - -b すべての入力ファイルをひとつに結合します - 動的ロード可能モジュール - -E 前処理のみ; コンパイルやリンクを行いません - -C トランスレートのみ; COBOL から C へ変換します - -S コンパイルのみ; アセンブリファイルを出力します - -c コンパイルとアセンブルを行い、リンクを行いません - -t <ファイル> プログラムリストを <ファイル> に生成します - -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます - -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます - -l ライブラリ をリンクします - -B Cコンパイルフェーズに を追加します - -Q Cリンクフェーズに を追加します - -D Cコンパイラに を渡します - -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください - --list-reserved 予約語の一覧を表示します - --list-intrinsics 組み込み関数の一覧を表示します - --list-mnemonics 作成者語の一覧を表示します - -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) - -MT 依存関係リストで使用される対象ファイルを指定します - -MF <ファイル> 依存関係リストを <ファイル> に生成します - -ext 既定のファイル拡張子を追加します - -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします - -reference_check 実行時の参照チェックを有効にします - -constant(=) $IF 文で評価する定数名 に 値 を設定します - - -W すべての警告を有功にする - -Wall 以下を除くすべての警告を有功にする - -Wobsolete 廃要素が使われていれば警告する - -Warchaic 古い仕様が使われていれば警告する - -Wredefinition データ項目の再定義を警告する - -Wconstant 不適切な定数を警告する - -Wparentheses OR と AND が括弧なしで並んでいれば警告する - -Wstrict-typing タイプの不適合を厳密に警告する - -Wimplicit-define データ項目の再定義を警告する - -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する - (-Wall指定時は適用されません) - -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) - -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) - -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) - -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) - -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) - -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) - - -ftrace トレースコードの生成(実行された節/段落の追跡) - -ftraceall トレースコードの生成(実行された節/段落/文の追跡) - -fsyntax-only 文法チェックのみ。何も出力しない - -fdebugging-line デバッグ行(標識領域に'D')を有効にする - -fsource-location ソース行情報の生成(-debugか-gで有効) - -fimplicit-init Cobolラインタイム初期化の自動実行 - -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) - -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) - -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) - -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) - -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) - -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない - -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す - -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) - -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す - -[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 - diff --git a/automanual/old/8-1-3.md b/automanual/old/8-1-3.md deleted file mode 100644 index 7e2ea31..0000000 --- a/automanual/old/8-1-3.md +++ /dev/null @@ -1,10 +0,0 @@ -### 8.1.3. 実行可能プログラムのコンパイル - -最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 - - cobc –x prog1.cbl prog2.cbl prog3.cbl - -メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 - -これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 - diff --git a/automanual/old/8-1-4.md b/automanual/old/8-1-4.md deleted file mode 100644 index f241eb8..0000000 --- a/automanual/old/8-1-4.md +++ /dev/null @@ -1,35 +0,0 @@ -### 8.1.4. 動的にロード可能なサブプログラム - -実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 - - cobc –m sprog1.cbl -または - - cobc –m sprog1.cbl sprog2.cbl sprog3.cbl - -上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 - -次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 - -1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 - -2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 - -3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 - -4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき - - a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 - - b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 - - c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 - - - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 - - - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 - -5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 - -「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 - diff --git a/automanual/old/8-1-5.md b/automanual/old/8-1-5.md deleted file mode 100644 index f00e201..0000000 --- a/automanual/old/8-1-5.md +++ /dev/null @@ -1,16 +0,0 @@ -### 8.1.5. 静的サブルーチン - -opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 - - cobc –S sprog1.cbl - -(注:「**-S**」は大文字で表記する) - -これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 - -メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 - - cobc –x mainprog.cbl sprog1.s - -複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 - diff --git a/automanual/old/8-1-6.md b/automanual/old/8-1-6.md deleted file mode 100644 index c243152..0000000 --- a/automanual/old/8-1-6.md +++ /dev/null @@ -1,132 +0,0 @@ -### 8.1.6. COBOLとCプログラムの結合 - -opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 - -#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 - -COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 - -#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い - -どちらの言語も、文字列を固定長の連続した文字順序として格納する。 - -COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: - - 01 LastName PIC X(15). - -USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 - -実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: - - char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ - -Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 - -#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 - -これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 - -表8-1-Cまたはopensource COBOLのデータ型の一致 - -| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | -| :--- | :--- | :--- | :--- | -|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | -| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | -| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | -| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| -| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | -| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | -| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | -| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | -|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | -|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | -|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | -| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | - - - - -同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 - -様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 - -#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し - -CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 - -図8-2-opensource COBOLのC呼び出し - -![alt text](Image/8-2.png) - -考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 - -COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 - -Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` - -これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - $ cc –c subc.c - $ cobc -x maincob.cbl subc.o - $ maincob - Starting cobmain - Starting subc - Arg1=Arg1 - Arg2=Arg2 - Arg3=123456789 - Back - Arg1=Arg1 - Arg2=Yrg2 - Arg3=+0987654321 - Returned value=+000000002 - $ - - - -null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 - -[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 - -#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し - -ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 - -図8-3-Cのopensource COBOL呼び出し - -![alt text](Image/8-3.png) - -Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 - -「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 - -Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 - -コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl - C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob - C:\Users\Gary\Documents\Programs> mainc.exe - Starting mainc... - Starting cobsub.cbl - Arg1=Arg1 - Arg2=Arg2 - Arg3=+0123456789 - Back - Arg1=Xrg1 - Arg2=Xrg2 - Arg3=987654321 - Returned value=2 - C:\Users\Gary\Documents\Programs> - - -第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 - -ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 - ---- -`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 - -`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 - -`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 - diff --git a/automanual/old/8-1-7.md b/automanual/old/8-1-7.md deleted file mode 100644 index 66de2b6..0000000 --- a/automanual/old/8-1-7.md +++ /dev/null @@ -1,29 +0,0 @@ -### 8.1.7. 重要な環境変数 - -次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 - -表8-4-環境変数コンパイラ - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | -| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | -| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | -| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | -|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | -| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | -| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | -| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | -| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | -| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | -| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | -|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | -|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | - ---- -`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 - diff --git a/automanual/old/8-1-8.md b/automanual/old/8-1-8.md deleted file mode 100644 index 9cddd97..0000000 --- a/automanual/old/8-1-8.md +++ /dev/null @@ -1,24 +0,0 @@ -### 8.1.8. コンパイル時のコピーブックの検索 - -opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 - -- コンパイルされるプログラムが存在するフォルダ。 -- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 -- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 -- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 - -上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 - -- XXXXXXXX.CPY -- XXXXXXXX.CBL -- XXXXXXXX.COB -- XXXXXXXX.cpy -- XXXXXXXX.cbl -- XXXXXXXX.cob -- XXXXXXXX - -UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 - ---- -`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 - diff --git a/automanual/old/8-1-9.md b/automanual/old/8-1-9.md deleted file mode 100644 index cf58c51..0000000 --- a/automanual/old/8-1-9.md +++ /dev/null @@ -1,116 +0,0 @@ -### 8.1.9. コンパイラ構成ファイルの使い方 - -opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 - -以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 - -``` -# COBOL compiler configuration -*- sh -*- - -# Value: any string -name: "opensource COBOL" - -# Value: int -tab-width: 8 -text-column: 72 - -# Value: 'cobol2002', 'mf', 'ibm' -# -assign-clause: mf - -# If yes, file names are resolved at run time using environment variables. -# For example, given ASSIGN TO "DATAFILE", the actual file name will be -# 1. the value of environment variable 'DD_DATAFILE' or -# 2. the value of environment variable 'dd_DATAFILE' or -# 3. the value of environment variable 'DATAFILE' or -# 4. the literal "DATAFILE" -# If no, the value of the assign clause is the file name. -# -# Value: 'yes', 'no' -filename-mapping: yes - -# Value: 'yes', 'no' -pretty-display: yes - -# Value: 'yes', 'no' -auto-initialize: yes - -# Value: 'yes', 'no' -complex-odo: no - -# Value: 'yes', 'no' -indirect-redefines: no - -# Binary byte size - defines the allocated bytes according to PIC -# Value: signed unsigned bytes -# ------ -------- ----- -# '2-4-8' 1 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1-2-4-8' 1 - 2 1 -# 3 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1--8' 1 - 2 1 - 2   1 -# 3 - 4 3 - 4 2 -# 5 - 6 5 - 7 3 -# 7 - 9 8 - 9 4 -# 10 - 11 10 - 12 5 -# 12 - 14 13 - 14 6 -# 15 - 16 15 - 16 7 -# 17 - 18 17 - 18 8 -binary-size: 1-2-4-8 - -# Value: 'yes', 'no' -binary-truncate: yes - -# Value: 'native', 'big-endian' -binary-byteorder: big-endian - -# Value: 'yes', 'no' -larger-redefines-ok: no - -# Value: 'yes', 'no' -relaxed-syntax-check: no - -# Perform type OSVS - If yes, the exit point of any currently executing perform -# is recognized if reached. -# Value: 'yes', 'no' -perform-osvs: no - -# If yes, linkage-section items remain allocated -# between invocations. -# Value: 'yes', 'no' -sticky-linkage: no - -# If yes, allow non-matching level numbers -# Value: 'yes', 'no' -relax-level-hierarchy: no - -# not-reserved: -# Value: Word to be taken out of the reserved words list -# (case independent) - -# Dialect features -# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' -author-paragraph: obsolete -memory-size-clause: obsolete -multiple-file-tape-clause: obsolete -label-records-clause: obsolete -value-of-clause: obsolete -data-records-clause: obsolete -top-level-occurs-clause: skip -synchronized-clause: ok -goto-statement-without-name: obsolete -stop-literal-statement: obsolete -debugging-line: obsolete -padding-character-clause: obsolete -next-sentence-phrase: archaic -eject-statement: skip -entry-statement: obsolete -move-noninteger-to-alphanumeric: error -odo-without-to: ok -``` - diff --git a/automanual/old/8-2-1.md b/automanual/old/8-2-1.md deleted file mode 100644 index 6c0e9f7..0000000 --- a/automanual/old/8-2-1.md +++ /dev/null @@ -1,24 +0,0 @@ -## 8.2. opensource COBOLプログラムの実行 - -### 8.2.1. プログラムの直接実行 - -「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 - -これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 - -これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 - -プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 - -プログラムの直接実行構文は次の通りである。 - - [path]program [arguments] - -例: -``` - /usr/local/printaccount ACCT=6625378 - または - C:\Users\Me\Documents\Programs\printaccount.exe - ACCT=6625378 -``` - diff --git a/automanual/old/8-2-2.md b/automanual/old/8-2-2.md deleted file mode 100644 index bf162cf..0000000 --- a/automanual/old/8-2-2.md +++ /dev/null @@ -1,22 +0,0 @@ -### 8.2.2. 「cobcrun」ユーティリティの使用 - -「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 - -opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 - -この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: - - [path]cobcrun program [arguments] - -プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 - -cobcrunの使用例: - - cd /usr/local - cobcrun printaccount ACCT=6625378 - または - cd C:\Users\Me\Documents\Programs - cobcrun printaccount.exe ACCT=6625378 - -cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 - diff --git a/automanual/old/8-2-3.md b/automanual/old/8-2-3.md deleted file mode 100644 index b0be69e..0000000 --- a/automanual/old/8-2-3.md +++ /dev/null @@ -1,7 +0,0 @@ -### 8.2.3. プログラムの引数 - -プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 - -- ACCEPT ・・・ FROM COMMAND-LINE -- ACCEPT ・・・ FROM ARGUMENT-VALUE - diff --git a/automanual/old/8-2-4.md b/automanual/old/8-2-4.md deleted file mode 100644 index 43f0652..0000000 --- a/automanual/old/8-2-4.md +++ /dev/null @@ -1,24 +0,0 @@ -### 8.2.4. 重要な環境変数 - -次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 - -表8-5-実行時環境変数 - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| -|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | -|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | -|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| -|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| -|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| -|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| -|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| - ---- -`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 -`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 -`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 - diff --git a/automanual/old/8-3-1.md b/automanual/old/8-3-1.md deleted file mode 100644 index db09af2..0000000 --- a/automanual/old/8-3-1.md +++ /dev/null @@ -1,749 +0,0 @@ -## 8.3. 組み込みサブルーチン - -### 8.3.1. 「名前による呼び出し」ルーチン - -opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 - -これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 - - -- 現在のディレクトリの変更 -- ファイルのコピー -- ディレクトリの作成 -- ファイルの作成、開く、閉じる、読み取り、書き込み -- ディレクトリ(フォルダ)の削除 -- ファイルの削除 -- サブルーチンに渡された引数の数の決定 -- ファイル情報の取得(サイズと最終変更日時) -- サブルーチンに渡される引数の長さ(バイト単位)の取得 -- 項目の左揃え、右揃え、または中央揃えの決定 -- ファイルの移動(破壊的な「コピー」) -- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする -- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする - - 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない -- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する - -次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 - -#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* - -このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 - -*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 - -statusは次のいずれかの値を受け取る。 - -| | | -| --- | --- | -| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | -| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | -| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | - - -#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 - -[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 - -#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -第3引数は必須ではあるが、使用されない。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 - -#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -第2引数は必須ではあるが、使用されない。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 - -#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* - -このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 File-Info. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date - 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time - -変更時刻の小数点以下2桁は常に0である。 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 - -#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” - -C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 - -- なし 「R」と同じように扱われる -- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる -- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる -- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる -- それ以外 「R」として扱われる - -#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* - -このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 - -与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 - -| | | -| --- | --- | -| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | -| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | -| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | - -``` - 01 PATTERN PIC X(5) VALUE "*". - 01 DIRECTORY PIC X(256) VALUE - "./list". - 01 FILENAME PIC X(30). - 01 MYDIR PIC 9(8) COMP-5. - PROCEDURE DIVISION. - CALL "C$LIST-DIRECTORY" USING 1, - DIRECTORY, - PATTERN - END-CALL. - MOVE RETURN-CODE TO MYDIR. - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL. - PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES - DISPLAY FUNCTION TRIM(FILENAME) - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL - END-PERFORM. - CALL "C$LIST-DIRECTORY" USING 3, MYDIR - END-CALL. -``` - -#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 - -#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* - -C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 - -メインプログラムからCALLされた場合、戻り値は常に0になる。 - -[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 - -#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* - -このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 - -サイズは、RETURN-CODE特殊レジスタに返される。 - -指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 - -#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* - -C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 - -1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 - -[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 - -#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 - -#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 - -#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「AND」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 - -操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 - -[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 - -#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* - -このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 Argument-2. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-DD PIC 9(2) COMP. *> Modification Time - 05 Mod-MO PIC 9(2) COMP. - 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date - 05 Mod-HH PIC 9(2) COMP. - 05 Mod-MM PIC 9(2) COMP. - 05 Mod-SS PIC 9(2) COMP. - 05 FILLER PIC 9(2) COMP. *> This will always be 00 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 - -#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* - -CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 - -*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 - -サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 - -#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 - -#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 - -#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* - -CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 - -引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` - -後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 - -サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 - -[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 - -#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* - -CBL_DELETE_DIRを使って空のディレクトリを削除する。 - -唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 - -指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 - -RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 - -#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* - -このルーチンは、一般的なエラー処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 - -一度に有効にできるユーザ定義のエラー手続きは1つだけである。 - -エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 - -エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoerrproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Err-Proc. - SET Err-Proc-Address TO ENTRY "999-Err" - CALL "CBL_ERROR_PROC" - USING Err-Proc-Install, Err-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not' & - 'register Error Procedure' - END-IF - . - 099-Now-Test-Err-Proc. - CALL "Tilt" END-CALL - GOBACK - . - 999-Err-Proc. - ENTRY "999-Err" - DISPLAY - '** A Runtime Error Has Occurred **' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* - -このルーチンは、一般的な終了処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 - -一度に有効にできるユーザ定義の終了手続きは1つだけである。 - -終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 - -終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoexitproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Exit-Proc. - SET Exit-Proc-Address TO ENTRY "999-Exit" - CALL "CBL_EXIT_PROC" - USING Exit-Proc-Install, Exit-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not register Exit Procedure' - END-IF - 099-Now-Test-Exit-Proc. - DISPLAY - 'Executing a STOP RUN...' - END-DISPLAY - GOBACK - . - 999-Exit-Proc. - ENTRY "999-Exit" - DISPLAY - '*** STOP RUN has been executed ***' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「EQ」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* - -このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 - -このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 - -#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* - -現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 - -第1引数は使用されないが、**BY VALUE**で指定する必要がある。 - -*length*引数は**BY VALUE**で指定する必要がある。 - -*buffer*引数は**BY REFERENCE**で指定する必要がある。 - -*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 - -*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 - -ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 - -#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「IMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 1 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NIMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* - -このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 - -項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOT」プロセスを示している。 - -| 古い引数2ビット | 新しい引数2ビット | -| :---: | :---: | -| 0 | 1 | -| 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* - -CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 - -item-1として次の集団項目を定義する。 - - 01 KEISEN. - 02 KEI-CMD PIC 9(1) COMP-X. - 02 KEI-LINE PIC 9(2) COMP-X. - 02 KEI-COL PIC 9(2) COMP-X. - 02 KEI-LNG1 PIC 9(2) COMP-X. - 02 KEI-LNG2 PIC 9(2) COMP-X. - 02 KEI-COLOR PIC 9(2) COMP-X. - 02 KEI-PRN PIC 9(2) COMP-X. - -各項目の意味を以下に示す。 - -| | | -| --- | --- | -| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| -| KEI-LINE | 開始ライン(1~24) | -| KEI-COL | 開始カラム(1~80) | -| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | -| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | -| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | -| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | - -#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* - -CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 - -*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 - -1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 - -[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 - -#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* - -このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 - -*file-path*引数は、英数字定数またはデータ項目である。 - -*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 - -- 1 = 入力 (読み取り専用) -- 2 = 出力 (書き込み専用) -- 3 = 入力または出力 - -第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 - -最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 - -RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 - -[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 - -#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「OR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 1 | - - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer - -このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 - -*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* - -このサブルーチンを使用してファイル名を変更できる。 - -*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 - -このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 - -ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 - -#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 - -#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 - -#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* - -このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 -唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「XOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.42. CALL “SYSTEM” USING *command* - -このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 - -CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 - -コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 - -Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 - -ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 - -実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 - ---- -`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
-`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
- diff --git a/automanual/old/9-1.md b/automanual/old/9-1.md deleted file mode 100644 index f30a611..0000000 --- a/automanual/old/9-1.md +++ /dev/null @@ -1,51 +0,0 @@ -# 9. サンプルプログラム - -## 9.1. FileStat-Msgs.cpy – ファイル状態コード - -このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 - -コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 - -``` - COPY FileStat-Msgs - REPLACING STATUS BY Input-File-Status - MSG BY Error-Message. -``` - -以下は、コピーブック「FileStat-Msgs.cpy」である。 - -``` - EVALUATE STATUS - WHEN 00 MOVE 'SUCCESS ' TO MSG - WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG - WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG - WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG - WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG - WHEN 10 MOVE 'END OF FILE ' TO MSG - WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG - WHEN 21 MOVE 'KEY INVALID ' TO MSG - WHEN 22 MOVE 'KEY EXISTS ' TO MSG - WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG - WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG - WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG - WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG - WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG - WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG - WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG - WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG - WHEN 41 MOVE 'ALREADY OPEN ' TO MSG - WHEN 42 MOVE 'NOT OPEN ' TO MSG - WHEN 43 MOVE 'READ NOT DONE ' TO MSG - WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG - WHEN 46 MOVE 'READ ERROR ' TO MSG - WHEN 47 MOVE 'INPUT DENIED ' TO MSG - WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG - WHEN 49 MOVE 'I/O DENIED ' TO MSG - WHEN 51 MOVE 'RECORD LOCKED ' TO MSG - WHEN 52 MOVE 'END-OF-PAGE ' TO MSG - WHEN 57 MOVE 'I/O LINAGE ' TO MSG - WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG - WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG - END-EVALUATE. -``` - diff --git a/automanual/old/9-2.md b/automanual/old/9-2.md deleted file mode 100644 index 510be72..0000000 --- a/automanual/old/9-2.md +++ /dev/null @@ -1,198 +0,0 @@ -## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン - -次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 - -``` -IDENTIFICATION DIVISION. -PROGRAM-ID. COBDUMP. -***************************************************************** -** This is an OpenCOBOL subroutine that will generate a ** -** formatted Hex/Char dump of a storage area. To use this ** -** subroutine, simply CALL it as follows: ** -** ** -** CALL "COBDUMP" USING ** -** [ ] ** -** ** -** If specified, the argument specifies how many ** -** bytes of are to be dumped. If absent, all of ** -** will be dumped (i.e. LENGTH() will ** -** be assumed for ). ** -** ** -** >>> Note that the subroutine name MUST be specified in <<< ** -** >>> UPPERCASE <<< ** -** ** -** The dump is generated to STDERR, so you may pipe it to a ** -** file when you execute your program using "2> file". ** -** ** -** AUTHOR: GARY L. CUTLER ** -** CutlerGL@gmail.c ** -** ** -** NOTE: The author has a sentimental attachment to ** -** this subroutine - it's been around since 1971 ** -** and it's been converted to and run on 10 dif- ** -** ferent operating system/compiler environments ** -** ** -** DATE-WRITTEN: October 14, 1971 ** -** ** -***************************************************************** -** DATE CHANGE DESCRIPTION ** -** ====== ==================================================== ** -** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** -** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** -** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** -** SCREEN SECTION enhancements ** -** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** -** GC0983 Converted to IBM VS COBOL - COBOL '74 ** -** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** -** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** -** extensions ** -** GC0703 Converted to Unisys Universal Compiling System (UCS) ** -** COBOL (UCOB) - COBOL '85 ** -** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** -** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** -** 2002 features ** -** GC0410 Enhanced to make 2nd argument (buffer length) ** -** optional ** -***************************************************************** -ENVIRONMENT DIVISION. -CONFIGURATION SECTION. -REPOSITORY. - FUNCTION ALL INTRINSIC. -DATA DIVISION. -WORKING-STORAGE SECTION. -78 Undisplayable-Char-Symbol VALUE X'F9'. -01 Addr-Pointer USAGE POINTER. -01 Addr-Number REDEFINES Addr-Pointer - USAGE BINARY-LONG. - -01 Addr-Sub USAGE BINARY-CHAR. - -01 Addr-Value USAGE BINARY-LONG. - -01 Buffer-Length USAGE BINARY-LONG. - -01 Buffer-Sub COMP-5 PIC 9(4). - -01 Hex-Digits VALUE '0123456789ABCDEF'. -05 Hex-Digit OCCURS 16 TIMES PIC X(1). - -01 Left-Nibble COMP-5 PIC 9(1). -01 Nibble REDEFINES Left-Nibble - BINARY-CHAR. -01 Output-Detail. -05 OD-Addr. -10 OD-Addr-Hex OCCURS 8 TIMES PIC X. -05 FILLER PIC X(1). -05 OD-Byte PIC Z(3)9. -05 FILLER PIC X(1). -05 OD-Hex OCCURS 16 TIMES. -10 OD-Hex-1 PIC X. -10 OD-Hex-2 PIC X. -10 FILLER PIC X. -05 OD-ASCII OCCURS 16 TIMES - PIC X. -01 Output-Sub COMP-5 PIC 9(2). - -01 Output-Header-1. - 05 FILLER PIC X(80) VALUE - '<-Addr-> Byte ' & - '<---------------- Hexadecimal ----------------> ' & - '<---- Char ---->'. -01 Output-Header-2. - 05 FILLER PIC X(80) VALUE - '======== ==== ' & - '=============================================== ' & - '================'. -01 PIC-XX. -05 FILLER PIC X VALUE LOW-VALUES. -05 PIC-X PIC X. -01 PIC-Halfword REDEFINES PIC-XX - PIC 9(4) COMP-X. -01 PIC-X10. -05 FILLER PIC X(2). -05 PIC-X8 PIC X(8). -01 Right-Nibble COMP-5 PIC 9(1). - -LINKAGE SECTION. -01 Buffer PIC X ANY LENGTH. - -01 Buffer-Len USAGE BINARY-LONG. -PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. -000-COBDUMP. - IF NUMBER-OF-CALL-PARAMETERS = 1 - MOVE LENGTH(Buffer) TO Buffer-Length - ELSE - MOVE Buffer-Len TO Buffer-Length - END-IF - MOVE SPACES TO Output-Detail - SET Addr-Pointer TO ADDRESS OF Buffer - PERFORM 100-Generate-Address - MOVE 0 TO Output-Sub - DISPLAY - Output-Header-1 UPON SYSERR - END-DISPLAY - DISPLAY - Output-Header-2 UPON SYSERR - END-DISPLAY - PERFORM VARYING Buffer-Sub FROM 1 BY 1 - UNTIL Buffer-Sub > Buffer-Length - ADD 1 - TO Output-Sub - END-ADD - IF Output-Sub = 1 - MOVE Buffer-Sub TO OD-Byte - END-IF - MOVE Buffer (Buffer-Sub : 1) TO PIC-X - IF (PIC-X < ' ') - OR (PIC-X > '~') - MOVE Undisplayable-Char-Symbol - TO OD-ASCII (Output-Sub) - ELSE - MOVE PIC-X - TO OD-ASCII (Output-Sub) - END-IF - DIVIDE PIC-Halfword BY 16 - GIVING Left-Nibble - REMAINDER Right-Nibble - END-DIVIDE - ADD 1 TO Left-Nibble - Right-Nibble - END-ADD - MOVE Hex-Digit (Left-Nibble) - TO OD-Hex-1 (Output-Sub) - MOVE Hex-Digit (Right-Nibble) - TO OD-Hex-2 (Output-Sub) - IF Output-Sub = 16 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - MOVE SPACES TO Output-Detail - MOVE 0 TO Output-Sub - SET Addr-Pointer UP BY 16 - PERFORM 100-Generate-Address - END-IF -END-PERFORM -IF Output-Sub > 0 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - END-IF - EXIT PROGRAM - . -100-Generate-Address. - MOVE 8 TO Addr-Sub - MOVE Addr-Number TO Addr-Value - MOVE ALL '0' TO OD-Addr - PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 - DIVIDE Addr-Value BY 16 - GIVING Addr-Value - REMAINDER Nibble - END-DIVIDE - ADD 1 TO Nibble - MOVE Hex-Digit (Nibble) - TO OD-Addr-Hex (Addr-Sub) - SUBTRACT 1 FROM Addr-Sub -END-PERFORM -. -``` - diff --git a/automanual/old/TOC.md b/automanual/old/TOC.md deleted file mode 100644 index 0d4219d..0000000 --- a/automanual/old/TOC.md +++ /dev/null @@ -1,234 +0,0 @@ -目次 -1. [まえがき](1-1.md) - - [1.1. opensource COBOL とは](1-1.md#11-opensource-cobolとは) - - [1.2. COBOL/opensource COBOL の重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) - - [1.2.1. COBOL プログラムの構文](1-2-1.md#121-cobolプログラムの構文) - - [1.2.2. コピーブック](1-2-2.md) - - [1.2.3. 構造化データ](1-2-3.md) - - [1.2.4. ファイル](1-2-4.md) - - [1.2.5. 表操作](1-2-5.md) - - [1.2.6. データの並び替えと結合](1-2-6.md) - - [1.2.7. 文字列操作](1-2-7.md) - - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) - - [1.3. 構文規則](1-3.md) - - [1.4. ソースコードの形式](1-4.md) - - [1.5. カンマ/セミコロンの使い方](1-5.md) - - [1.6. COPY 文の使い方](1-6.md) - - [1.7. 定数の使い方](1-7-1.md) - - [1.7.1. 数字定数](1-7-1.md#171-数字定数) - - [1.7.2. 英数字定数](1-7-2.md) - - [1.7.3. 日本語定数](1-7-3.md) - - [1.8. 表意定数の使い方](1-8.md) - - [1.9. ユーザ定義名](1-9.md) - - [1.10. LENGTH OF の使い方](1-10.md) -2. [opensource COBOL のプログラム形式](2-1.md) - - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) - - [2.2. ネストされたユーザ定義関数](2-2.md) -3. [見出し部](3.md) -4. [環境部](4-1-1.md) - - [4.1. 構成節](4-1-1.md#41-構成節) - - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) - - [4.1.2. 実行用計算機段落](4-1-2.md) - - [4.1.3. リポジトリ段落](4-1-3.md) - - [4.1.4. 特殊名段落](4-1-4.md) - - [4.2. 入出力節](4-2-1-1.md) - - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) - - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) - - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) - - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) - - [4.2.2. 入出力管理段落](4-2-2.md) -5. [データ部](5-1.md) - - [5.1. ファイル記述](5-1.md#51-ファイル記述) - - [5.2. 整列用記述](5-2.md) - - [5.3. データ記述の形式](5-3.md) - - [5.4. 条件名](5-4.md) - - [5.5. 定数記述](5-5.md) - - [5.6. 画面記述](5-6.md) -6. [手続き部](6-1-1.md) - - [6.1. 構成要素](6-1-1.md#61-構成要素) - - [6.1.1. 表の参照](6-1-1.md#611-表の参照) - - [6.1.2. データ名の修飾](6-1-2.md) - - [6.1.3. 部分参照](6-1-3.md) - - [6.1.4. 式](6-1-4-1.md) - - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) - - [6.1.4.2. 条件式](6-1-4-2.md) - - [6.1.5. ピリオド(.)](6-1-5.md) - - [6.1.6. 動詞/END-動詞](6-1-6.md) - - [6.1.7. 特殊レジスタ](6-1-7.md) - - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) - - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) - - [6.1.8.2. レコードロック](6-1-8-2.md) - - [6.2. 記述形式](6-2.md) - - [6.3. 宣言の記述形式](6-3.md) - - [6.4. ACCEPT](6-4-1.md) - - [6.4.1. ACCEPT 文の書き方 1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) - - [6.4.2. ACCEPT 文の書き方 2 ― コマンドライン引数の取得](6-4-2.md) - - [6.4.3. ACCEPT 文の書き方 3 ― 環境変数値の取得](6-4-3.md) - - [6.4.4. ACCEPT 文の書き方 4 ― 画面データの取得](6-4-4.md) - - [6.4.5. ACCEPT 文の書き方 5 ― 日付/時刻の取得](6-4-5.md) - - [6.4.6. ACCEPT 文の書き方 6 ― 画面サイズデータの取得](6-4-6.md) - - [6.4.7. ACCEPT 文の例外処理](6-4-7.md) - - [6.5. ADD](6-5-1.md) - - [6.5.1. ADD 文の書き方 1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) - - [6.5.2. ADD 文の書き方 2 ― ADD GIVING](6-5-2.md) - - [6.5.3. ADD 文の書き方 3 ― ADD CORRESPONDING](6-5-3.md) - - [6.6. ALLOCATE](6-6.md) - - [6.7. CALL](6-7.md) - - [6.8. CANCEL](6-8-1.md) - - [6.8.1. CANCEL 文の書き方 1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) - - [6.8.2. CANCEL 文の書き方 2 ― CANCEL ALL](6-8-2.md) - - [6.9. CLOSE](6-9.md) - - [6.10. COMMIT](6-10.md) - - [6.11. COMPUTE](6-11.md) - - [6.12. CONTINUE](6-12.md) - - [6.13. DELETE](6-13-1.md) - - [6.13.1. DELETE 文の書き方 1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) - - [6.13.2. DELETE 文の書き方 2 ― DELETE FILE](6-13-2.md) - - [6.14. DISPLAY](6-14-1.md) - - [6.14.1. DISPLAY 文の書き方 1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) - - [6.14.2. DISPLAY 文の書き方 2 ― コマンドライン引数へのアクセス](6-14-2.md) - - [6.14.3. DISPLAY 文の書き方 3 ― 環境変数へのアクセスまたは設定](6-14-3.md) - - [6.14.4. DISPLAY 文の書き方 4 ― 画面データ](6-14-4.md) - - [6.14.5. DISPLAY 文の例外処理](6-14-5.md) - - [6.15. DIVIDE](6-15-1.md) - - [6.15.1. DIVIDE 文の書き方 1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) - - [6.15.2. DIVIDE 文の書き方 2 ― DIVIDE INTO GIVING](6-15-2.md) - - [6.15.3. DIVIDE 文の書き方 3 ― DIVIDE BY GIVING](6-15-3.md) - - [6.15.4. DIVIDE 文の書き方 4 ― DIVIDE INTO REMAINDER](6-15-4.md) - - [6.15.5. DIVIDE 文の書き方 5 ― DIVIDE BY REMAINDER](6-15-5.md) - - [6.16. ENTRY](6-16.md) - - [6.17. EVALUATE](6-17.md) - - [6.18. EXIT](6-18.md) - - [6.19. FREE](6-19.md) - - [6.20. GENERATE](6-20.md) - - [6.21. GOBACK](6-21.md) - - [6.22. GO TO](6-22-1.md) - - [6.22.1. GO TO 文の書き方 1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) - - [6.22.2. GO TO 文の書き方 2 ― GO TO DEPENDING ON](6-22-2.md) - - [6.23. IF](6-23.md) - - [6.24. INITIALIZE](6-24.md) - - [6.25. INITIATE](6-25.md) - - [6.26. INSPECT](6-26.md) - - [6.27. MERGE](6-27.md) - - [6.28. MOVE](6-28-1.md) - - [6.28.1. MOVE 文の書き方 1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) - - [6.28.2. MOVE 文の書き方 2 ― MOVE CORRESPONDING](6-28-2.md) - - [6.29. MULTIPLY](6-29-1.md) - - [6.29.1. MULTIPLY 文の書き方 1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) - - [6.29.2. MULTIPLY 文の書き方 2 ― MULTIPLY GIVING](6-29-2.md) - - [6.30. NEXT SENTENCE](6-30.md) - - [6.31. OPEN](6-31.md) - - [6.32. PERFORM](6-32-1.md) - - [6.32.1. PERFORM 文の書き方 1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) - - [6.32.2. PERFORM 文の書き方 2 ― インライン型](6-32-2.md) - - [6.33. READ](6-33-1.md) - - [6.33.1. READ 文の書き方 1 ―順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) - - [6.33.2. READ 文の書き方 2 ― ランダム読み取り](6-33-2.md) - - [6.34. RELEASE](6-34.md) - - [6.35. RETURN](6-35.md) - - [6.36. REWRITE](6-36.md) - - [6.37. ROLLBACK](6-37.md) - - [6.38. SEARCH](6-38-1.md) - - [6.38.1. SEARCH 文の書き方 1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) - - [6.38.2. SEARCH 文の書き方 2 ― 二分探索(SEARCH ALL)](6-38-2.md) - - [6.39. SET](6-39-1.md) - - [6.39.1. SET 文の書き方 1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) - - [6.39.2. SET 文の書き方 2 ― プログラムポインター設定](6-39-2.md) - - [6.39.3. SET 文の書き方 3 ― アドレス設定](6-39-3.md) - - [6.39.4. SET 文の書き方 4 ― インデックス設定](6-39-4.md) - - [6.39.5. SET 文の書き方 5 ― UP/DOWN 設定](6-39-5.md) - - [6.39.6. SET 文の書き方 6 ― 条件名設定](6-39-6.md) - - [6.39.7. SET 文の書き方 7 ― スイッチ設定](6-39-7.md) - - [6.40. SORT](6-40-1.md) - - [6.40.1. SORT 文の書き方 1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) - - [6.40.2. SORT 文の書き方 2 ― テーブルソート](6-40-2.md) - - [6.41. START](6-41.md) - - [6.42. STOP](6-42.md) - - [6.43. STRING](6-43.md) - - [6.44. SUBTRACT](6-44-1.md) - - [6.44.1. SUBTRACT 文の書き方 1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) - - [6.44.2. SUBTRACT 文の書き方 2 ― SUBTRACT GIVING](6-44-2.md) - - [6.44.3. SUBTRACT 文の書き方 3 ― SUBTRACT CORRESPONDING](6-44-3.md) - - [6.45. SUPPRESS](6-45.md) - - [6.46. TERMINATE](6-46.md) - - [6.47. TRANSFORM](6-47.md) - - [6.48. UNLOCK](6-48.md) - - [6.49. UNSTRING](6-49.md) - - [6.50. WRITE](6-50.md) -7. [日本語の使用](7-1.md) - - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) - - [7.2. 日本語項目と表意定数](7-2.md) - - [7.3. 各命令文と日本語の取扱い](7-3-1.md) - - [7.3.1. MOVE 文](7-3-1.md#731-move文) - - [7.3.2. ACCEPT/DISPLAY 文](7-3-2.md) - - [7.4. UTF-8 の使用](7-4.md) -8. [opensource COBOL システムインターフェース](8-1-1.md) - - [8.1. opensource COBOL コンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) - - [8.1.1. 解説](8-1-1.md#811-解説) - - [8.1.2. コンパイルオプション](8-1-2.md) - - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) - - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) - - [8.1.5. 静的サブルーチン](8-1-5.md) - - [8.1.6. COBOL と C ブログラムの結合](8-1-6.md) - - [8.1.6.1. opensource COBOL ランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) - - [8.1.6.2. opensource COBOL と C の文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) - - [8.1.6.3. C データ型と opensource COBOL USAGE 句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) - - [8.1.6.4. opensource COBOL メインプログラムの C サブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) - - [8.1.6.5. C メインプログラムの opensource COBOL サブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) - - [8.1.7. 重要な環境変数](8-1-7.md) - - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) - - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) - - [8.2. opensource COBOL プログラムの実行](8-2-1.md) - - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) - - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) - - [8.2.3. プログラムの引数](8-2-3.md) - - [8.2.4. 重要な環境変数](8-2-4.md) - - [8.3. 組み込みサブルーチン](8-3-1.md) - - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) - - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) - - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) - - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) - - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) - - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) - - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) - - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) - - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) - - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) - - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) - - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) - - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) - - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) - - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) - - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) - - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) - - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) - - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) - - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) - - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) - - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) - - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) - - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) - - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) - - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) - - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) - - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) - - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) - - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) - - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) - - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) - - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) - - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) - - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) - - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) - - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) - - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) - - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) -9. [サンプルプログラム](9-1.md) - - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) - - [9.2. COBDUMP –16 進数/文字データダンプサブルーチン](9-2.md) - -[クレジット](credit.md) diff --git a/automanual/old/credit.md b/automanual/old/credit.md deleted file mode 100644 index f37ce77..0000000 --- a/automanual/old/credit.md +++ /dev/null @@ -1,29 +0,0 @@ -
-opensource COBOL Programmer's Guide - -【制作】
-OSSコンソーシアム オープンCOBOLソリューション部会 - -【原著】
-Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") - -【翻訳・執筆】
-東京システムハウス株式会社 島田桃花 - -【マークダウン化】
-東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 - -【監修】
-東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
-株式会社SIT11 飯島裕一 - -【協力】(50音順)
-OVOL ICTソリューションズ株式会社
-株式会社SIT11
-株式会社CIJ
-サン情報サービス株式会社
- -【発行】
-OSSコンソーシアム オープンCOBOLソリューション部会
-URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) - diff --git a/automanual/old/list.txt b/automanual/old/list.txt deleted file mode 100644 index 49662ee..0000000 --- a/automanual/old/list.txt +++ /dev/null @@ -1,153 +0,0 @@ -1-1.md -1-10.md -1-2-1.md -1-2-2.md -1-2-3.md -1-2-4.md -1-2-5.md -1-2-6.md -1-2-7.md -1-2-8.md -1-3.md -1-4.md -1-5.md -1-6.md -1-7-1.md -1-7-2.md -1-7-3.md -1-8.md -1-9.md -2-1.md -2-2.md -3.md -4-1-1.md -4-1-2.md -4-1-3.md -4-1-4.md -4-2-1-1.md -4-2-1-2.md -4-2-1-3.md -4-2-2.md -5-1.md -5-2.md -5-3.md -5-4.md -5-5.md -5-6.md -6-1-1.md -6-1-2.md -6-1-3.md -6-1-4-1.md -6-1-4-2.md -6-1-5.md -6-1-6.md -6-1-7.md -6-1-8-1.md -6-1-8-2.md -6-10.md -6-11.md -6-12.md -6-13-1.md -6-13-2.md -6-14-1.md -6-14-2.md -6-14-3.md -6-14-4.md -6-14-5.md -6-15-1.md -6-15-2.md -6-15-3.md -6-15-4.md -6-15-5.md -6-16.md -6-17.md -6-18.md -6-19.md -6-2.md -6-20.md -6-21.md -6-22-1.md -6-22-2.md -6-23.md -6-24.md -6-25.md -6-26.md -6-27.md -6-28-1.md -6-28-2.md -6-29-1.md -6-29-2.md -6-3.md -6-30.md -6-31.md -6-32-1.md -6-32-2.md -6-33-1.md -6-33-2.md -6-34.md -6-35.md -6-36.md -6-37.md -6-38-1.md -6-38-2.md -6-39-1.md -6-39-2.md -6-39-3.md -6-39-4.md -6-39-5.md -6-39-6.md -6-39-7.md -6-4-1.md -6-4-2.md -6-4-3.md -6-4-4.md -6-4-5.md -6-4-6.md -6-4-7.md -6-40-1.md -6-40-2.md -6-41.md -6-42.md -6-43.md -6-44-1.md -6-44-2.md -6-44-3.md -6-45.md -6-46.md -6-47.md -6-48.md -6-49.md -6-5-1.md -6-5-2.md -6-5-3.md -6-50.md -6-6.md -6-7.md -6-8-1.md -6-8-2.md -6-9.md -7-1.md -7-2.md -7-3-1.md -7-3-2.md -7-4.md -8-1-1.md -8-1-2.md -8-1-3.md -8-1-4.md -8-1-5.md -8-1-6.md -8-1-7.md -8-1-8.md -8-1-9.md -8-2-1.md -8-2-2.md -8-2-3.md -8-2-4.md -8-3-1.md -9-1.md -9-2.md -Image -TOC.md -list.txt -markdown.code-workspace diff --git a/automanual/old/markdown.code-workspace b/automanual/old/markdown.code-workspace deleted file mode 100644 index 3534be5..0000000 --- a/automanual/old/markdown.code-workspace +++ /dev/null @@ -1,16 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "coboleditor.metadata_symbols": [], - "coboleditor.metadata_entrypoints": [], - "coboleditor.metadata_types": [], - "coboleditor.metadata_files": [ - "1722229028318,automanual/AUTOMANUAL.cbl" - ], - "coboleditor.metadata_knowncopybooks": [] - } -} diff --git a/automanual/old/opensourcecobol.png b/automanual/old/opensourcecobol.png deleted file mode 100644 index 7c6c27935e3079456288165d1a83dba642334562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92095 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%0D)*m`88|J!VT; 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 Ht%Cm#WnP9J diff --git a/automanual/old_delete/1-1.md b/automanual/old_delete/1-1.md deleted file mode 100644 index 177417c..0000000 --- a/automanual/old_delete/1-1.md +++ /dev/null @@ -1,22 +0,0 @@ - -前へ/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-1.md) - -# 1. まえがき - -## 1.1. opensource COBOLとは - -このマニュアルでは、opensource COBOLの最新版に実装されているプログラミング言語COBOLの構文、意味、利用法について紹介する。 - -opensource COBOLとはOSSコンソーシアムで開発・公開しているCOBOLコンパイラであり、2012年にOpenCOBOL(開発者Keisuke NishidaさんとRoger Whileさん)からフォークし、PIC N(2バイト文字)を代表とする日本語拡張や国産汎用機の互換性機能など、日本の商習慣に応じて独自機能を追加したプロダクトである。 - -opensource COBOLはCOBOLをC言語にトランスレートし、gccなどのCコンパイラでバイナリを生成する。 - -Linux用として開発されたが、Mac OSや、Linux互換の仮想環境であるCygwinやMinGW`1`を利用することで、Windowsでも構築可能である。またCコンパイラや、リンカー/ローダーを提供するMicrosoftのVisual Studioを利用することで、ネイティブWindowsアプリケーションとして構築できる。 - ---- -`1` MinGWはたった一つのDLLでopensource COBOLコンパイラやランタイムを作成して、opensource COBOLのツールとユーザプログラムが利用できる。DLLはGNU一般公衆利用承諾書(General Public License)の定める条件下であれば無償で配布が可能である。MinGWによって構築されたopensource COBOLは、128MBのフラッシュドライブに簡単に適合して実行でき、利用時にWindowsにソフトウェアをインストールする必要もない。ただし、同時に実行しているopensource COBOLプログラム間でのファイル共有処理や、特定のファイル型のレコードロッキング処理など、一部の言語機能は利用できない。 - - - -[ページトップへ](1-1.md) - diff --git a/automanual/old_delete/1-10.md b/automanual/old_delete/1-10.md deleted file mode 100644 index 9fbf74f..0000000 --- a/automanual/old_delete/1-10.md +++ /dev/null @@ -1,27 +0,0 @@ - -[前へ](1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-1.md) - -## 1.10. LENGTH OFの使い方 - -オプションで、英数字定数と一意名の前に「LENGTH OF」という句を付けることができる。この場合、実際の定数は、英数字定数のバイト数と等しい値を持つ数字定数である。例えば、次の二つのopensource COBOL文はどちらも同じ結果(27)を表示する。 - -``` -01 Demo-Identifier PIC X(27). *> This is a 27-character data-item -. -. -. -DISPLAY LENGTH OF “This is a LENGTH OF Example” -DISPLAY LENGTH OF Demo-Identifier -DISPLAY 27 -``` - -定数または一意名参照のLENGTH OF句は、通常、数値定数を指定できる場所であればどこでも使用できるが、次のように使用する場合は例外となる。 - -1. DISPLAY文の定数の代わりとして -2. WRITE文またはRELEASE文のFROM句の一部として -3. PERFORM文のTIMES句の一部として - - - -[ページトップへ](1-10.md) - diff --git a/automanual/old_delete/1-2-1.md b/automanual/old_delete/1-2-1.md deleted file mode 100644 index 39fd86a..0000000 --- a/automanual/old_delete/1-2-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-2.md) - -## 1.2. COBOL/opensource COBOLの重要機能 - -### 1.2.1. COBOLプログラムの構文 - -COBOLプログラムは、部(DIVISION)として知られる、それぞれ独自の目的を持つ4つの主要なコーディング領域で構成されている。 - -部は様々な節(SECTION)で構成され、節は1つ以上の段落(PARAGRAPH)で構成される。更に段落は完結文(SENTENCE)で構成され、完結文は1つ以上の文(STATEMENT)で構成される。 - -このプログラム構成要素の階層構造により、すべてのCOBOLプログラムの構成が標準化される。このマニュアルの大部分は、COBOLプログラムを構成する様々な部、節、段落、および文について説明している。 - -4つの部とその機能については[2章](2-1.md)で、各部についてはそれぞれの章([3](3.md)、[4](4-1-1.md)、[5](5-1.md)、および[6章](6-1-1.md))で説明する。 - - - -[ページトップへ](1-2-1.md) - diff --git a/automanual/old_delete/1-2-2.md b/automanual/old_delete/1-2-2.md deleted file mode 100644 index c0fb905..0000000 --- a/automanual/old_delete/1-2-2.md +++ /dev/null @@ -1,13 +0,0 @@ - -[前へ](1-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-3.md) - -### 1.2.2. コピーブック - -「コピーブック」とは、プログラムにCOPY文([1.6](1-6.md))を使用してそのコードをインポートするだけで、複数のプログラムで利用できるプログラムコードの部品であり、ファイル、データ構造、または手続き型コードを定義できる。 - -現在のプログラミング言語には、これと同じ機能を実行する文(通常は「include」または「#include」)がある。ただし、COBOLコピーブック機能が現在の言語の「include」機能と異なるのは、COBOLのCOPY文はインポートされたソースコードをコピーしながら編集できるということである。この機能により、コピーブックライブラリはコードの再利用することができる。 - - - -[ページトップへ](1-2-2.md) - diff --git a/automanual/old_delete/1-2-3.md b/automanual/old_delete/1-2-3.md deleted file mode 100644 index 814d049..0000000 --- a/automanual/old_delete/1-2-3.md +++ /dev/null @@ -1,11 +0,0 @@ - -[前へ](1-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-4.md) - -### 1.2.3. 構造化データ - -COBOLは1960年代に構造化データの概念を導入した。構造化データは、単一の項目としてアクセスできるデータ、または構造内の文字の出現位置に基づいて従属項目に分割できるデータである。これらの構造は*集団項目*と呼ばれる。構造の一番下には、従属項目に分割されていないデータ項目がある。COBOLでは、これらを*基本項目*と呼ぶ。 - - - -[ページトップへ](1-2-3.md) - diff --git a/automanual/old_delete/1-2-4.md b/automanual/old_delete/1-2-4.md deleted file mode 100644 index 03fc837..0000000 --- a/automanual/old_delete/1-2-4.md +++ /dev/null @@ -1,22 +0,0 @@ - -[前へ](1-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-5.md) - -### 1.2.4. ファイル - -COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 - -||| -|:---|:---| -|ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| -ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![alt text](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![alt text](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
RELATIVE|ファイルの内容は、4バイトのUSAGE COMP-5([表5-10](5-3.md))レコードヘッダーで始まる一連の固定長データレコードで構成される。レコードヘッダーにはデータの長さがバイト単位で含まれるが、バイト数には4バイトのレコードヘッダーは含まれない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

このファイル構成は、順次処理またはランダム処理に対応するように定義されている。相対ファイルを使用すると、最初にレコード1から99を読み書きする必要はなく、レコード100を直接読み書きできる。opensource COBOLランタイムシステムは、プログラムで定義された最大レコードサイズを使用して、レコードヘッダーとデータが開始するファイル内の相対バイト位置を計算し、必要なデータをプログラムとの間で転送する。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されないが、各物理レコードの先頭にレコード長項目が追加される。

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。ファイルからプログラムにデータを転送するときに、opensource COBOLランタイムライブラリが4バイトのASCII文字列をレコード長として解釈してしまうと、問題となる場合がある。

これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| -ORGANIZATION IS
INDEXED|opensource COBOLプログラムで使用できる最も高度なファイル構造である。使用するopensource COBOLビルドに含まれている高度なファイル管理機能(Berkeley DB[BDB]、VBISAMなど)によって構造が異なるため、ファイルの物理構造を説明することはできない。代わりに、ファイルの論理構造について説明する。

索引ファイルには複数の構造が格納される。一つ目は、相対ファイルの内部構造に似ていると考えられるデータ構成要素である。ただし、データレコードは相対ファイルのように、レコード番号で直接アクセスすることも、ファイル内の物理的な順序で順次処理することもできない。

残りの構造は、1つ以上の索引構成要素となり、これは(どうにかして)各データレコード内の主キーと呼ばれる項目内容(お客様番号、従業員番号、商品コード、氏名等)をレコード番号に変換するデータ構造である。これにより、特定の主キー値のデータレコードを直接読み取り、書き込み、削除することができる。更に、索引データ構造は、主キー項目値の昇順でファイルをレコードごとに順次処理できるように定義されている。構造の動作については説明した通りで、この索引構造がバイナリ検索可能なツリー構造(btree)として存在するか、精巧なハッシュ構造であるかどうか、プログラマには関係ない。ランタイムシステムは、同じ主キー値を持つ2つのレコードを索引付きファイルに書き込むことを許可しない。

追加項目を代替キーとして定義する機能がある。一つの例外を除いて、代替キー項目は主キーと同じように動作し、代替キー項目値に基づいてレコードデータへの直接アクセスと順次アクセスの両方を許可する。その例外とは、代替キー項目がopensource COBOLコンパイラにどのように記述されるかによって、代替キーが重複する値を持つことができる可能性があるということである([4.2.1.3](4-2-1-3.md))。

代替キーの数に制限はないが、各キー項目にはディスク容量と実行時間の制限が伴う。代替キー項目の数が増えると、ファイル内のレコードの書き込みや修正にかかる時間が更に長くなる。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| - -すべてのファイルは、環境部の入出力節のファイル管理段落でコーディングされたSELECT文([4.2.1](4-2-1-1.md#421-ファイル管理段落))を使用して、最初にopensource COBOLプログラムに記述される。SELECT文では、プログラム内で参照されるファイル名を定義することに加えて、ファイル編成、ロック([6.1.8.2](6-1-8-2.md))と共有([6.1.8.1](6-1-8-1.md#6181-ファイル共有))オプションも一緒に、オペレーティングシステムに認識される名前とパスを指定する。 - -データ部の作業場所節のファイル節にあるファイル記述([5.1](5-1.md#51-ファイル記述))は、可変長レコードが可能かどうか―可能な場合―最小長と最大長はどのくらいか、ということを含むファイル内のレコードの構造を定義する。更に、ファイル記述項は、ファイル入出力のブロックサイズを指定できる。 - - - -[ページトップへ](1-2-4.md) - diff --git a/automanual/old_delete/1-2-5.md b/automanual/old_delete/1-2-5.md deleted file mode 100644 index 9fd16ba..0000000 --- a/automanual/old_delete/1-2-5.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](1-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-6.md) - -### 1.2.5. 表操作 - -他のプログラミング言語にある配列と基本的に同じものとして、COBOLには表がある。COBOLの表機能を特別なものにしているのは、COBOL言語に存在する2つの文―SEARCH([6.38.1](6-38-1.md))とSEARCH ALL([6.38.2](6-38-2.md))である。 - -1つ目は表を順次検索し、任意の数の検索条件のうち1つに一致する表記述項が見つかった場合、またはすべての表記述項が検索され、いずれの条件にも一致しない場合にのみ停止する。 - -2つ目は、それぞれの表記述項に含まれる「キー」項目で並び替えおよび検索された表に対して、非常に高速に検索を実行できる。このような検索に使用されるアルゴリズムは、バイナリ検索(半区間検索とも呼ばれる)と言い、目的の記述項を見つけるため、または目的の記述項が表に存在しないことを確認するために、表の少数の記述項のみを検索する必要があることが保証される。表が大きいほど、この検索方法はより効果的である。例えば、32,768の記述項がある表でも特定の記述項を見つけることができ、15記述項以下の検索で記述項が存在しないと判断することができる。このアルゴリズムは、SEARCH ALL([6.38.2](6-38-2.md))で詳しく説明している。 - - - -[ページトップへ](1-2-5.md) - diff --git a/automanual/old_delete/1-2-6.md b/automanual/old_delete/1-2-6.md deleted file mode 100644 index 3553fa9..0000000 --- a/automanual/old_delete/1-2-6.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](1-2-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-7.md) - -### 1.2.6. データの並び替えと結合 - -COBOL言語には、任意の複雑なキー構造に従って大量のデータを並び替えることができる強力なSORT文([6.40.1](6-40-1.md))がある。このデータは、プログラム内で生成される場合もあれば、1つ以上の外部ファイルのものを扱う場合もある。並び替えられたデータは、1つ以上の出力ファイルに自動的に書き込まれるか、並び替えられた順番でレコードごとに処理される。 - -表のデータを並び替えるためだけの特別な形式のSORT文([6.40.2](6-40-2.md))も存在し、表に対してSEARCH ALLを使用する場合に特に便利である。 - -同類の文―MERGE([6.27](6-27.md))―では、複数のファイルの内容を結合できるが、ファイルはすべて同じキー構造に従って同様の方法で並べ替えられる。出力結果は、入力ファイルの内容で構成されており、結合されると共通のキー構造に従って順序付けられ、1つ以上の出力ファイルに自動的に書き込まれるか、プログラムによって内部的に処理される。 - - - -[ページトップへ](1-2-6.md) - diff --git a/automanual/old_delete/1-2-7.md b/automanual/old_delete/1-2-7.md deleted file mode 100644 index 5ce1599..0000000 --- a/automanual/old_delete/1-2-7.md +++ /dev/null @@ -1,32 +0,0 @@ - -[前へ](1-2-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-2-8.md) - -### 1.2.7. 文字列操作 - -テキスト文字列の処理専用に設計されたプログラミング言語があり、強力な数値計算を実行することのみを目的として設計されたプログラミング言語があります。ほとんどのプログラミング言語は、これら2つの両極端の中間に位置します。COBOLも例外ではありませんが、非常に強力な文字列操作機能が含まれています。実際、opensource COBOLには、他の多くのCOBOL実装よりもさらに多くの文字列操作機能があります。次の表は、文字列に関するopensource COBOLの機能を示しています。 - -| 機能 | サポートするopensource COBOL機能 | -| :--- | :--- | -|2 つ以上の文字列を連結する | CONCATENATE組み込み関数
STRING文([6.43](6-43.md)) | -| 数値型で定義されている時刻または日付を書式文字列に変換する | LOCALE-TIME
または
LOCALE-DATE組み込み関数 | -| バイナリ値をプログラムの文字セットに対応する文字に変換する | CHAR組み込み関数
関数を呼び出す前に引数に1を追加する。CHAR関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列を小文字に変換する | LOWER-CASE組み込み関数
C$TOLOWER組み込みサブルーチン([8.3.1.12](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length))
CBL_TOLOWER組み込みサブルーチン([8.3.1.38](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)) | -| 文字列を大文字に変換する | UPPER-CASE組み込み関数
C$TOUPPER組み込みサブルーチン([8.3.1.13](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length))
CBL_TOUPPER組み込みサブルーチン([8.3.1.39](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)) | -| 文字をプログラムの文字セットに対応する数値に変換する | ORD組み込み関数
結果から1を引く。ORD関数の説明では、数値型引数の値に1を追加しなくても同じ結果が得られるMOVE文の利用法を示している | -| 文字列内にある部分文字列の出現回数をカウントする | TALLYINGオプションを指定したINSPECT文([6.26](6-26.md)) | -| 数値書式指定文字列を復号して数値に戻す(例えば「$12,342.19-」を「-12342.19」という値に復号する) | NUMVAL組み込み関数
NUMVAL-C組み込み関数 | -| 文字列または文字列を格納できるデータ項目の長さを決定する | LENGTH組み込み関数
または
BYTE-LENGTH組み込み関数 | -| 文字列の開始位置と長さに基づいて部分文字列を抽出する | 「送信」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 桁区切り記号 (日本では「,」)、通貨記号(日本では「¥」)、小数点、クレジット/デビット記号、先頭または末尾の記号文字を含む、出力用の数値項目を書式化する | 受け取り項目に適用されたPICTURE編集記号([5.3](5-3.md))を指定したMOVE文([6.28](6-28-1.md))| -| 文字列項目の位置揃え(左、右、または中央) | C$JUSTIFY組み込みサブルーチン([8.3.1.6](8-3-1.md#8316-call-cjustify-using-data-item-justification-type)) | -| 文字列内の1つ以上の文字を異なる文字で単アルファベット置換する | CONVERTINGオプションを指定したINSPECT文([6.26](6-26.md))
TRANSFORM文([6.47](6-47.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列を解析し、1つ以上の区切り文字順序に基づいて部分文字列に分割する
これらの区切り文字は、単一の文字、複数の文字列、またはいずれかが重複した連続オカレンスの可能性がある | UNSTRING文([6.49](6-49.md)) | -| 文字列の先頭または末尾の空白の削除 | TRIM組み込み関数 | -| 部分文字列の開始文字位置と長さに基づいて、単一の部分文字列を同じ長さの別の部分文字列に置換する | 「受け取り」項目に部分参照を含むMOVE文([6.28.1](6-28-1.md)) | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、同じ長さの置換部分文字列に置換する | REPLACINGオプションを指定したINSPECT文([6.26](6-26.md))
SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | -| 文字列内にある1つ以上の部分文字列を、オカレンス位置に関係なく、異なる長さの置換部分文字列に置換する | SUBSTITUTE組み込み関数
および
SUBSTITUTE-CASE組み込み関数 | - - - -[ページトップへ](1-2-7.md) - diff --git a/automanual/old_delete/1-2-8.md b/automanual/old_delete/1-2-8.md deleted file mode 100644 index 339ef40..0000000 --- a/automanual/old_delete/1-2-8.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](1-2-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-3.md) - -### 1.2.8. テキストユーザインターフェース(TUI)機能 - -COBOL2002標準は、テキストベースの画面の定義と処理を可能にするCOBOL言語の拡張機能を形式化している。opensource COBOLは、COBOL2002で説明されている画面処理機能を実質的にすべて実装している。 - -以下は、Windowsコンピュータのコンソールウィンドウに表示される画面の例である。 - -図1-1-TUIサンプル画面 - -![alt text](Image/1-1.png) - -このような画面`2`は、データ部([5.6](5-6.md))の画面節で定義され、一度定義されると、画面はACCEPT文([6.4.4](6-4-4.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して実行時に再度使用される。 - -COBOL2002標準は、テキストユーザインターフェース(TUI)画面のみを対象としており、最新のオペレーティングシステムに組み込まれている、より高度なグラフィカルユーザインターフェース(GUI)画面設計および処理機能は対象ではない。完全なGUI開発ができるサブルーチンベースのパッケージが利用可能ではあるが、どれもオープンソースではない。 - ---- - -`2` この画面は、OCicという名前のプログラム―opensource COBOLコンパイラのフルスクリーンフロントエンド―のものである。 - - - -[ページトップへ](1-2-8.md) - diff --git a/automanual/old_delete/1-3.md b/automanual/old_delete/1-3.md deleted file mode 100644 index 5a178bd..0000000 --- a/automanual/old_delete/1-3.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](1-2-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-4.md) - -## 1.3. 構文規則 - -opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 - -| | | -| :--- | :--- | -| 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | -| 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | -| 小文字 | 置換可能な引数を表す一般的な用語は小文字で表示される。 | -| [ ]| 角括弧は、オプションの句を囲むために使われ、囲まれていない句は必須である。 | -| \| | 単純な選択は、縦線で区切って示される場合がある。COBOL構文図では通常使われないが、角括弧によって構文図が複雑になりすぎる場合に効果的な代替手段である。 | -| { }| 中括弧は、選択肢を囲むために使われ、選択肢の中から一つを正確に選択する必要がある。 | -| {\| \|} | 選択指示子は、囲まれた選択肢の中から一つ以上が選択される可能性がある選択肢を囲むために使われる。 | -| ・・・ | 角括弧、中括弧、セレクター、または小文字記述項の後に表示される3つの点(「省略記号」と呼ばれる)は、省略記号の前の構文要素が複数回出現する可能性があることを示す。 | -| 網掛け部分 | 網掛け部分は、opensource COBOLコンパイラによって認識されるが、生成されたコードに影響を与えないか、サポートされていないものとして拒否される構文要素を強調するために使われる。このような要素は、他のCOBOL環境からのプログラム移行を容易にするためにopensource COBOL言語に存在するか、まだ完全に実装されていない、または廃止された構文要素を反映する。 | - - - -[ページトップへ](1-3.md) - diff --git a/automanual/old_delete/1-4.md b/automanual/old_delete/1-4.md deleted file mode 100644 index e6c4231..0000000 --- a/automanual/old_delete/1-4.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-5.md) - -## 1.4. ソースコードの形式 - -従来のCOBOLプログラムソースコードは、固定形式の80文字(最大)行を使用してコーディングしていたが、ANSI 2002規格では自由形式が定義されており、ソースコードの長さは最大256文字で、特定桁に固定の意味の割り当てはない。 - -opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 - -| | | -| :--- | :--- | -| -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | -| -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | -| \>\>SOURCE FORMAT IS FREE | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは自由書式を受け付ける。「\>\>」文字は、8桁目以降で開始する必要がある。これと次の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | -| \>\>SOURCE FORMAT IS FIXED | このソース行は、opensource COBOLコンパイラが検出すると、コンパイラは固定書式を受け付ける。これと前の命令を使用することで、コンパイラを自由モードと固定モード間で自由に切り替えることができる。 | - -以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 - -| | | -| :--- | :--- | -| 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | -| 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | -| 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | -| 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | -| 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | -| 任意の桁の「\>\>D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「**–fdebugging-line**」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードと自由形式モードのどちらの場合でも有効である。自由形式モードではどの桁からでも開始できるが、固定形式モードでは、8桁目以降から開始しなければならない。 | - - - -[ページトップへ](1-4.md) - diff --git a/automanual/old_delete/1-5.md b/automanual/old_delete/1-5.md deleted file mode 100644 index 72bb38f..0000000 --- a/automanual/old_delete/1-5.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-6.md) - -## 1.5. カンマ/セミコロンの使い方 - -空白が有効な場所(もちろん英数字定数内を除く)での読みやすさ向上のために、コンマ文字(,)またはセミコロン(;)をopensource COBOLプログラムにオプションとして挿入できる。COBOL標準ではコンマを使用する場合、コンマの後に少なくとも一つの空白を続ける必要がある。最近、COBOLコンパイラー(opensource COBOLを含む)の多くは、この規則を緩和して、ほとんどの場合で空白を省略できるようになったが、これにより、DECIMAL POINT IS COMMA句が使用されている場合([4.1.4](4-1-4.md)を参照)、コンパイラに「混乱」が生じる可能性がある。 - -次の文では、二つの引数(数字定数1および2)を渡すサブルーチンを呼び出す: - - CALL “SUBROUTINE” USING 1,2 - -DECIMAL POINT IS COMMAを使用すると、実際には一つの引数(非整数データ型数字定数1および2)を呼び出すサブルーチンとして解釈される。 - -句読点としてのコンマの後に空白をコーディングする習慣を付けたい。別の方法としては、「混乱」の可能性をなくすためにセミコロンのコーディングが考えられる。 - - - -[ページトップへ](1-5.md) - diff --git a/automanual/old_delete/1-6.md b/automanual/old_delete/1-6.md deleted file mode 100644 index 7a1d503..0000000 --- a/automanual/old_delete/1-6.md +++ /dev/null @@ -1,37 +0,0 @@ - -[前へ](1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-1.md) - -## 1.6. COPY文の使い方 - -図1-2-COPY構文 - -![alt text](Image/1-2.png) - -COPY文は、プログラムにコピーブック([1.2.2](1-2-2.md))をインポートするために使われる。 - -1. opensource COBOLは、コピーブックの使用を完全にサポートしている。コピーブックとは、COPY文も入れた全てのCOBOL構文を含む個別のソースファイルのことである。 - -2. COPY文は、コピーブックに含まれるコードが構文的に有効であるCOBOLプログラム内のどこでも使用できる。 - -3. 上記の構文図では、COPY文の最後のピリオドと、REPLACING句を強調している。経験のあるCOBOLプログラマの目には、ピリオドがあるべきではないと思われる場合でも、全てのCOPY文の最後にはピリオドが絶対に必須である。 - -4. コンパイルプロセスが開始される前に、全てのCOPY文が決定され、対応するコピーブックの内容がプログラムのソースコードに挿入される。 - -5. オプションのREPLACING句を使用すると、予約語(語-1、語-2)、データ項目(一意名-1、一意名-2)、定数(定数-1、定数-2)、または空白で区切られたフレーズを置き換えることができる。コピーブックがプログラムに含まれているため、何度でも置換を行うことができる。 - -6. オプションのREPLACING句の使用時にLEADINGおよびTRAILINGを指定すると、予約語またはユーザ定義語の先頭(LEADINGを参照)または末尾(TRAILINGを参照)にある文字順序を置き換えることができる。例えば、「0100-xxxxxx」の単語を「020-xxxxxx」に変換するには、LEADING ==0100-== BY ==020-== とコーディングする。「0100-」の単語を削除するには、LEADING ==0100-== BY ==== とコーディングする。 - -7. オプションのJOINING句の使用時にPREFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-3とハイフン「**–**」が付けられる。 - -8. オプションのJOINING句の使用時にSUFFIXを指定すると、コピーブックで定義されているデータ名、条件名、定数名の後ろにハイフン「**–**」と語-3が付けられる。 - -9. オプションのPREFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の前に語-4が付けられる。 - -10. オプションのSUFFIXING句を使用すると、コピーブックで定義されているデータ名、条件名、定数名の後ろに語-5が付けられる。 - -11. プログラムのコンパイル時にopensource COBOLコンパイラがコピーブックを見つける方法の詳細については、「[8.1.8](8-1-8.md) コンパイル時のコピーブックの検索」で説明する。 - - - -[ページトップへ](1-6.md) - diff --git a/automanual/old_delete/1-7-1.md b/automanual/old_delete/1-7-1.md deleted file mode 100644 index 8c7bbdc..0000000 --- a/automanual/old_delete/1-7-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-2.md) - -## 1.7. 定数の使い方 - -定数は定数値であり、プログラムの実行中に変更されることはない。定数には、数値と英数値の二つの基本型がある。 -### 1.7.1. 数字定数 -数字定数は、配列の添え字として、算術式の値として、または数値の使用可能な手続き型文で使うことができる数字定数であり、次のいずれかの形式をとる。 - -- 1、56、2192、-54などの整数。 - -- 1.12や-2.95などの整数でない固定小数点値。 - -- H”1F”(1F16=3110)、h’22’(2216=3410)、H’DEAD’(DEAD16=5700510)などの16進数定数。「H」文字は大文字または小文字のいずれかであり、一重引用符(‘)または二重引用符(“)のいずれかの文字を使用できる。16進数定数は、H’FFFFFFFFFFFFFFF’(64ビット値)を最大値として制限されている。 - - - -[ページトップへ](1-7-1.md) - diff --git a/automanual/old_delete/1-7-2.md b/automanual/old_delete/1-7-2.md deleted file mode 100644 index ef9e233..0000000 --- a/automanual/old_delete/1-7-2.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](1-7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-7-3.md) - -### 1.7.2. 英数字定数 - -英数字定数は、コンピュータ画面での表示、レポートへの印刷、通信接続を介した伝送、またはPIC XまたはPIC Aデータ項目への格納に適した文字列である([5.3](5-3.md))。これらは、同等の数値計算に変換できない限り、算術式で使用することはできない。 - -英数字定数は、次の形式のいずれかを取ることができる。 - -- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 - -- X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - -英数字定数が長すぎて1行に収まらない場合は、次の2つの方法のいずれかで次の行に続けることができる。 - -- ソースコード形式の固定モード([1.4](1-4.md))を使用している場合、英数字定数は72桁目まで実行できる。定数は、一重引用符または二重引用符(最初の行の定数を開始するときに使用した方)をコーディングすることにより、次の行の11桁目以降に続けることができる。次の行では7桁目にハイフン(–)をコーディングする必要がある。以下がその例である。 - - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a long l - – “iteral that must - – “be continued.” - - -- 現在のソースコード形式に関係なく、opensource COBOLでは英数字定数を個別の断片に分割でき、それぞれに開始と終了の一重引用符または二重引用符があり、「&」文字を使用して「結合」されているため、7桁目にハイフン(–)をコーディングする必要はない。以下がその例である。

- - 1 2 3 4 5 6 7 8 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - 01 LONG–LITERAL–VALUE-DEMO PIC X(60) VALUE “This is a” & - “ long literal that must ” & - “ be continued.” - - -プログラムで自由モードのソースコード形式を使用している場合、文は255字にも及ぶ可能性があるため、長い英数字定数を続ける必要はほとんどない。 - -数字定数と予約語は、英数字定数と同じように、上記の方法のいずれかを使用して(予約語は1つ目の方法を使用して)複数の行に分割できるが、プログラムの見栄えが悪くなるため、この二つが分割されることは稀である。 - - - -[ページトップへ](1-7-2.md) - diff --git a/automanual/old_delete/1-7-3.md b/automanual/old_delete/1-7-3.md deleted file mode 100644 index 02397ed..0000000 --- a/automanual/old_delete/1-7-3.md +++ /dev/null @@ -1,13 +0,0 @@ - -[前へ](1-7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-8.md) - -### 1.7.3. 日本語定数 - -- N”日本語”、n’あいう’などは日本語定数を構成する。「N」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。N以外にも「NC」や「ND」が使用できる。 - -- NX’E38184E3828DE381AF’(E38184E3828DE381AF16=SHIFT-JIS文字列「いろは」)などの16進数定数。「NX」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の日本語定数は、各文字が16ビット分のデータ(4桁の16進数)で表されるため、常に4の倍数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 - - - -[ページトップへ](1-7-3.md) - diff --git a/automanual/old_delete/1-8.md b/automanual/old_delete/1-8.md deleted file mode 100644 index d1d1cba..0000000 --- a/automanual/old_delete/1-8.md +++ /dev/null @@ -1,24 +0,0 @@ - -[前へ](1-7-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-9.md) - -## 1.8. 表意定数の使い方 - -表意定数は、特定の定数の代用となる予約語である。一般に、表意定数は対応する値が使用可能な場所であればどこでも自由に使用することができ、値の前に「ALL」が付いているかのように解釈される(「ALL」については[5.3](5-3.md)で説明する)。 - -次の表は、opensource COBOLの表意定数とそれぞれに対応する値を示している。 - -表1-3-表意定数 - -| 表意定数 | 定数型 | 値 | -| :--- | :-------- | :--- | -| ZERO, ZEROS, ZEROES | 数字 | 0 | -| SPACE, SPACES | 英数字 | 空白 | -| QUOTE, QUOTES | 英数字 | 二重引用符 | -| LOW-VALUE, LOW-VALUES | 英数字 |プログラムの大小順序で値が最も小さい文字。プログラムがASCII大小順序を使用している場合、0ビットで構成される一連の文字を表す。 | -| HIGH-VALUE, HIGH-VALUES | 英数字 | プログラムの大小順序で値が最も大きい文字。プログラムがASCII大小順序を使用している場合、1ビットで構成される一連の文字を表す。 | -| NULL | 英数字 | 0ビットで構成される文字(プログラムの大小順序と無関係)。 | - - - -[ページトップへ](1-8.md) - diff --git a/automanual/old_delete/1-9.md b/automanual/old_delete/1-9.md deleted file mode 100644 index 6d2af32..0000000 --- a/automanual/old_delete/1-9.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](1-10.md) - -## 1.9. ユーザ定義名 - -opensource COBOLプログラムを作成するときは、プログラムのあらゆる側面、プログラムデータ、およびプログラムが実行されている外部環境を表す様々な名称を定義する必要がある。 - -ユーザ定義名は、文字「A」から「Z」(大文字または小文字)、「0」から「9」、ダッシュ(「-」)およびアンダースコア(「_」)で構成され、ハイフンまたはアンダースコア文字で開始または終了することはできない。 - -プロシージャ名を除いて、ユーザ定義名には少なくとも1文字が含まれていなければならない。ユーザ定義名がデータの名称として作成される場合、このドキュメントでは一意名の下で参照される。 - - - -[ページトップへ](1-9.md) - diff --git a/automanual/old_delete/2-1.md b/automanual/old_delete/2-1.md deleted file mode 100644 index dc39ca5..0000000 --- a/automanual/old_delete/2-1.md +++ /dev/null @@ -1,46 +0,0 @@ - -[前へ](1-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](2-2.md) - -# 2. opensource COBOLのプログラム形式 - -図2-1-opensource COBOLのプログラム形式 - -![alt text](Image/2-1.png) - -COBOLプログラムは、共通の目的に関連する言語文が主要なグループごとに分けられ、区分として編成されている。 - -すべてのプログラムにおいて区分けが必要なわけではないが、使用時に示されている順序で指定する必要がある。 - -1. opensource COBOLコンパイラは、ソースコード(コンパイルユニット)を単一の実行可能プログラムにコンパイルします。このソースコードは、単一のプログラム(プログラムに必要な区分によって定義され、後ろにオプションのEND PROGRAM句が続くソースコード順序)、または必須の区分とEND PROGRAM句で構成される複数のプログラムである。複数のプログラムが単一のコンパイルユニットでコンパイルされている場合、最後のプログラムにEND PROGRAM句を含める必要はないが、それ以外のプログラムには一つは必要である。 - -2. opensource COBOLコンパイラに複数の入力ファイルを指定すると、指定ファイルの内容で構成されたコンパイルユニットが定義され、指定された順序でコンパイルされる。効果は、複数のプログラムを含む単一のソースファイルがコンパイルされた場合と同じであるが、複数のプログラムが含まれていない限り、個々のソースファイルにEND PROGRAM句を含める必要はない。 - -3. 単一のコンパイルユニットを構成するプログラムの数に関係なく、単一の出力実行可能プログラムのみ生成される。コンパイルユニットで最初に検出されたプログラムがメインプログラムとして機能し、それ以外のプログラムは、メインプログラムまたは他のプログラムによって順番に呼び出されるサブプログラムとして機能する。 - -4. 各区分の目的の概要は次の通りである: - -| 区分 | 目的 | -| :--- | :--- | -| 見出し | プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する([3章](3.md))。 | -| 環境 | プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む([4章](4-1-1.md))。 | -| データ | プログラムが処理するすべてのデータを定義する([5章](5-1.md))。 | -| 手続き | すべての実行可能プログラムコードを含む([6章](6-1-1.md))。 | - -## 2.1. ネストされたユーザプログラム - -図2-2-ネストされたユーザプログラム - -![alt text](Image/2-2.png) - -ネストされたユーザプログラムは、他のプログラム内に埋め込まれたプログラムである(これらは「親」プログラムの手続き区分に従い、間に介在するEND PROGRAMは存在しない)。そのため、埋め込まれている親プログラムでのみ使用可能なサブプログラムとして機能する`3`。 - -1. ネストされたユーザプログラム自体に、他のネストされたプログラムが含まれている場合がある。ネスト構造が「等しいレベル」であると考えられるネストされたサブプログラムの間にEND PROGRAM句を含めるよう注意しなければならない。 - ---- - -`3`もちろん、すべてのルールには常に例外が存在する。PROGRAM-ID段落のCOMMON句で説明する。 - - - -[ページトップへ](2-1.md) - diff --git a/automanual/old_delete/2-2.md b/automanual/old_delete/2-2.md deleted file mode 100644 index b7103aa..0000000 --- a/automanual/old_delete/2-2.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](3.md) - -## 2.2. ネストされたユーザ定義関数 - -図2-3-ネストされたユーザ定義関数 - -![alt text](Image/2-3.png) - -ユーザ定義関数はopensource COBOLの構文として定義されているが、現在はサポートされていない。 - -1. ユーザ定義関数をコンパイルしようとすると、以下のようなメッセージが表示され、拒否される。 - - name:line: Error: FUNCTION-ID is not yet implemented - - - -[ページトップへ](2-2.md) - diff --git a/automanual/old_delete/3.md b/automanual/old_delete/3.md deleted file mode 100644 index b7d9c30..0000000 --- a/automanual/old_delete/3.md +++ /dev/null @@ -1,28 +0,0 @@ - -[前へ](2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-1.md) - -# 3. 見出し部 - -図3-1-見出し部構文 - -![alt text](Image/3-1.png) - -プログラムID(プログラム名)を指定することにより、プログラムの基本認証を定義する。 -1. 見出し部(IDENTIFICATION DIVISION)のヘッダーはオプションであるが、PROGRAM-ID句はオプションではない。 - -2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 - -3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 - -4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 - -5. INITIAL句を指定すると、サブプログラムは最初だけでなく実行される度に、初期(つまりコンパイル済み)状態が確保される。 - -6. COMMON句が存在している場合は、ネストされたユーザプログラム(サブプログラム)ユニットを、親プログラムだけでなく、その親に当たる他のネストされたユーザプログラムでも使用できるようにする。 - -7. 「–Wobsolete」コンパイルスイッチが使用されていない限り、DATE-WRITTEN、DATE-COMPILED、AUTHOR、INSTALLATION、SECURITY、REMARKSなどの廃止された見出し部記述項は、通常は無視される。このような場合、警告メッセージが生成されるがコンパイルは続行される。 - - - -[ページトップへ](3.md) - diff --git a/automanual/old_delete/4-1-1.md b/automanual/old_delete/4-1-1.md deleted file mode 100644 index b062d87..0000000 --- a/automanual/old_delete/4-1-1.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-2.md) - -# 4. 環境部 - -図4-1-環境部構文 - -![alt text](Image/4-1.png) - -プログラムが動作する外部計算機環境を定義する区域で、プログラムがアクセスする可能性のあるファイルの定義を含む。 - -1. 環境部(ENVIRONMENT DIVISION)によって定義できる機能のいずれもプログラムで必要としない場合は、この区域を指定する必要はない。 - -## 4.1. 構成節 - -図4-2-構成節構文 - -![alt text](Image/4-2.png) - -プログラムがコンパイルおよび実行される計算機システムを定義し、特殊な環境構成や互換性特性も指定する。 - -1. 構成節(CONFIGURATION DIVISION)の段落が指定される順序に関連性はない。 - -### 4.1.1. 翻訳用計算機段落 - -図4-3-翻訳用計算機段落構文 - -![alt text](Image/4-3.png) - -翻訳計算機(SOURCE-COMPUTER)段落は、プログラムがコンパイルされる計算機を定義する。 - -1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 - -3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 - - - -[ページトップへ](4-1-1.md) - diff --git a/automanual/old_delete/4-1-2.md b/automanual/old_delete/4-1-2.md deleted file mode 100644 index 397798c..0000000 --- a/automanual/old_delete/4-1-2.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](4-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-3.md) - -### 4.1.2. 実行用計算機段落 - -図4-4-実行用計算機段落構文 - -![alt text](Image/4-4.png) - -実行用計算機(OBJECT-COMPUTER)段落は、プログラムが実行される計算機について説明する段落ではあるが、単なるドキュメントではない。 - -1. 計算機名-2に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 - -2. MEMORY SIZE句とSEGMENT-LIMIT句は互換性の目的でサポートされているが、opensource COBOLでは機能しない。 - -3. PROGRAM COLLATING SEQUENCE句を使用すると、英数字の値を相互に比較するときに用いる、カスタマイズされた文字の大小順序を指定できる。データは引き続き計算機に固有の文字セットに格納されるが、比較のために文字が並べ替えられる論理的な順序を計算機に固有の文字セットに変更できる。符号系名-1は、特殊名節([4.1.4](4-1-4.md))で定義する必要がある。 - -4. PROGRAM COLLATING SEQUENCE句が指定されていない場合、計算機に固有の文字セット(通常はASCII)によって暗示される大小順序が使用される。 - - - -[ページトップへ](4-1-2.md) - diff --git a/automanual/old_delete/4-1-3.md b/automanual/old_delete/4-1-3.md deleted file mode 100644 index 189f987..0000000 --- a/automanual/old_delete/4-1-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](4-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-1-4.md) - -### 4.1.3. リポジトリ段落 - -図4-5-リポジトリ段落構文 - -![alt text](Image/4-5.png) - -リポジトリ(REPOSITORY)段落は、様々な組み込み関数へのアクセスを制御するためのメカニズムを定義する。 - -1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 - -2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 - - - -[ページトップへ](4-1-3.md) - diff --git a/automanual/old_delete/4-1-4.md b/automanual/old_delete/4-1-4.md deleted file mode 100644 index 7177131..0000000 --- a/automanual/old_delete/4-1-4.md +++ /dev/null @@ -1,114 +0,0 @@ - -[前へ](4-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-1.md) - -### 4.1.4. 特殊名段落 - -図4-6-特殊名段落構文 - -![alt text](Image/4-6-1.png) -![alt text](Image/4-6-2.png) - -特殊名(SPECIAL-NAMES)段落は、通貨記号の指定、小数点の選択、[記号文字の指定]実装者名とユーザ指定の呼び名の関連付け、アルファベット名と文字セットまたは大小順序の関連付け、および字類名と文字のセットの関連付けを行う。 - -つまり、この段落には、別のPC環境で作成されたCOBOLプログラムを簡単に「構成」して、opensource COBOL環境では最小限の変更のみでコンパイルできるようにするといった役割がある。 - -1. CONSOLE IS CRT句は、opensource COBOLの他のバージョンとのソースコードの互換性を保持する。これにより、デバイス「CRT」と「CONSOLE」をDISPLAY文([6.14.1](6-14-1.md))およびACCEPT文([6.4.1](6-4-1.md))で相互に使用できるようになる。opensource COBOLプログラムを「ゼロから」コーディングする場合は、これら二つのデバイスはすでに同様のものと見なされているため、この句は必要ない。 - -2. IS 呼び名-1句を使うと、「IS」の前に指定された組み込みopensource COBOLデバイス名に代替名を定義することができる。 - -3. SWITCH-1からSWITCH-8の外部値は、それぞれCOB_SWITCH_1からCOB_SWITCH_8の環境変数を使用してプログラムに指定される。「ON」の値はスイッチをオンにし、その他の値(未定義の環境変数を含む)はスイッチをオフにする。ON STATUS句およびOFF STATUS句は、実行時にスイッチが設定されているかどうかをテストするための条件名を定義する。詳細については[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)および[6.1.4.2.4](6-1-4-2.md#61424-スイッチ状態条件)で説明する。 - -4. ALPHABET句は、「定数-1」オプションを使用して自分で定義したものを含め、名前を、指定された文字コードセットまたは大小順序と関連付けることができ、定数-1、定数-2、または定数-3に英数字定数を指定できる。比喩的な定数SPACE[S]、ZERO[[E]S]、QUOTE[S]、HIGH-VALUE[S]、またはLOW-VALUE[S]を指定することもできる。 - -5. SYMBOLIC CHARACTERS句は構文的に認識されても無視される。「-Wall」または「-W」コンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -6. ユーザ定義クラスは、CLASS句を使って定義される。この句で指定された定数はクラスの一部と見なされるため、データ項目の値に含まれる可能性のある文字を定義する。例えば、以下に「Hexadecimal」と呼ばれるクラスを定義し、データ項目が「Hexadecimal」クラスの一部である場合、データ項目に存在する可能性のある文字のみを指定する。 - - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’ - - このユーザ定義クラスの使用例については、[6.1.4.2.2](6-1-4-2.md#61422-字類条件)で説明する。 - - LOCALE句を使って、UNIX標準のローカル名をデータ部で定義された一意名と関連付けることができ、局所名は次のいずれかになる: - - 表4-7-局所名 - - | | | | | | - | :---: | :---: | :---: | :---: | :---: | - | af_ZA | dv_MV | fi_FI | lt_LT | sma_NO | - | am_ET | el_GR | fil_PH | lv_LV | sma_SE | - | ar_AE | en_029 | fo_FO | mi_NZ | smj_NO | - | ar_BH | en_AU | fr_BE | mk_MK | smj_SE | - | ar_DZ | en_BZ | fr_CA | ml_IN | smn_FI | - | ar_EG | en_CA | fr_CH | mn_Cyrl_MN | sms_FI | - | ar_IQ | en_GB | fr_FR | mn_Mong_CN | sq_AL | - | ar_JO | en_IE | fr_LU | moh_CA | sr_Cyrl_BA | - | ar_KW | en_IN | fr_MC | mr_IN | sr_Cyrl_CS | - | ar_LB | en_JM | fy_NL | ms_BN | sr_Latn_BA | - | ar_LY | en_MY | ga_IE | ms_MY | sr_Latn_CS | - | ar_MA | en_NZ | gbz_AF | mt_MT | sv_FI | - | ar_OM | en_PH | gl_ES | nb_NO | sv_SE | - | ar_QA | en_SG | gsw_FR | ne_NP | sw_KE | - | ar_SA | en_TT | gu_IN | nl_BE | syr_SY | - | ar_SY | en_US | ha_Latn_NG | nl_NL | ta_IN | - | ar_TN | en_ZA | he_IL | nn_NO | te_IN | - | ar_YE | en_ZW | hi_IN | ns_ZA | tg_Cyrl_TJ | - | arn_CL | es_AR | hr_BA | oc_FR | th_TH | - | as_IN | es_BO | hr_HR | or_IN | tk_TM | - | az_Cyrl_AZ | es_CL | hu_HU | pa_IN | tmz_Latn_DZ | - | az_Latn_AZ | es_CO | hy_AM | pl_PL | tn_ZA | - | ba_R | es_CR | id_ID | ps_AF | tr_IN | - | be_BY | es_DO | ig_NG | pt_BR | tr_TR | - | bg_BG | es_EC | ii_CN | pt_PT | tt_RU | - | bn_IN | es_ES | is_IS | qut_GT | ug_CN | - | bo_BT | es_GT | it_CH | quz_BO | uk_UA | - | bo_CN | es_HN | it_IT | quz_EC | ur_PK | - | br_FR | es_MX | iu_Cans_CA | quz_PE | uz_Cyrl_UZ | - | bs_Cyrl_BA | es_NI | iu_Latn_CA | rm_CH | uz_Latn_UZ | - | bs_Latn_BA | es_PA | ja_JP | ro_RO | vi_VN | - | ca_ES | es_PE | ka_GE | ru_RU | wen_DE | - | cs_CZ | es_PR | kh_KH | rw_RW | wo_SN | - | cy_GB | es_PY | kk_KZ | sa_IN | xh_ZA | - | da_DK | es_SV | kl_GL | sah_RU | yo_NG | - | de_AT | es_US | kn_IN | se_FI | zh_CN | - | de_CH | es_UY | ko_KR | se_NO | zh_HK | - | de_DE | es_VE | kok_IN | se_SE | zh_MO | - | de_LI | et_EE | ky_KG | si_LK | zh_SG | - | de_LU | eu_ES | lb_LU | sk_SK | zh_TW | - | dsb_DE | fa_IR | lo_LA | sl_SI | zu_ZA | - - -7. CURRENCY SIGN句を使って、PICTURE編集記号で使用される通貨記号として任意の1文字を定義できる([表5-9](5-3.md)を参照)。通貨記号が指定されていない場合の既定値は円記号(¥)である。 - -8. DECIMAL POINT IS COMMA句は、PICTURE編集記号([表5-9](5-3.md)を参照)および数字定数として使用される場合「,」および「.」文字の定義を逆にするが、望ましくない副作用が生じる可能性がある([1.5](1-5.md)を参照)。 - -9. 一意名-3のPICTURE句(CRT-STATUS)は9(4)である必要がある。この項目はACCEPT画面の実行時ステータスを示す4桁の値を受け取り、ステータスコードは次の通りである。 - - 表4-8-ACCEPT画面ステータスコード - - | コード | 意味 | - | :--- | :--- | - | 0000 | ENTERキー押下 | - | 1001 - 1064| F1 — F64 | - | 2001, 2002 | PgUP, PgDn4 | - | 2003, 2004, 2006|上矢印, 下矢印, PrtSc(プリントスクリーン)5 | - | 2005 | Esc6 | - | 8000 | ACCEPT画面に利用できるデータがない | - | 9000 | 致命的なI/O画面エラー | - - -10. CRT STATUS句が指定されていない場合、ACCEPTステータス画面を受け取る目的で、COB-CRT-STATUS一意名(9(4)のPICTURE句)が暗黙的に割り当てられる。 - -11. SCREEN CONTROL句とEVENT STATUS句は、コンパイル時にサポートされていない一方で、CURSORIS句はサポートされている。しかし現在、実行時には機能していない。 - ---- - -`4` 実行時に環境変数COB_SCREEN_EXCEPTIONSが空白以外の値に設定されている場合にのみ使用できる。 - -`5` Windowsシステムでは検出できない。 - -`6` 実行時に環境変数COB_SCREEN_ESCが空白以外の値に設定されている場合にのみ使用できる。(これはCOB_SCREEN_EXCEPTIONSの設定に追加される。) - - - -[ページトップへ](4-1-4.md) - diff --git a/automanual/old_delete/4-2-1-1.md b/automanual/old_delete/4-2-1-1.md deleted file mode 100644 index cd9d628..0000000 --- a/automanual/old_delete/4-2-1-1.md +++ /dev/null @@ -1,112 +0,0 @@ - -[前へ](4-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-2.md) - -## 4.2. 入出力節 - -図4-9-入出力節構文 - -![alt text](Image/4-9.png) - -入出力節(INPUT-OUTPUT SECTION)では、プログラムがアクセスするファイルを詳細に定義する。 - -1. 使用しているコンパイラの「config」ファイルの「relaxed-syntax-check」が「yes」に設定されている場合、入出力節のヘッダーを指定せずにファイル管理および入出力管理段落を指定することができる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - -### 4.2.1. ファイル管理段落 - -図4-10-ファイル管理段落構文 - -![alt text](Image/4-10.png) - -ファイル管理(FILE-CONTROL)段落のSELECT文は、ファイル定義を作成し、外部オペレーティングシステム環境とリンクする。ここに示す例は、すべてのファイル形式に共通しているSELECT句である。次の節では、特定のファイル形式で用いる特別なSELECT句について説明する。 - -1. COLLATING SEQUENCE、RECORD DELIMITER、RESERVE、SHARING WITH ALL OTHER句、および二次FILE-STATUS項目とLOCK MODE ・・・ WITH ROLLBACKの指定は、構文的には認識されるが、opensource COBOLでは現在サポートされていない。 - -2. OPTIONAL句は、プログラムに入力データを渡すために用いられるファイルにのみ使用され、ファイルの実行時に使用可能であるかどうかを示す。ファイルが存在しないときにOPTIONALファイルを開こうとすると([6.31](6-31.md))、ファイルが使用できないことを示す、致命的ではないが特別なファイルステータス値(表4-11のステータスコード05を参照)を受け取る。その後にファイルを読み取ろうとすると([6.33](6-33-1.md))、ファイル終了条件が返される。 - -3. opensource COBOLコンパイラパーサーテーブルは、実際にやや不合理な文がコーディングされても正常に解析できる。 - - SELECT My-File ASSIGN TO DISK DISPLAY. - - 効果としては、PC画面に割り当てられたファイルを作成するためにコーディングされたものと同じ結果が得られる。 - - SELECT My-File ASSIGN TO DISPLAY. - - -4. ASSIGN句で「定数-1」オプションを使用すると、COBOLファイルからオペレーティングシステムファイルへの外部リンクが次のように定義される。 - - - 「DD_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「dd_定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 「定数-1」という名前の環境変数が存在する場合、その値はファイルのフルパスまたはファイル名として扱われる。そうでない場合は次へ。 - - - 定数自体が、ファイルへのフルパスまたはファイル名として扱われる。 - - この動作は、プログラムのコンパイル時に用いる構成ファイルの「filename-mapping」設定の影響を受ける。上記の動作は、「filename-mapping:yes」が有効な場合にのみ適用され、「filename-mapping:no」に設定すると、最後のオプション(定数自体をフルファイル名として扱う)のみが可能となる。構成ファイルやプログラムへの影響については[8.1.8](8-1-8.md)で説明する。 - - 一意名-2のPICTURE(FILE STATUS句)は9(2)でなければならない。入出力ステータスコードは、ファイルに対して実行されるすべての入出力文の後に、この一意名に保存される。以下が、考えられるステータスコードの一覧である。 - - 表4-11-ステータスコード - - |ステータス値 | 意味 | - | :---: | :--- | - |00 | 成功| - |02 | 成功(重複レコードキーが検出された)| - |05 | 成功(オプションファイルが存在しない)| - |07 | 成功(ユニットが存在しない)| - |10 |ファイル終了| - |14 |キー範囲外| - |21 |キーが無効である| - |22 |キーの値の重複が検出された| - |23 |キーが存在しない| - |30 |永続的入出力エラー| - |31 |ファイル名に一貫性がない| - |34 |ファイル区域外である| - |35 |ファイルが存在しない| - |37 |アクセス権拒否| - |38 |ファイルがロックで閉じられている| - |39 |属性の矛盾が検出された| - |41 |ファイルが既に開かれている| - |42 |ファイルが開かれていない| - |43 |読み込みが行われていない| - |44 |レコードのオーバーフロー| - |46 |読み込みエラー| - |47 |OPEN INPUTが拒否された| - |48 |OPEN OUTPUTが拒否された| - |49 |OPEN I/Oが拒否された| - |51 |レコードがロックされている| - |52 |ページ終了| - |57 |LINAGE指定が無効である| - |61 |ファイル共有の失敗| - |91 |ファイルが利用できない| - -5. LOCK句とSHARING句は、このファイルと同時に実行されている他のプログラムも、ファイルを使用できる条件を定義する。ファイルのロックと共有については、[6.1.8](6-1-8-1.md)で説明する。 - -#### 4.2.1.1. 順編成ファイル - -図4-12-順編成ファイルの指定 - -![alt text](Image/4-12.png) - -SEQUENTIALファイルとは、ファイル内のデータを順次処理することしかできない内部構造(COBOLでは編成と呼ばれる)を持つファイルである。ファイルの100番目のレコードを読み取るには、レコードの1から始めて99までを読み取る必要がある。 - -1. ORGANIZATION RECORD BINARY SEQUENTIALとして宣言されたファイルは、明示的なレコード終了区切り文字順序のないレコードで構成される。ファイル内のレコードは、(レコード長に基づいて)計算されたバイトオフセットによって、ファイルに「書き出し」される。ファイルにはプログラムに区切り文字が埋め込まれているため、標準のテキスト編集ソフトウェアやワードプロセッシングソフトウェアでは作成できない。このようなファイルには、USAGE DISPLAYまたはUSAGE COMPUTATIONAL(種類は任意である)のデータが含まれている可能性があり、これは文字順序がレコード終了の区切り文字として解釈されないためである。 - -2. ORGANIZATION IS RECORD BINARY SEQUENTIALの指定と、ORGANIZATION SEQUENTIALの指定は同じである。 - -3. ORGANIZATION LINE SEQUENTIALとして宣言されたファイルは、ASCII改行文字(X"10")で終了するレコードで構成される。LINE SEQUENTIALファイルを読み取る場合、ファイルのFDで示されるサイズを超えた分のレコードは切り捨てられ、そのサイズより短いレコードは右側がPADDING CHARACTER値によって埋められる。 - -4. PADDING CHARACTERが指定されていない場合はSPACEが指定されたものとみなす。 - -5. PADDING CHARACTER句は、すべてのORGANIZATIONファイルで構文的には受け入れられるが、LINE SEQUENTIALファイルがレコードを埋めることができる唯一のファイルであるため意味を持つ。 - -6. 固定長と可変長、両方のレコード形式がサポートされている。 - -7. PRINTERまたはCONSOLEにASSIGNされたファイルは、ORGANIZATION LINE SEQUENTIALとして指定する必要がある。 - -8. SEQUENTIALファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - - - -[ページトップへ](4-2-1-1.md) - diff --git a/automanual/old_delete/4-2-1-2.md b/automanual/old_delete/4-2-1-2.md deleted file mode 100644 index 3f09624..0000000 --- a/automanual/old_delete/4-2-1-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](4-2-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-1-3.md) - -#### 4.2.1.2. 相対編成ファイル - -図4-13-相対編成ファイルの指定 - -![alt text](Image/4-13.png) - -RELATIVEファイルは、レコードを順次またはランダムに処理できる内部編成を持つファイルであり、ファイル内の相対レコード番号を指定することによって、レコードの読み取り、書き込み、および更新を行うことができる。 - -1. ORGANIZATION RELATIVEファイルをCONSOLEまたはPRINTERに割り当てることはできない。 - -2. RELATIVE KEY句は、ACCESS MODE SEQUENTIALが指定されている場合のみオプションとして扱う。 - -3. ORGANIZATION RELATIVEファイルのレコードは可変長レコードを持つものとして定義できると考えられるが、ファイルは各レコードに対して最大レコード長を確保するように構造化される。 - -4. SEQUENTIALのACCESS MODEではファイルのレコードが順次処理され、RANDOMのACCESS MODEではレコードがランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -5. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -6. RELATIVE KEYデータ項目は、ファイルのレコード内項目にできない数値データ項目である。SEQUENTIALアクセスモードで処理されているRELATIVEファイルの現在の相対レコード番号を返し、RANDOMアクセスモードでRELATIVEファイルを処理するときに、読み取りまたは書き込みされる相対レコード番号を指定する検索キーとなる。 - -7. RELATIVEファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - - - -[ページトップへ](4-2-1-2.md) - diff --git a/automanual/old_delete/4-2-1-3.md b/automanual/old_delete/4-2-1-3.md deleted file mode 100644 index 717af3b..0000000 --- a/automanual/old_delete/4-2-1-3.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](4-2-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](4-2-2.md) - -#### 4.2.1.3. 索引編成ファイル - -図4-14-索引編成ファイルの指定 - -![alt text](Image/4-14.png) - -RELATIVEファイルのようなINDEXEDファイルでは、レコードが順次またはランダムに処理される場合がある。ただしRELATIVEファイルとは異なり、INDEXEDファイル内のレコードの実際の位置は、レコード内の一つ以上の英数字項目値に基づいている。 - -例えば、製品データを含むINDEXEDファイルは、製品識別コードをキーとして用いる場合がある。つまり、「A6G4328」番目のレコードまたは「Z8X7723」番目のレコードの製品IDの値に基づいて、直接レコードを読み取り、書き込み、または更新することができる。 - -1. SEQUENTIALのACCESS MODEでは、ファイルのレコードがRECORD KEYまたはALTERNATE RECORD KEYの値によって順次処理され、RANDOMのACCESS MODEではレコードがキー項目内でランダムに処理される。DYNAMIC ACCESS MODEでは、ファイルがRANDOMまたはSEQUENTIALモードのいずれかで処理され、プログラムの実行時に二つのどちらかを切り替えることができる([6.41](6-41.md)のSTART文を参照)。 - -2. ACCESS MODEが指定されていない場合はSEQUENTIALが指定されたものとみなす。 - -3. RECORD KEY句は、ファイル内レコードへ一次アクセスするために用いるレコード内の項目を定義する。この時、ファイル内の2つのレコードが同じPRIMARY KEY項目値を持つことは許可されない。SOURCE IS句は、分割キーで使用する。 - -4. ALTERNATE RECORD KEY句では、レコードに直接アクセスするための代替手段となるレコード内の追加項目、またはファイルの内容を順次処理できる追加項目を定義する。必要であれば、レコードに対して重複する代替キー値を許可することもできる。 - -5. 複数のALTERNATE RECORD KEY句があり、それぞれがファイルの代替キーを追加で定義している場合がある。 - -6. RECORD KEY値はすべてのレコードにおいて一意でなければならない。ファイル内レコードのALTERNATE RECORD KEY値は、代替キーにWITH DUPLICATES句が指定されている場合にのみ、重複する値を持つことが可能となる。 - -7. INDEXEDファイルの処理に関する文については、CLOSE([6.9](6-9.md))、COMMIT([6.10](6-10.md))、DELETE([6.13](6-13.md))、MERGE([6.27](6-27.md))、OPEN([6.31](6-31.md))、READ([6.33](6-33-1.md))、REWRITE([6.36](6-36.md))、SORT([6.40.1](6-40-1.md))、START ([6.41](6-41.md))、UNLOCK([6.48](6-48.md))およびWRITE([6.50](6-50.md))で説明する。 - - - -[ページトップへ](4-2-1-3.md) - diff --git a/automanual/old_delete/4-2-2.md b/automanual/old_delete/4-2-2.md deleted file mode 100644 index 7e472e5..0000000 --- a/automanual/old_delete/4-2-2.md +++ /dev/null @@ -1,22 +0,0 @@ - -[前へ](4-2-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-1.md) - -### 4.2.2. 入出力管理段落 - -図4-15-入出力管理段落構文 - -![alt text](Image/4-15.png) - - -入出力管理(I-O-CONTROL)段落は、特定のファイル処理を最適化するために用いる。 - -1. SAME SORT AREA句とSAME SORT-MERGE AREA句は機能しないが、SAME RECORD AREAは機能する。 - -2. SAME RECORD AREA句を使うと、複数のファイルが同一の入力および出力メモリバッファを共有するように指定できる。これらのバッファは巨大化してしまうことがあり、複数のファイルで同じバッファメモリを共有することによって、プログラムが使用するメモリ量の大幅な削減が可能となる(これにより手続き型コードまたはデータのための「空白」ができる)。この機能を使う場合は、指定したファイルが同時に開かないように注意することが必要である。 - -3. MULTIPLE FILE TAPE句は廃止されたため、認識はされるがサポートはされていない。 - - - -[ページトップへ](4-2-2.md) - diff --git a/automanual/old_delete/5-1.md b/automanual/old_delete/5-1.md deleted file mode 100644 index d092f38..0000000 --- a/automanual/old_delete/5-1.md +++ /dev/null @@ -1,57 +0,0 @@ - -[前へ](4-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-2.md) - -# 5. データ部 - -図5-1-データ部の形式 - -![alt text](Image/5-1.png) - -データ部(DATA DIVISION)は、プログラムが処理するすべてのデータを定義するために利用される。データ型やデータの使用方法に応じて、上に示した構文の骨組みからもわかるように、一つの節ごとに定義されている。 - -1. 宣言されているどの節も、提示されている順序で指定する必要がある。データ部が必要でない場合は、ヘッダー自体を省略することができる。 - -2. レポート節(REPORT SECTION)は構文的には認識されるが、利用すると対応されていないものとして拒否されてしまう。opensource COBOLはRWCS(レポート作成制御システム)に対応していないためである。(ただし、ファイル記述項ではLINAGE句がサポートされている。) - -3. 局所場所節(LOCAL-STORAGE SECTION)は作業場所節(WORKING-STORAGE SECTION)と同じ方法で使用されるが、一つだけ例外がある。局所場所節で定義されたデータは、プログラム(ほとんどがサブプログラム)が実行される度に、初期状態に〔再〕初期化される。一方で、作業場所節のデータは静的であり、プログラムが中断されるか、メインプログラムの実行が終了するまで、最後に利用していた状態が保たれる。 - -4. 局所場所はネストされたプログラムでは使用できない。 - -5. 画面節(SCREEN SECTION)ではレポートの構造をレイアウトするレポート節を使う時と同様の規則や構文を使ったテキストベースでの画面レイアウトを定義できる。 - -6. opensource COBOLには共通場所節(COMMON-STORAGE SECTION)がないことに注意が必要である。実際に、この特徴はCOBOL規格から削除された。ただし機能的には、EXTERNALまたはGLOBALデータ項目属性に置き換えられている。 - -## 5.1. ファイル記述 - -図5-2-ファイル記述構文 - -![alt text](Image/5-2.png) - -プログラム内のSELECTで指定されたすべてのファイルについて詳細な記述が必要で、ファイル節(FILE SECTION)でコード化される。記述方法には、ファイル記述(FD)と整列用記述(SD)があり、それぞれ通常のデータファイルの記述と、作業ファイルの整列に使用される。ファイル記述では、ファイルで使用されるレコード形式と、それらのレコードが効率的に処理を行うように、物理的ブロックに「まとめる」方法について詳細に説明する。 - -1. CODE-SET句では、構文的に認識されているが、opensource COBOLでは現時点でサポートされていない。 - -2. LABEL RECORD句、DATA RECORD句、RECORDING MODE句、およびVALUE OF句は使われなくなった。使用しても生成されたコードに影響はない。DATA RECORD句で指定された一意名はプログラム内で定義されているが、コンパイラの方は一意名が実際にファイルのレコードとして指定されているかどうかは問題にしない。 - -3. COBOL言語は複数ある論理データレコードを、単体の物理データレコードに「ブロック」として入れることができる。メモリブロックが新しいレコードでいっぱいになった時、順次処理される出力ファイルに対して、実際に物理的書き込みが行われる([6.10](6-10.md)のCOMMIT文を参照)。同様にファイルを連続して読み取る場合、ファイルに対して生成された最初のREAD文は、最初の物理レコード(ブロック)を取得し、そこから最初の論理レコードが取得され、プログラムに送られる。次に生成されたREAD文は、バッファーが使い果たされるまで連続する論理コードを取得し、使い果たされると、次の物理レコードの取得のために別の物理的読み取りが実行される。ファイル記述のBLOCK CONTAINS句を使用すると、プログラマに対して完全に透過的な方法ですべての処理を実行できる。 - -4. LINE SEQUENTIALファイルを使用する場合、RECORD CONTAINS句とRECORD IS VARYING句は無視される(警告メッセージが表示される)。他のファイル編成において、これらのような相互に排他的な句は、ファイル内のデータレコードの長さを定義していて、その長さはブロックのサイズを計算するためにBLOCK CONTAINS ・・・ RECORDS句によって使用される。 - -5. REPORT IS句は構文的に認識されているが、RWCSはopensource COBOLでは現時点でサポートされていないため、エラーが発生する。 - -6. LINAGE句は、ORGANIZATION RECORD BINARY SEQUENTIAまたはORGANIZATION LINE SEQUENTIALファイルのみ指定できる。ORGANIZATION RECORD SEQUENTIALファイルで使用される場合、ファイル定義は暗黙的にLINE SEQUENTIALに変更される。 - -7. LINAGE句は図5-3からわかるように、印刷ページの様々な領域の論理的な境界線を(行数の観点から)指定するために使用される。このページ構造の利用方法については、[6.50](6-50.md)(WRITE文)で説明する。 - - 図5-3-LINAGE句指定ページ構造 - - ![alt text](Image/5-3.png) - -8. EXTERNAL句を指定することにより、ファイル記述が必要な各コンパイルユニットで(EXTERNAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内のすべてのプログラム(個別にコンパイルされるか、同じコンパイルユニットでコンパイルされる)間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができる。 - -9. GLOBAL句を指定することにより、ファイル記述が必要な各プログラムで(GLOBAL句を使って)記述されている場合、ファイル記述は、特定の実行スレッド内の同じコンパイルユニットにあるすべてのプログラム間で共有できる。この共有によって、異なる様々なプログラムでファイルをOPEN、読み書き、CLOSEすることができるが、個別にコンパイルされたプログラムは、GLOBALファイル記述を共有できない(ただしEXTERNALファイル記述は共有できる)。 - - - -[ページトップへ](5-1.md) - diff --git a/automanual/old_delete/5-2.md b/automanual/old_delete/5-2.md deleted file mode 100644 index 1212bf4..0000000 --- a/automanual/old_delete/5-2.md +++ /dev/null @@ -1,26 +0,0 @@ - -[前へ](5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-3.md) - -## 5.2. 整列用記述 - -図5-4-整列用記述段落 - -![alt text](Image/5-4.png) - - -整列用ファイル([6.27](6-27.md)および[6.40.1](6-40-1.md)を参照)はファイル記述ではなく、整列用記述を使って説明する。 - -1. 完全な「ファイル記述(FD)」構文は実際には整列の記述に使用できるが、ここに示される構文要素のみ意味を持つことになる。 - -2. 整列用ファイルをディスクに割り当てる必要がある。 - -3. 整列されるデータの量が許容される場合、整列はメモリ内で実行される。 - -4. 一方でデータ量の確保にディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数で定義されたフォルダ内のディスクに自動で割り当てられる([8.2.4](8-2-4.md)を参照)。これらのディスクファイルは、プログラムの実行が(通常またはその他の方法で)終了した場合、自動で削除されない。一時的な整列用作業ファイルは、自分自身から、または整列が終了した自分のプログラムから、ファイルを削除したい場合に「cob*.tmp」と命名される。 - -5. 整列用ファイルのSELECT文で特定のファイル名を指定すると、そのファイル名は無視される。 - - - -[ページトップへ](5-2.md) - diff --git a/automanual/old_delete/5-3.md b/automanual/old_delete/5-3.md deleted file mode 100644 index 3371754..0000000 --- a/automanual/old_delete/5-3.md +++ /dev/null @@ -1,302 +0,0 @@ - -[前へ](5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-4.md) - -## 5.3. データ記述の形式 - -図5-5-データ記述の一般形式 - -![alt text](Image/5-5.png) - -ここで示した構文の骨組みは、画面節を除く、すべてのデータ部の節でデータ項目が定義される方法を提示している。 - -1. レベル番号の直後に一意名またはFILLERを指定しない場合、FILLERを指定した場合と同じ動きをする。 - -2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 - - - | | | - | --- | --- | - | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | - | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | - | 66 | 項目の再集団化-RENAMES句は唯一このような項目を許可している。 | - | 77 | 従属項目に分割されず、他のデータの従属項目でもないデータ項目(レベル01を使用しても同じことができるため、あまり使われない)。 | - - - この他にも特別な使い方をする二つのレベル番号(78と88)があるが、それは[5.5](5-5.md)(78)と[5.4](5-4.md)(88)でそれぞれ解説する。 - -3. レベル66のデータ項目は、すべてを参照できる集団項目名(一意名-1)を定義するように再集団化された構造内の、連続するデータ項目の再集団化にすぎない。 - -4. PICTURE句は、定義されているデータ項目に含まれる可能性のあるデータのクラス(数値、アルファベット、または英数字)を定義する。また、データ項目用に予約されているストレージの容量も、(場合によってはUSAGE句と組み合わせて)定義する。基本的な3つのクラス定義 PICTURE記号には以下の用途がある。 - - 表5-6-データのクラス定義 PICTURE記号(9/A/X) - - | 基本記号 | 意味・使用方法 | - | :--- | :--- | - | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | - | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | - | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | - | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | - - 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: - - | | | - | --- | --- | - | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | - | PIC X(10) | このデータ項目は任意の10文字(英数字形式)の文字列を格納できる。 | - | PIC A(10) | このデータ項目は任意の10文字(書式編集形式)の文字列を格納できる。文字のみが許可されるという強制はないが、エラーはクラスの条件テストを介して検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | - | PIC AA9(3)A | X6を指定するのと全く同じことだが、値を2文字、3桁、1文字の順にする必要があることを文書化している。文字の位置をチェックする「総当たり攻撃」以外に、強制やエラー検出機能はない。 | - | PIC N(10) | 10文字の日本語文字を格納できるデータ項目で、20バイトのストレージが割り当てられる。 | - - - - 「A」または「X」のPICTURE記号を含むデータ項目は算術演算には使用できない。 - - 上記に加え、表5-7は「PIC 9」データ項目で使用できる数値形式オプションのPICTURE記号を示している。 - - 表5-7-数値形式オプションのPICTURE記号(P/S/V) - - | 数値形式のオプション記号 | 意味・使用方法 | - | :--- | :--- | - | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | - | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | - | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | - -5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 - - 表5-8-符号エンコード文字 - - | 最終/先頭桁 | 正の数への変換値 | 負の数への変換値 | - | :---: | :---: |:---: | - | 0 | 0 | p | - | 1 | 1 | q | - | 2 | 2 | r | - | 3 | 3 | s | - | 4 | 4 | t | - | 5 | 5 | u | - | 6 | 6 | v | - | 7 | 7 | w | - | 8 | 8 | x | - | 9 | 9 | y | - - SEPARATE CHARACTER句が使用されている場合、実際の「+」または「-」記号が、先頭(LEADING)または最終(TRAILING)の文字として、項目の値に挿入される。 - - -6. opensource COBOLは以下の表のように、「¥」、カンマ、アスタリスク(*)、小数点、CR、DB、+(プラス)、-(マイナス)、「B」、「0」(ゼロ)および「/」といった、すべての標準COBOL PICTURE編集記号を利用できる。 - - 表5-9-数字編集PICTURE記号 - - | 編集記号 | 意味・使用方法 | - | :--- | :--- | - | -(マイナス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「-」を使用する場合、「+」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「-」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動マイナス記号*と呼ばれる。
各「-」記号は、データ項目のサイズの1文字位置としてカウントされる。
「-」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は空白に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「-」が実際には「9」である場合の編集値を決定する。
2. 右端の「-」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-1.png) | - | ¥7 | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「¥」記号を連続して使用することができ、*浮動通貨記号*と呼ばれる。
各「¥」記号は、データ項目のサイズの1文字位置としてカウントされる。
「¥」記号が1つだけ指定されている場合、項目値の有効桁数が多すぎて「¥」が占める位置が先頭のゼロ以外の数字を表す必要がある場合を除いて、その記号は編集値の位置に挿入される。この場合、「¥」は「9」として扱われる。
浮動通貨記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「¥」が実際には「9」である場合の編集値を決定する。
2. 右端の「¥」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「¥」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-2.png) | - | *(アスタリスク) | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「\*」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動チェック保護記号*と呼ぶ。
各「\*」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「\*」が実際には「9」である場合の編集値を決定する。
2. 右端の「\*」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を「\*」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて「\*」に置き換える。
例:
![](Image/5-3-3.png) | - | ,(カンマ)8 | PICTURE文字列内の各カンマ(,)は、文字「,」が挿入される文字位置を表す。この文字位置は項目のサイズにカウントされる。「,」記号は、「,」文字の挿入を必要とする数字編集の桁数の精度が不十分である場合に、その左右にある浮動記号に見せかけることができる「スマート記号」である。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-4.png) | - | .(ピリオド)8 | この記号は、暗黙の小数点が値に存在する位置で、編集値に小数点を挿入する。数字の編集に使用する。データ項目定義の最後に指定されたピリオドは、編集記号として扱われないことに注意すること!
例:
`01 Edited-Value PIC 9(3).99.`
`01 Payment PIC 9(3)V99 VALUE 152.19.`
`...`
`MOVE Payment TO Edited-Value.
DISPLAY Edited-Value.`
152.19が表示される。 | - | /(スラッシュ) | この記号は、通常、印刷物の日付編集に使用され、編集値に「/」文字を挿入する。
英数字編集項目の場合、挿入された「/」文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された「/」文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Date PIC 99/99/9999.`
`・・・`
`MOVE 08182009 TO Edited-Date.`
`DISPLAY Edited-Date.`
08/18/2009が表示される。 | - | +(プラス) | この記号は、PICTURE句の最初または最後に使用する必要がある。「+」を使用する場合、「-」、「CR」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
複数の「+」記号を連続して使用することは、項目の先頭でのみ許可される。これは*浮動プラス記号*と呼ばれる。
各「+」記号は、データ項目のサイズの1文字位置としてカウントされる。
「+」記号が1つだけ指定されている場合、その記号は、項目に移動した値が負の場合は「-」に、そうでない場合は「+」に「置き換え」られる。
浮動マイナス記号が使用されている場合、編集プロセスは次のように機能すると考えること:
1. 各「+」が実際には「9」である場合の編集値を決定する。
2. 右端の「+」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 項目に移動した値が負の場合は「0」を「-」に、そうでない場合は「+」に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白で置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-5.png) | - | 0(ゼロ) | この記号は、編集値に「0」文字を挿入する。挿入された「0」文字は、編集結果で1バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | B | この記号は、空白文字を編集値に挿入する。
英数字編集項目の場合、挿入された空白文字は、編集結果で1バイトのストレージを占有する。
日本語編集項目の場合、挿入された日本語空白文字は、編集結果で2バイトのストレージを占有する。
例:
`01 Edited-Phone-Number PIC 9(3)B9(3)B9(4).`
`・・・`
`MOVE 5185551212 TO Edited-Phone-Number.`
`DISPLAY Edited-Phone-Number.`
518 555 1212と表示される。 | - | CR | この記号は、PICTURE句の最後に使用する必要がある。「CR」を使用する場合、「-」、「+」そして「DB」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「CR」記号を使用することはできない。
「CR」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「CR」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-6.png) | - | DB | この記号は、PICTURE句の最後に使用する必要がある。「DB」を使用する場合、「-」、「+」そして「CR」のいずれも使用することはできない。数字の編集に使用する。
1つのPICTURE句で複数の「DB」記号を使用することはできない。
「DB」記号は、データ項目のサイズで2文字の位置としてカウントされる。
項目に移動した値が負の場合、文字「DB」が編集値に挿入される。それ以外の場合は、2つの空白が挿入される。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-7.png) | - | Z | この記号は、「+」または「-」がPICTURE句の左側に表示される場合を除き、その最初だけに使用する必要がある。数字の編集に使用する。
複数の「Z」記号の連続した使用は、許可されているだけでなく、一般的な使用法である。これを*浮動ゼロサプレッション*と呼ぶ。
各「Z」記号は、データ項目のサイズの1文字位置としてカウントされる。
編集プロセスは、次のように機能すると考えること:
1. 各「Z」が実際には「9」である場合の編集値を決定する。
2. 右端の「Z」に対応する編集結果の数字を見つけ、その位置から編集値を左にスキャンしていき、左側に「0」文字しかない「0」に到達するまで続ける。
3. 「0」を空白に置き換える。
4. その位置の左側にある残りの「0」文字をすべて空白に置き換える。
例(記号~~b~~は空白を表す):![alt text](Image/5-3-8.png) | - - 同じPICTURE句で、複数の編集記号を浮動方式で使用することはできない。 - -7. 編集記号を含む数値データ項目は、数値編集項目と呼ばれる。このようなデータ項目は、様々な算術文で値を受け取る場合があるが、同じ文でデータのソースとして使用することはできない。これに該当するのは、ADD文([6.5](6-5-1.md))、COMPUTE文([6.11](6-11.md))、DIVIDE文([6.15](6-15-1.md))、MULTIPLY文([6.29](6-29-1.md))、およびSUBTRACT文([6.44](6-44-1.md))である。 - -8. EXTERNAL句を指定することにより、データ項目が各コンパイル単位で(EXTERNAL句を使って)記述されている場合、定義されているデータ項目は、特定の実行スレッド内のすべてのプログラム単位(個別にコンパイルされるか、同じコンパイル単位でコンパイルされる)間で共有できる。 - -9. GLOBAL句を指定することにより、データ項目は、各プログラム単位でGLOBAL句を使って記述されている場合、そしてGLOBAL句を使用したすべてのプログラム単位が、GLOBAL句を使用したデータ項目を定義する最初のプログラム単位内にネストされている場合、特定の実行スレッド内の同じコンパイル単位内のすべてのプログラム単位間で共有できる。プログラム単位のネストについては、[2.1](2-1.md#21-ネストされたユーザプログラム)で説明している。 - -10. EXTERNAL句は、77または01レベルでのみ指定できる。 - -11. EXTERNAL項目にはデータ名(つまり一意名-1)が必要であり、その名前をFILLERにすることはできない。 - -12. EXTERNAL句は、GLOBAL句、REDEFINES句、またはBASED句と組み合わせることはできない。 - -13. VALUE句は、EXTERNALデータ項目、またはEXTERNALデータ項目に従属するものとして定義されたデータ項目では無視される。 - -14. OCCURS句は、複数回繰り返される表`9`と呼ばれるデータ構造を作成するため、次の例のように使用される。 - - 05 QUARTLY-REVENUE OCCURS 4 TIMES PIC 9(7)V99. - - 以下のように割り当てられる。 - - ![alt text](Image/5-3-9.png) - - 各オカレンスは、上で示されている添字構文(括弧で囲まれた数字定数、算術式、または数値識別子)を使用して参照される。OCCURS句は集団レベルでも使用でき、集団構造全体が次のように繰り返される。 - ``` - 05 X OCCURS 3 TIMES. - 10 A PIC X(1). - 10 B PIC X(1). - 10 C PIC X(1). - ``` - ![alt text](Image/5-3-10.png) - - 表の詳細については、[6.1.1](6-1-1.md)(表の参照)、[6.38](6-38-1.md)(SEARCH)、[6.40](6-40-1.md)(SORT)、および以下の28項で説明する。 - -15. オプションのDEPENDING ON句をOCCURS句に追加することで、可変長テーブルを作成できる。このような表は、整数-2で指定された最大サイズまで割り当てられる。実行時、一意名-5の値によって、アクセス可能な表の要素数が決まる。 - -16. レベル番号が01、66、77、88のデータ記述項にはOCCURS句を指定できない。 - -17. VALUE句は、コンパイラによって生成されたプログラムオブジェクトコード内のデータ項目が占有するストレージに割り当てられる、コンパイル時の初期値を指定する。オプションの「ALL」句は英数字定数でのみ使用でき、データ項目が完全に埋まるまで必要に応じて値が繰り返される。以下はALLを使用する場合と、使用しない場合の例である。 - - ``` - PIC X(5) VALUE “A” – 次の値を保持する “A”,空白,空白,空白,空白 - PIC X(5) VALUE ALL “A” – 次の値を保持する “A”,”A”,”A”,”A”,”A” - PIC 9(3) VALUE 1 – 次の値を保持する 001 - PIC 9(3) VALUE ALL “1” – 次の値を保持する 111 - ``` - -18. ASCENDING KEY句、DESCENDING KEY句、およびINDEXED BY句については、[6.38](6-38-1.md)(SEARCH)で説明する。 - -19. BASED句とANY LENGTH句を併用することはできない。 - -20. JUSTIFIED RIGHT句は、アルファベット(PIC A)または英数字(PIC X)項目でのみ有効であり、データ項目の長さよりも短い値は、データ項目にMOVEされるときに右端に詰められ、空白で埋められる。 - -21. BASED句で宣言されたデータ項目には、コンパイル時にストレージが割り当てられない。実行時にALLOCATE文を使用することによって領域を割り当て、(オプションで)項目を初期化する。 - -22. ANY LENGTH属性で宣言されたデータ項目には、コンパイル時の固定長はない。この項目は、サブルーチン引数の説明としての機能であるため、連絡節でのみ定義することができる。ANY LENGTH項目には、A、X、または9記号を1つだけ指定するPICTURE句が必要である。 - -23. BLANK WHEN ZERO句を数値項目で使用すると、その項目に0の値がMOVEされた場合、値が自動的に空白に変換される。 - -24. REDEFINES句により、一意名-1は一意名-2と同じ物理ストレージ領域を占有するため、ストレージは(おそらく)異なる構造、そして異なる方法で定義される。REDEFINES句を使用するには、次の条件がすべて満たされている必要がある - - a. 一意名-2のレベル番号は一意名-1のレベル番号と同じでなければならない。 - - b. 一意名-2(および一意名-1)のレベル番号は、66、77、78、または88にすることはできない。 - - c. 「n」が一意名-2(および一意名-1)のレベル番号を表す場合、レベル番号「n」の他のデータ項目を、一意名-1と一意名-2の間に定義することはできない。 - - d. 一意名-1に割り当てられた合計サイズは、一意名-2に割り当てられた合計サイズと同じでなければならない。 - - e. 一意名-2にOCCURS句を定義することはできない。ただし、一意名-2に従属するOCCURS句で定義された項目が存在する場合がある。 - - f. 一意名-2にVALUE句を定義することはできない。88レベルの条件名を除き、一意名-2に従属するデータ項目にVALUE句を含めることはできない。 - -25. 次の表は、利用可能なUSAGE句をまとめたものである。 - - 表5-10-USAGE句一覧
- - | USAGE句 | 割り当て領域(バイト) |ストレージ形式|負の値|PIC|類似USAGE句| - | :--- | :--- |:--- | :--- |:--- | :--- | - | BINARY | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性―24項参照 |PICTURE句に「S」記号がある場合は可 | 可 | COMPUTATIONAL, COMPUTATIONAL-4 | - | BINARY-CHAR or BINARY-CHAR SIGNED | 1バイト | ネイティブ―24項参照 | 可 | 不可 | | - |BINARY-CHAR UNSIGNED | 1バイト | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-C-LONG or BINARY-C-LONG SIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。|ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-C-LONG UNSIGNED | コンピュータのC言語の「long」データ型と同じ量のストレージを割り当てる。通常は32ビットだが、64ビットの場合もある。 | ネイティブ ― 24項参照 | 不可―25項参照 | 不可 | | - | BINARY-DOUBLE or BINARY-DOUBLE SIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | | - | BINARY-DOUBLE UNSIGNED | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | | - | BINARY-LONG or BINARY-LONG SIGNED | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-LONG, SIGNED-INT | - | BINARY-LONG UNSIGNED|ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-LONG, UNSIGNED-INT | - | BINARY-SHORT or BINARY-SHORT SIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | SIGNED-SHORT | - | BINARY-SHORT UNSIGNED | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | UNSIGNED-SHORT | - | COMPUTATIONAL | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL-4 | - | COMPUTATIONAL-1 | ワード(32ビット)のストレージを割り当てる。 | 単精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-2 | 「従来の」ダブルワード(64ビット)のストレージを割り当てる。 | 倍精度浮動小数点 | 可 | 不可 | | - | COMPUTATIONAL-3|PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照|PICTURE句に「S」記号がある場合は可 | 不可 | PACKED-DECIMAL | - | COMPUTATIONAL-4 | PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | BINARY, COMPUTATIONAL | - | COMPUTATIONAL-5|PICTURE句の「9」の数と、プログラムのコンパイルに使用される構成ファイル([8.1.8](8-1-8.md))の「バイナリサイズ」設定によって異なる。 | | PICTURE句に「S」記号がある場合は可 | 可 | | - | COMPUTATIONAL-X | プログラムのコンパイルに使用される構成ファイル内の「1~8」の「バイナリサイズ」設定に従って、PICTURE句の「9」の数に基づいてバイトを割り当てる。「バイナリサイズ」の値「1~8」がどのように機能するかについては、[8.1.8](8-1-8.md)を参照すること。 | 最互換性 ― 24項参照 | PICTURE句に「S」記号がある場合は可 | 可 | | - | DISPLAY | PICTURE句に基づく ― PICTURE句のX、A、9、ピリオド、¥、Z、0、*、S(SEPARATE CHARACTERが指定されている場合)、+、-、またはB記号ごとに1文字10を割り当てる。DBまたはCR記号が使用されている場合は、さらに2バイトを追加する。 | 文字 | PICTURE句に「S」記号がある場合は可 | 可 | | - | INDEX | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | NATIONAL | USAGE NATIONALは、構文的には認識されるが、opensource COBOLではサポートされていない。 | - | PACKED-DECIMAL | PICTURE句の「9」ごとに4ビットを割り当て、さらに符号用に(末尾の)4バイト項目を割り当て、最も近いバイトに切り上げる。SYNCHRONIZED RIGHT(27項参照) | パック10進数 ― 26項参照 | PICTURE句に「S」記号がある場合は可 | 不可 | COMPUTATIONAL-3 | - | POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | PROGRAM-POINTER | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 | 不可 | | - | SIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG-SIGNED, SIGNED-LONG | - | SIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY-LONG SIGNED, SIGNED-INT | - | SIGNED-SHORT|ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 可 | 不可 | BINARY SHORT SIGNED | - | UNSIGNED-INT | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-LONG | - | UNSIGNED-LONG | ワード(32ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-LONG UNSIGNED, UNSIGNED-INT | - | UNSIGNED-SHORT | ハーフワード(16ビット)のストレージを割り当てる。 | ネイティブ ― 24項参照 | 不可 ― 25項参照 | 不可 | BINARY-SHORT UNSIGNED | - -26. バイナリデータは、「ビッグエンディアン」または「リトルエンディアン」形式で格納することができる。 - - ビッグエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、00000014(16進表記で表示)として割り当てられるビッグエンディアンとなる。 - - リトルエンディアンのデータ割り当てでは、バイナリ項目を構成するバイトについて、最下位バイトが端のバイトとなるように割り当てられる。例えば、10進数で20の値を持つ4バイトのバイナリ項目は、14000000(16進表記で表示)として割り当てられるリトルエンディアンとなる。 - - CPUはビッグエンディアン形式を「理解」できるため、コンピュータシステム間でバイナリストレージの「最互換性」形式となる。 - - 一部のCPU―ほとんどのWindows PCで使用されているIntel/AMD i386/x64アーキテクチャプロセッサなど―は、リトルエンディアン形式で格納されたバイナリデータの処理を得意とする。この形式が上記システムでより効率的であるため、「ネイティブ」バイナリ形式と呼ばれる。 - - バイナリストレージの1つの形式(通常はビッグエンディアン)のみをサポートするシステムでは、「最効率的な形式」と「ネイティブ形式」は同義語である。 - -27. UNSIGNED属性が明示的にコーディングされているバイナリデータ項目、またはPICTURE句に「S」記号がないバイナリデータ項目に、負の値を格納することはできない。このような項目に負の値を格納しようとすると、実際には正の数であるかのように解釈される負の数のバイナリ表現が発生する。例えば、IntelまたはAMDプロセッサを実行しているコンピュータでは、バイナリ値として表される-3の値は111111012になる。その値がUSAGE BINARY-CHAR UNSIGNED項目に格納されると、実際には0111111012または253として解釈される。 - -28. パック10進数(つまり、USAGE COMP-3またはUSAGE PACKED-DECIMAL)データは、各バイトに2つの4ビット項目が含まれ、各項目がPICTURE句の「9」を表し、10進数1桁を格納する一連のバイトとして格納される。最後のバイトには、常に単一の4ビット数字(「9」に対応する)と4ビットの符号指示子(「S」記号が使用されていなくても常に存在する)が含まれる。最初のバイトには、PICTURE句で使用された「9」記号の数に応じて、未使用の左端の4ビット項目が含まれる。符号指示子は、AからFまでの16進数の値で、A、C、E、およびFは正、BまたはDは負を示す。したがって、値が-15のPIC S9(3) COMP-3パック10進数項目は、16進数の015D(または015B)が格納される。PICTURE句に「S」が含まれていないパック10進数項目に負の数を格納しようとすると、実際には負の数の絶対値が格納される。 - -29. SYNCHRONIZED句(SYNCと省略される場合がある)は、バイナリ数値項目のストレージを最適化し、CPUのフェッチを可能な限り高速化して格納する。この同期は次のように実行される。 - - a. バイナリ項目が1バイトのストレージを占有する場合、同期は実行されない。 - - b. バイナリ項目が2バイトのストレージを占有する場合、バイナリ項目は次のハーフワード境界に割り当てられる。 - - c. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - d. バイナリ項目が4バイトのストレージを占有する場合、バイナリ項目は次のワード境界に割り当てられる。 - - 次に示すのは、SYNCHRONIZED句を使用する場合、そして使用しない場合の集団項目のストレージ割り当ての例である。 - - 図5-11-SYNCHRONIZED句の効果 - - ![alt text](Image/5-11.png) - - 灰色のブロックは、SYNC句によって**集団項目-2**構造に割り当てられた、未使用の「遊び」バイトを表す。 - - SYNCHRONIZED句のLEFTおよびRIGHTオプションは、他のCOBOL実装との構文上の互換性のために認識はされるが、機能しない。 - -30. 表の初期化は、COBOLデータ定義の難しい側面の1つである。基本的に3つの標準的な手法と、他のCOBOL実装に精通しているがopensource COBOLに慣れていない人にとっては興味深いと思われる4つ目の手法がある。以下の3つは「標準的な」手法である。 - - a. コンパイル時に気にする必要はない。INITIALIZE文を使用して、表の内のすべてのデータ項目オカレンスを(実行時に)、データ型固有の初期値(数値:0、英字および英数字:空白)に初期化する。 - - b. 次のように、表の「親」として機能する集団項目にVALUE句を含めることで、コンパイル時に小さな表を初期化する。 - ``` - 05 SHIRT-SIZES VALUE “S 14M 15L 16XL17”. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - c. REDEFINES句を使用して、コンパイル時にほぼすべてのサイズの表を初期化する。 - - ``` - 05 SHIRT-SIZE-VALUES. - 10 PIC X(4) VALUE “S 14”. - 10 PIC X(4) VALUE “M 15”. - 10 PIC X(4) VALUE “L 16”. - 10 PIC X(4) VALUE “XL17”. - 05 SHIRT-SIZES REDEFINES SHIRT-SIZE-VALUES. - 10 SHIRT-SIZE-TBL OCCURS 4 TIMES. - 15 SST-SIZE PIC X(2). - 15 SST-NECK PIC 9(2). - ``` - - - cに示した表は、明らかにbよりも冗長である。しかし、cが優れている点は、より大きな表に必要な数のFILLER/VALUE項目を記述できることである(そして、値は必要なだけ長くすることができる!) - - 多くのCOBOLコンパイラでは、同じデータ項目でVALUE句とOCCURS句を使用することはできず、OCCURS句に従属するデータ項目にVALUE句を使用することもできない。一方で、opensource COBOLにはこれらの制限はない。次の例は、opensource COBOLで表を初期化する4番目の方法である。 - - ``` - 05 X OCCURS 6 TIMES. - 10 A PIC X(1) VALUE “?‟. - 10 B PIC X(1) VALUE “%‟. - 10 N PIC 9(2) VALUE 10. - ``` - - この例では、6つの「A」項目が「?」、6つの「B」項目が「%」、そして6つの「N」項目が10に初期化される。この方法が役立つか分からないが、必要であれば使用できる。 - ---- -`7` デフォルトの通貨記号は「$」であるが、他の国では異なる通貨記号を使用している。特殊名段落([4.1.4](4-1-4.md)を参照)では、任意の記号を通貨記号として定義することができる。例えば、通貨記号が「#」という文字に定義されている場合、「#」文字をPICTURE編集記号として使用できる。 - -`8` 特殊名段落でDECIMAL-POINT IS COMMAが指定されている場合、「.」と「,」の意味と使い方が反転する。 - -`9` あなたもよく知っている他のプログラミング言語では、このような構造を配列と呼ぶ。 - -`10` この属性では、1文字は1バイトと同じである。ただし、Unicodeを使用するopensource COBOLシステムを独自に構築した場合(可能性は低い)は1文字=2バイトである。 - - - -[ページトップへ](5-3.md) - diff --git a/automanual/old_delete/5-4.md b/automanual/old_delete/5-4.md deleted file mode 100644 index 1d0d3c8..0000000 --- a/automanual/old_delete/5-4.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-5.md) - -## 5.4. 条件名 - -図5-12-レベル88条件名記述構文 - -![alt text](Image/5-12.png) - -条件名はブーリアン型(つまり「TRUE」/「FALSE」)のデータ項目である。 - -1. 条件名は常に別のデータ項目に従属して定義される。データ項目は基本項目である必要はない。 - -2. また、ストレージを占有しない。 - -3. 条件名に指定されたVALUE(s)は、条件名の値をTRUEにする親要素データ項目の特定の値、および/または、値の範囲を指定する。 - -4. オプションのFALSE句は、SET文を使用して条件名-1をFALSEに設定した場合に、親の基本データ項目に割り当てられる明示的な値を定義する。SET文を使用して、条件名のTRUE/FALSE値を指定する方法については、[6.39.6](6-39-6.md)で詳しく説明する。 - -5. 条件名については、[6.1.4.2.1](6-1-4-2.md#61421-条件名レベル88項目)でも説明する。 - - - -[ページトップへ](5-4.md) - diff --git a/automanual/old_delete/5-5.md b/automanual/old_delete/5-5.md deleted file mode 100644 index ce561be..0000000 --- a/automanual/old_delete/5-5.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](5-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](5-6.md) - -## 5.5. 定数記述 - -図5-13-78レベル定数記述構文 - -![alt text](Image/5-13.png) - -この形式のデータ項目は、実際にストレージを割り当てることはないが、その代わりに、名前を英数字または数字定数に関連付ける役割がある。 - -1. 定数値を定義する場合において、二つの形式は基本的に同じであるが、「01 CONSTANT」を使用した場合にのみ、値が別の項目の長さである定数を定義することが可能である。 - -2. GLOBAL句は構文的には認識されるが、現時点ではopensource COBOLでサポートされていないため、コンパイラ警告が表示される。しかし、2009年2月6日のopensource COBOL1.1パッケージ化の時点では、実際にコンパイラを中断させる可能性がある。 - - - -[ページトップへ](5-5.md) - diff --git a/automanual/old_delete/5-6.md b/automanual/old_delete/5-6.md deleted file mode 100644 index bb8e538..0000000 --- a/automanual/old_delete/5-6.md +++ /dev/null @@ -1,105 +0,0 @@ - -[前へ](5-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-1.md) - -## 5.6. 画面記述 - -図5-14-画面節データ項目記述構文 - -![alt text](Image/5-14-1.png) -![alt text](Image/5-14-2.png) - -上に示した構文の枠組みは、画面節でデータ項目がどのように定義されているかを表す。これらのデータ項目は、特別な形式のACCEPT文([6.4](6-4-1.md))およびDISPLAY文([6.14.4](6-14-4.md))を介して使用され、TUI(「テキストユーザインターフェース」プログラム)を作成する。 - -1. レベル番号66、78および88のデータ項目は画面節で使用でき、他のデータ部節と同じ構文、規則、使用法である。 - -2. BELL句またはBEEP句(どちらも同義語である)を利用して、画面項目が表示されているとき可聴音を鳴らす。 - -3. AUTO句(三つある形式はすべて同じ)は、AUTO句のある項目が完全に入力されているとき、次の入力可能項目へと自動で進むカーソルが表示される。 - -4. UNDERLINE句とOVERLINE句は、現時点ではWindowsのコンソールウィンドウAPIでサポートされていないため、Windowsシステムでは基本的に機能しない。しかしUNDERLINE句は、FOREGROUND-COLOR属性によって指定された(または暗黙の)値に関係なく、項目の前景色を青に表示する効果がある。これらの句がUNIXシステムで機能するか否かは、使用する出力端末のビデオ属性によって異なる。 - -5. SECURE属性は、データ入力(USINGまたはTO)を許可する項目でのみ使用できる。この属性によって、項目に入力されたデータはすべて、アスタリスクとして表示される。 - -6. REQUIRED属性とFULL属性は、構文的には適切であるが、機能はしない。 - -7. PROMPT属性は、すべての入力項目の既定の動作となっているため、opensource COBOLでは不要である。`11` - -8. REVERSE-VIDEO属性は、指定または暗黙のFOREGROUND-COLOR属性とBACKGROUND-COLOR属性の意味を逆にする。 - -9. BLANK句は、データ項目のLINE句やCOLUMN句で示されたポイントから、画面または行を空白にする。さらに、コンソールウィンドウの前景色と背景色は、項目で指定されている色に設定される。レベル01項目(または従属項目)内でこの句を使用すると、その項目内に表示されるすべての項目が非表示になる。 - -10. ERASE句は、コンソールウィンドウの最新行(EOL)または画面(EOS)の残りの部分を消去する。ERASE句が消去したり、前景色と背景色を設定する項目の最後の方から始めていき、ERASE句を含む項目に対して有効である。 - -11. LINE句またはCOLUMN句がない場合、画面節項目は画面項目を表すACCEPT文またはDISPLAY文によって、指定もしくは暗示される縦/横座標で始まるコンソールウィンドウに表示される。項目がコンソールウィンドウに表示された後、次の項目がその直後に表示される。 - - LINE句とCOLUMN句は、コンソールウィンドウのどこに項目を表示するかを明示的に示す手段を提供する。座標は、絶対座標(「縦1横5」)または以前に提示された項目の終わりに基づく相対座標(「縦+2横+1」)で表すことができる。一意名や定数を使用して、絶対位置または相対位置を定義できる。一意名を使用する場合は、記号を編集しないPIC 9項目である必要がある(COMPUTATIONAL-1またはCOMPUTATIONAL-2を除く、任意の数値USAGEが許可される。浮動小数点USAGE仕様はそのどちらかは受け入れられるが、予測できない結果になることに注意)。 - - もちろん、LINE句とCOLUMN句を使用せずに画面項目の暗黙的配置に依存している場合を除いて、項目は表示された縦/横の順序で定義する必要はない。 - - TABキーとBACK-TAB(Shift-TAB)キーは、画面節で定義された順序に関係なく、コンソールウィンドウ上に項目が出現する縦/横の順序で、項目から項目へカーソルを配置する。 - - 必要に応じてCOLUMNはCOLに省略が可能である。 - -12. FOREGROUND-COLOR句とBACKGROUND-COLOR句は、テキスト(前景)または画面(背景)の色を指定するために使用される。以下のような番号(0~7)によって色を指定する。 - - 表5-15-番号によって指定される画面色 - - | 整数 | 色 | - | :---: | :---: | - | 0 | 黒 | - | 1 | 青 | - | 2 | 緑 | - | 3 | 青緑 | - | 4 | 赤 | - | 5 | 赤紫 | - | 6 | 黄 | - | 7 | 白 | - -13. HIGHLIGHTおよびLOWLIGHTオプションは、テキストの輝度(前景)を制御する。これは3レベルの強度方式(LOWLIGHT、指定なし、HIGHLIGHT)の提供を目的としているが、Windowsのコンソールは2レベルまでをサポートしているため、LOWLIGHTはこの句を完全に省略した場合と同じである。この修飾子をFOREGROUND-COLOR属性に使用すると、次の表のように実際には8色だけでなく16色のテキストを使用できる。 - - 表5-16-LOWLIGHT/ HIGHLIGHTオプションによる画面色
- - - | FOREGROUND-COLOR整数 | LOWLIGHT | HIGHLIGHT | - | :---: | :---: |:---: | - | 0 | 黒 | 暗灰 | - | 1 | 暗青/藍 | 明青 | - | 2 | 暗緑 | 明緑 | - | 3 | 暗青緑 | 明青緑 | - | 4 | 暗赤 | 明赤 | - | 5 | 暗赤紫 | 明赤紫 | - | 6 | 金/茶 | 黄 | - | 7 | 明灰 | 白 | - - -14. BLINK属性は、BACKGROUND-COLOR仕様の外観を変更する。Windowsのコンソールは点滅をサポートしていないため、Windows版opensource COBOLにおけるBLINKの視覚効果は、LOWLIGHT/HIGHLIGHTと組み合わせたFOREGROUND-COLORにおいて可能であるのと同様の16色をBACKGROUND-COLORパレットに提供することである。 - -15. 前景色と背景色の属性は、他の項目から継承できる。前の項目からではなく、親のデータ項目(数値的に低いレベルのデータ項目)から継承される。以下の点に注意が必要である。 - - ``` - 78 Black VALUE 0. - 78 Blue VALUE 1. - 78 Green VALUE 2. - 78 White VALUE 7. - ・・・ - 02 XYZ BACKGROUND-COLOR Black FOREGROUND-COLOR Green ・・・ - 05 ABC BACKGROUND-COLOR Blue FOREGROUND-COLOR White ・・・ - 05 DEF (no BACKGROUND-COLOR or FOREGROUND-COLOR specified) ・・・ - ``` - DEF項目の色は緑と白になる(XYZから継承される) - -16. VALUE句は変更できない固定のテキストを定義するために使用される。 - -17. FROM句は指定された定数または一意名から、内容を取得する必要がある項目を定義するために使用される。 - -18. TO句は初期値のないデータ入力項目を定義するために使用される。値を入力すると、指定した一意名に保存される。 - -19. USING句は「FROM一意名」と「TO一意名」の組み合わせである。 - ---- -`11`PROMPT属性は、非空白文字でマークすることで表示されるようにした、空の入力項目の指定に使用される。この機能は、opensource COBOLにおける編集可能なすべての画面項目で常に有効になっている(空白に下線を引いた文字が使用されている)。 - - - -[ページトップへ](5-6.md) - diff --git a/automanual/old_delete/6-1-1.md b/automanual/old_delete/6-1-1.md deleted file mode 100644 index f162965..0000000 --- a/automanual/old_delete/6-1-1.md +++ /dev/null @@ -1,38 +0,0 @@ - -[前へ](5-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-2.md) - -# 6. 手続き部 - -## 6.1. 構成要素 - -### 6.1.1. 表の参照 - -COBOLは括弧を使用して、表記述項を参照するための添字を指定する(COBOLの表は、他のプログラミング言語で配列と呼ばれる)。 - -4列×3行の文字グリッドを表す、以下のデータ構造を例に見てみよう: - -``` - 01 GRID. - 05 GRID-ROW OCCURS 3 TIMES. - 10 GRID-COLUMN OCCURS 4 TIMES. - 15 GRID-CHARACTER PIC X(1). -``` - -次の図で網掛けされているGRID-CHARACTERは、 - -![alt text](Image/6-0.png) - - -次のコードで参照できる。 - - GRID-CHARACTER(2, 3) - -添字は、数値(整数)定数、PIC 9(整数)データ項目、USAGE INDEXデータ項目、または -これらの任意の組み合わせを含む整数値をもたらす算術式として指定できる。算術式を表(配列)の添字として使用する機能は、多くの言語の場合で一般的となっているが、COBOLでは稀である。 - -算術式については[6.1.4.1](6-1-4-1.md#6141-算術式)で説明する。 - - - -[ページトップへ](6-1-1.md) - diff --git a/automanual/old_delete/6-1-2.md b/automanual/old_delete/6-1-2.md deleted file mode 100644 index 3225ddb..0000000 --- a/automanual/old_delete/6-1-2.md +++ /dev/null @@ -1,54 +0,0 @@ - -[前へ](6-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-3.md) - -### 6.1.2. データ名の修飾 - -COBOLでは、データ名をプログラム内で複製することができ、修飾と呼ばれるプロセスを通じてデータ名の参照を一意にするという方法によって、データ名への参照行うことができる。 - -動作中の修飾を確認するには、COBOLプログラムで定義された2つのデータレコードの、次のようなセグメントを確認する: - -``` - 01 EMPLOYEE. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). - 01 CUSTOMER. - 05 MAILING-ADDRESS. - 10 STREET PIC X(35). - 10 CITY PIC X(15). - 10 STATE PIC X(2). - 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). -``` - -それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: - - MOVE “Philadelphia” TO CITY. - -この問題を解決するために、CITYの参照を次のように修飾できる。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS. - -残念ながら、どのCITYが参照されているかを具体的に判別するにはまだ不十分である。特定のCITYを正確に判別するには、次のようにコーディングする必要がある。 - - MOVE “Philadelphia” TO CITY OF MAILING-ADDRESS OF EMPLOYEE. - -これによって、どのCITYが変更されているかについての混乱が生じることはなくなる。しかしもっと簡単な記述にすることもできる。COBOLでは中間の修飾を省略できるため、以下のようなコーディングが可能である。 - - MOVE “Philadelphia” TO CITY OF EMPLOYEE. - -テーブルへの参照を修飾する場合は次のように記述する。 - - 一意名-1 OF 一意名-2(添え字・・・) - -予約語の「IN」は「OF」の代わりとして使うことができる。 - - - -[ページトップへ](6-1-2.md) - diff --git a/automanual/old_delete/6-1-3.md b/automanual/old_delete/6-1-3.md deleted file mode 100644 index a0048d8..0000000 --- a/automanual/old_delete/6-1-3.md +++ /dev/null @@ -1,30 +0,0 @@ - -[前へ](6-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-1.md) - -### 6.1.3. 部分参照 - -図6-1-部分参照構文 - -![alt text](Image/6-1.png) - -COBOL’85標準では、データ項目の一部のみへの参照を容易にするための部分参照の概念が導入された。opensource COBOLは、参照の修飾を完全にサポートしている。 - -開始値は、参照される開始文字位置を示し(文字位置の値は、一部のプログラミング言語は0から始まるが、この場合は1から始める)、長さは必要な文字数を指定する。長さが指定されていない場合、最初から最後までの残りの文字位置に相当する値が想定される。 - -ここでいくつか例を挙げる。 - -| | | -| --- | --- | -| CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | -| CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | -| FUNCTION CURRENT-DATE (5:2) | 現在の月を参照する。 | -| Hex-Digits (Nibble + 1:1) | 「Nibble」が0~15の範囲の値を持つ数値データ項目で、かつHex-Digitsが「0123456789ABCDEF」の値を持つPIC X(16)項目であるとすると、与えられた数値を16進数に変換する。 | -| Array-Element (6) (7:5) | Array-Elementの6番目の配列の5文字を参照する。このとき文字位置は7から開始する。 | - - -参照の修飾は、MOVE文、STRING文、ACCEPT文などの受け取り項目としても機能するなど、一意名が有効な場所であればどこでも使用できる。 - - - -[ページトップへ](6-1-3.md) - diff --git a/automanual/old_delete/6-1-4-1.md b/automanual/old_delete/6-1-4-1.md deleted file mode 100644 index 1d88868..0000000 --- a/automanual/old_delete/6-1-4-1.md +++ /dev/null @@ -1,57 +0,0 @@ - -[前へ](6-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-4-2.md) - -### 6.1.4. 式 - -opensource COBOLは他のCOBOL実装と同様に、基本となる2つの式をサポートする。 - -- 数値結果を計算する「算術式」 - -- TRUEまたはFALSE値を計算する「条件式」 - -0や-1などの算術値が、それぞれFALSEやTRUEを表す他のプログラミング言語とは違い、COBOLは論理的なTRUE/FALSE値と0/-1を異なるものとして扱う。opensource COBOLはこのポリシーに準拠している。 - -#### 6.1.4.1. 算術式 - -算術式は、次の演算子を使用して形成される。複数の演算子で構成される複雑な式では、演算の優先順位が適用され、優先順位の低い演算より高い演算の方が先行して計算される。 - -| 優先順位 演算子 | 意味 | - | :---: | :--- | - | 図6-2-符号(-)
1番目(最上位)![alt text](Image/6-2.png) | 単項減算演算子(-)は引数の算術否定を返す。引数と数字定数の-1を掛けた値を有効値とする。| - | 図6-3-符号(+)
1番目(最上位)![alt text](Image/6-3.png) | 単項加算演算子(+)は引数の値を返す。引数と数字定数の+1を掛けた値を有効値とする。 | - | 図6-4-べき乗演算子
2番目![alt text](Image/6-4.png) | 演算子の左側の引数の値を、右側の引数で示されるべき乗で計算する。opensource COBOLでは「**」記号の代わりに「^」記号が使用できる。 | - | 図6-5-乗算演算子
3番目![alt text](Image/6-5.png) | 演算子の左右の引数の乗算を求める。 | - | 図6-6-除算演算子
3番目![alt text](Image/6-6.png) | 演算子の左右の引数の除算を求める。 | - | 図6-7-加算演算子
4番目(最下位)![alt text](Image/6-7.png) | 演算子の左右の引数の加算を求める。 | - | 図6-8-減算演算子
4番目(最下位)![alt text](Image/6-8.png) | 左側の引数から右側の引数を引いた値を求める。 | - -COBOL標準では、べき乗、乗算、除算、加算および減算演算子の前後に、少なくとも1つの空白を空ける必要がある。これによって、他のCOBOL実装との互換性を確保し、演算子前後の空白の省略を定義する以下の特別なルールを設ける必要がなくなるため、式をコーディングするときに従うべき最適なポリシーである。 - -1. opensource COBOLでは、べき乗、乗算、または除算の演算子の前後の空白は不要である。 - -2. 加算演算子の後に符号なしの数字定数が続く場合は、空白を空ける。空白を空けないと(例:「4+3」)、コンパイラは「+」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。その他では、加算演算子の前後の空白は任意となる。 - -3. 減算演算子の後に符号なしの数字定数が続く場合、空白を空ける。空白を空けないと(例:「4-3」)、コンパイラは「-」を符号付き数字定数の指定として扱い、その場合、式に演算子が存在しないため「無効な式」エラーが発生する。 - -4. どちらの引数も括弧で囲まれた式でない場合、減算演算子の前後に空白を空ける。いずれかの空白(「3-Arg」や「Arga-Argb」など)を空けなければ、コンパイラは(おそらく)存在しない定義済みの予約語やユーザ定義の名前を検索し、「「一意名」未定義」エラーを表示する。運が悪ければ、ランタイムエラーを確実に引き起こす一意名としてコンパイルされてしまうだろう。 - -5. 単項加算演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項加算演算子の後に空白を空ける必要がある(したがって、符号付き正数字定数となる)。 - -6. 単項否定演算子の引数が、符号なしの数字定数であるとき、数字定数の一部として扱われないようにするために、単項否定演算子の後に空白を空ける必要がある(したがって、符号付き負数字定数となる)。 - -ここでいくつか算術式の例を示す(説明を簡単にするため、すべての例に数字定数を使っている)。 - -| 式 | 計算結果 | 解説 | -| :--- | :--- |:--- | -| 3 * 4 + 1|13|* は + よりも優先される。 | -| 2 ^ 3 * 4 – 10 | 22 | 2の3乗は8、4を掛けて32、10を引いて22となる。 | -| 2 ** 3 * 4 – 10 | 22 | 上記と同じ―opensource COBOLでは「^」または「**」のいずれかを、べき乗演算子として使用できる。 | -| 3 * (4 + 1)| 15 | 括弧は算術式ルールを再帰的に適用し、括弧で囲まれた算術式は、他の(より複雑な)算術式の構成要素となる。 | -| 5 / 2.5 + 7 * 2 – 1.15 | 15.35 | 整数オペランドと非整数オペランドは、自由に混在させることができる。 | - -もちろん算術式のオペランドは、数値データ項目(DISPLAY、POINTER、またはPROGRAM POINTERを除く任意のUSAGE)および、数字定数をとることができる。 - - - -[ページトップへ](6-1-4-1.md) - diff --git a/automanual/old_delete/6-1-4-2.md b/automanual/old_delete/6-1-4-2.md deleted file mode 100644 index ea62b48..0000000 --- a/automanual/old_delete/6-1-4-2.md +++ /dev/null @@ -1,148 +0,0 @@ - -[前へ](6-1-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-5.md) - -#### 6.1.4.2. 条件式 - -条件式は、プログラムが実行する処理を決定する条件を識別する式であり、TRUE値またはFALSE値を生成する。条件式は難易度の高い順に以下の7種類がある。 - -##### 6.1.4.2.1. 条件名(レベル88項目) - -次のコードは最も単純な条件の一例である。 - -``` - 05 SHIRT-SIZE PIC 99V9. - 88 LILLIPUTIAN VALUE 0 THRU 12.5 - 88 XS VALUE 13 THRU 13.5. - 88 S VALUE 14, 14.5. - 88 M VALUE 15, 15.5. - 88 L VALUE 16, 16.5. - 88 XL VALUE 17, 17.5. - 88 XXL VALUE 18, 18.5. - 88 HUMUNGOUS VALUE 19 THRU 99.9. -``` - -条件名「LILLIPUTIAN」、「XS」、「S」、「M」、「L」、「XL」、「XXL」、および「HUMONGOUS」は、親データ項目(SHIRT-SIZE)内の値に基づいて、TRUE値またはFALSE値を得る。したがって、現在のSHIRT-SIZE値を「XL」として分類できるかどうかをテストするプログラムでは、組み合わせ条件(最も複雑なタイプの条件式)として以下のようにコード化することで、判定することができる。 - - - IF SHIRT-SIZE = 17 OR SHIRT-SIZE = 17.5 - - -または次のように条件名「XL」を使用することもできる。 - - IF XL - -##### 6.1.4.2.2. 字類条件 - -図6-9-字類条件構文 - -![alt text](Image/6-9.png) - -字類条件は、データ項目に格納されている現在のデータ型を判別する。 - -1. NUMERIC字類条件では、「0」、「1」、・・・、「9」の文字のみが数字であると判別され、数字だけを含むデータ項目のみがIS NUMERICクラステストを通過できる。空白、小数点、コンマ、通貨記号、プラス記号、マイナス記号、およびその他の数字以外の文字はすべてIS NUMERICクラステストを通過できない。 - -2. ALPHABETIC字類条件では、大文字、小文字、そして空白のみがアルファベットであると判別される。 - -3. ALPHABETIC-LOWERとALPHABETIC-UPPER字類条件では、空白と小文字・大文字のみクラステストを通過できる。 - -4. USAGEが明示的または暗黙的にDISPLAYとして定義されているデータ項目のみが、NUMERICまたは任意のALPHABETIC字類条件において使用できる。 - -5. 一部のCOBOL実装では、NUMERIC字類条件での集団項目またはPIC A項目の使用、そしてALPHABETIC字類条件でのPIC 9項目の使用は許可されていない。一方でopensource COBOLにはこのような制限はない。 - -6. OMITTED字類条件は、サブルーチンが、特定の引数が引き渡されたか判別する必要がある場合に使用される。このような字類条件における一意名-1は、サブプログラムの「手続き部」ヘッダーのUSING句で定義された、連絡節の項目である必要がある。CALLからサブプログラムへの引数を省略する方法については、[6.7](6-7.md)で説明する。 - -7. 字類名-1オプションを使用すると、ユーザ定義クラスをテストできるようになる。まずは次の例のように、ユーザ定義クラス「Hexadecimal」のSPECIAL-NAMEを定義する。 - - ``` - SPECIAL-NAMES. - CLASS Hexadecimal IS ‘0’ THRU ‘9’, ‘A’ THRU ‘F’, ‘a’ THRU ‘f’. - ``` - -次は、Entered-Valueに有効な16進数のみ入力されている場合に150-Process-Hex-Valueプロシージャを実行する、次のコードを確認する。 - -``` - IF Entered-Value IS Hexadecimal - PERFORM 150-Process-Hex-Value - END-IF -``` - -##### 6.1.4.2.3. 正負条件 -図6-10-正負条件構文 - -![alt text](Image/6-10.png) - -正負条件は、PIC 9データ項目の数値状態を判別する。 - -1. この形式の字類条件に使用できるのは、USAGE/PICTURE句の数値として定義されたデータ項目のみである。 - -2. POSITIVEまたはNEGATIVE字類条件は一意名-1の値がそれぞれ0より大きいか小さい場合、ZERO字類条件は一意名-1の値が0に等しい場合、TRUEと見なす。 - -##### 6.1.4.2.4. スイッチ状態条件 -図6-11-スイッチ状態条件 - -![alt text](Image/6-11.png) - -特殊名段落([4.1.4](4-1-4.md)を参照)では、外部スイッチ名を1つ以上の条件名と関連付けることができる。これらの条件名を使って、外部スイッチがオンまたはオフの状態にあるか判別できる。 - -##### 6.1.4.2.5. 比較条件 -図6-12-比較条件構文 - -![alt text](Image/6-12.png) - -比較条件では、2つの異なる値がどのように「比較」し合っているかを判別する。 - -1. ある二つの数値を比較する場合、比較は実代数の値を使って実行されるため、いずれかの数値のUSAGE句と有効桁数の間に関係性はない。 - -2. 文字列を比較する場合、比較はプログラムの大小順序を基に行われる([4.1.2](4-1-2.md)を参照)。二つの文字列引数の長さが等しくないとき、短い方の文字列には、長い方と同じ長さになる数の空白が(右側に)埋め込まれていると見なされる。文字列の比較は、異なる文字のペアが見つかるまで、対応する文字ごとに実行される。その時点で、ペアとなった文字のそれぞれが大小順序のどこに位置するかによって、どちらがもう一方の文字よりも大きいか(または小さいか)が決まる。 - -##### 6.1.4.2.6. 組み合わせ条件 -図6-13-組み合わせ条件構文 - -![alt text](Image/6-13.png) - -組み合わせ条件は、他の二つの条件(それ自体が組み合わせ条件の可能性がある)によって得られたTRUE/FALSEを用いて、新たにTRUE/FALSEを判別する条件である。 - -1. 二つのうちいずれかの条件がTRUEの場合、OR処理した結果はTRUEになる。二つのFALSE条件をOR処理した場合のみ、結果はFALSEになる。 - -2. AND処理の結果をTRUEにするためには、両方の条件がTRUEである必要がある。それ以外のAND処理の結果は全てFALSEになる。 - -3. 同じ演算子(OR/AND)を使って複数の類似した条件と、共通の演算子とサブジェクトを持っている左または右側の引数を繋ぐ場合、プログラムコードを省略できる。 -``` - IF ACCOUNT-STATUS = 1 OR ACCOUNT-STATUS = 2 OR ACCOUNT-STATUS = 7 -``` -以下のように省略される。 -``` - IF ACCOUNT-STATUS = 1 OR 2 OR 7 -``` - -4. 算術式において乗算が加算よりも優先されるのと同様に、組み合わせ条件でもAND演算子がOR演算子より優先される。優先順位を変更する場合は、必要に応じて括弧を用いる。 - - ``` - FALSE OR TRUE AND TRUE 結果:TRUE - (FALSE OR FALSE) AND TRUE 結果:FALSE - FALSE OR (FALSE AND TRUE) 結果:TRUE - ``` - -##### 6.1.4.2.7. 否定条件 -図6-14-否定条件構文 - -![alt text](Image/6-14.png) - -否定条件はNOT演算子を用いて、条件を否定する。 - -1. 単項減算演算子(数値を否定する)が最も優先度の高い算術演算子であるのと同様に、NOT演算子は論理演算子の中で、最も優先度が高い。 - -2. 論理演算子の既定の優先順位が望ましくないとき、条件が判別および実行される順序を明示的に示すために、括弧を用いる必要がある。 -``` - NOT TRUE AND FALSE AND NOT FALSE FALSE AND FALSE AND TRUE - 結果:FALSE - NOT (TRUE AND FALSE AND NOT FALSE) NOT (FALSE) - 結果:TRUE - NOT TRUE AND (FALSE AND NOT FALSE) FALSE AND (FALSE AND TRUE) - 結果:FALSE -``` - - - -[ページトップへ](6-1-4-2.md) - diff --git a/automanual/old_delete/6-1-5.md b/automanual/old_delete/6-1-5.md deleted file mode 100644 index 60caa7f..0000000 --- a/automanual/old_delete/6-1-5.md +++ /dev/null @@ -1,52 +0,0 @@ - -[前へ](6-1-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-6.md) - -### 6.1.5. ピリオド(.) - -COBOL実装では、手続き部の完結文(センテンス)と文(ステートメント)を区別している。文とは、単一の実行可能なCOBOL命令のことである。例えば以下の例は全て文である。 - -``` - MOVE SPACES TO Employee-Address - ADD 1 TO Record-Counter - DISPLAY “Record-Counter=” Record-Counter -``` - -一部のCOBOL文には「適用範囲」があり、ある文が当該文の一部であるか、関連していると考えられる。例えば以下のように、ローンの残高が10000ドル未満の場合は4%、それ以外は4.5%でローンの利息が計算・表示される。 - -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest - DISPLAY “Interest Amount = “ Interest -``` - -この例では、「IF」文の範囲内に二組の関連する文があり、それぞれ「IF」条件がTRUEの場合、またはFALSEの場合に実行される。 - -しかし、この例には問題がある。人間がこのコードを見たとき、インデントがないことから「IF」条件が示すTRUEまたはFALSEの値に関係なく、DISPLAY文が実行されると考えるだろう。残念ながら、opensource COBOLコンパイラ(またはその他のCOBOLコンパイラ)にとってインデントは関係がないため、人間とは異なる識別をする。実際に、opensource COBOLコンパイラは、次のようなコードでも上記の例と同様に識別される: - -``` - IF Loan-Balance < 10000 MULTIPLY Loan-Balance BY 0.04 - GIVING Interest ELSE MULTIPLY Loan-Balance BY 0.045 - GIVING Interest DISPLAY “Interest Amount = “ Interest -``` - -では、DISPLAY文が「IF」の範囲外であることを、コンパイラにどのように通知すれば良いだろうか。 - -そこで用いるのが完結文である。 - -COBOL文は、恣意的長さの連続した文と、それに続くピリオド(.)で構成される。ピリオドは一連の文の範囲が終了することを示し、次のようにコーディングする必要がある。 -``` - IF Loan-Balance < 10000 - MULTIPLY Loan-Balance BY 0.04 GIVING Interest - ELSE - MULTIPLY Loan-Balance BY 0.045 GIVING Interest. - DISPLAY “Interest Amount = “ Interest -``` - -二番目のMULTIPLYの最後にピリオドがあるのがわかるだろうか。これによって「IF」の範囲が終了し、「Loan-Balance < 10000」という式の結果に関わらず、DISPLAYが実行されるようになる。 - - - -[ページトップへ](6-1-5.md) - diff --git a/automanual/old_delete/6-1-6.md b/automanual/old_delete/6-1-6.md deleted file mode 100644 index 57cf9db..0000000 --- a/automanual/old_delete/6-1-6.md +++ /dev/null @@ -1,47 +0,0 @@ - -[前へ](6-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-7.md) - -### 6.1.6. 動詞/END-動詞 - -1985年のCOBOL標準以前は、文の範囲が終了することを通知する唯一の方法としてピリオドが使われていた。しかし、これにはある問題があった。 - -``` - IF A = 1 - IF B = 1 - DISPLAY “A & B = 1” - ELSE - IF B = 1 - DISPLAY “A NOT = 1 BUT B = 1” - ELSE - DISPLAY “NEITHER A NOR B = 1”. -``` - -このコードの問題は、ELSEが「IF A = 1」文ではなく、「IF B = 1」文の方に働いてしまうということだ(COBOLコンパイラはコードのインデントを判別しないことを覚えておこう)。こういった問題によって、COBOL言語に次のような応急処置としての解決策`12`が追加された。 - -![alt text](Image/6-16-1.png) - -NEXT SENTENCE文([6.30](6-30.md)参照)は、「B = 1」条件が偽の場合、次に来るピリオドの後に続く最初の文に進むようCOBOLに通知する。 - -1985年のCOBOL標準と比べて、かなり優れた解決策が導入された。応急処置が必要だったCOBOL文(ステートメント)は「END-動詞」構文を用いることによって、他の文の範囲に介入することなく自らの範囲を終了させることができた。COBOL85コンパイラであれば、以上の問題に対して次の解決策が有効だった: - -![alt text](Image/6-16-2.png) - -しかし、この新たな文法によってピリオドを用いることは時代遅れとなり、今日のセグメント分割されたプログラムは、以下のようにコーディングされている。 - -![alt text](Image/6-16-3.png) - -COBOL(opensource COBOLも含む)では、手続き部の各段落に実行可能なコードがある場合、その段落には少なくとも一つの完結文が含まれている必要があるが、一般的なコーディング標準では、各段落の終わりにピリオドを一つコーディングするだけである。 - -COBOL標準では、範囲符としてピリオドを使用することは変わらず有効であるため、「END-動詞」の使用は任意としている。一部の文では、不要な「END-verb」範囲符が定義されている。`13` - -既存のコードをopensource COBOLに書き込む場合は、コードが使う可能性がある言語およびコーディング標準に対応できるといった便利な機能がある。ただし、新たにopensource COBOLプログラムを作成する場合は、「END-動詞」構文を忠実に用いることを強く勧める。 - ---- -`12` 例題のコードを「IF A = 1 AND B = 1」に変更すれば済む話ではあるのだが、ここでは私の主張を述べたいがために、あえて例のような表記にしている。 - -`13` 例えばSTRING([6.43](6-43.md))とUNSTRING([6.49](6-49.md))には、範囲符が必要なステートメントにオプションを導入するといった将来的な標準に向けての計画はあるのだろうか? - - - -[ページトップへ](6-1-6.md) - diff --git a/automanual/old_delete/6-1-7.md b/automanual/old_delete/6-1-7.md deleted file mode 100644 index 8f8d647..0000000 --- a/automanual/old_delete/6-1-7.md +++ /dev/null @@ -1,24 +0,0 @@ - -[前へ](6-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-1.md) - -### 6.1.7. 特殊レジスタ - -opensource COBOLには、他のCOBOL方言と同様に、データ部で実際に定義しなくても、プログラマが自動的に使用できる多数のデータ項目が含まれている。COBOLでは、レジスタや特殊レジスタなどの項目を参照する。opensource COBOLプログラムで使用できる特殊レジスタは次のとおりである。 - -表6-15-特殊レジスタ - -| レジスタ名 |暗黙のCOBOL PIC/USAGE句14 |使用方法 | -| :--- | :--- |:--- | -| LINAGE-COUNTER | BINARY-LONG SIGNED | このレジスタのオカレンスは、LINAGE句を持つSELECTで指定された各ファイルに存在する([5.1](5-1.md#51-ファイル記述)を参照)。FDにLINAGE句があるファイルが複数ある場合、このレジスタへの明示的な参照には修飾が必要である(「OFファイル名」を使用)。
このレジスタの値は、ページ本体内の現在の論理行番号になる(LINAGE句が論理ページを構成する方法については[5.1](5-1.md#51-ファイル記述)を参照)。
***このレジスタの内容は変更してはいけない。*** | -| NUMBER-OF-CALL-PARAMETERS | BINARY-LONG SIGNED | このレジスタには、サブプログラムに渡される引数の数が含まれている。メインプログラムで参照されると、その値はゼロになる。
同じデータを取得する別の方法については、[8.3.1.9](8-3-1.md#8319-call-cnarg-using-arg-count-result)のC$NARG組み込みサブルーチンのドキュメントを参照。 | -| RETURN-CODE | BINARY-LONG SIGNED | このレジスタは、数値データ項目を提供する。サブルーチンは、それCALLしたプログラムに制御を戻す前に値をMOVEしたり、メインプログラムがオペレーティングシステムに制御を返す前に値をMOVEしたりすることができる。
ほとんどの組み込みサブルーチン([8.3](8-3-1.md))が、このレジスタを使用して値を返す。
これらの値は―規則により―RETURN-CODE値を設定したプログラムが実行しようとしていたプロセスの成功(通常は値0)または失敗(通常は0以外の値)を示すために使用される。 | -| SORT-RETURN| BINARY-LONG SIGNED| このレジスタは、RELEASE文またはRETURN文の成功または失敗のステータスを示すために使用される。成功の場合は値0が返り、値16が返ってきた場合は失敗を示す。RETURN文の「AT END」状態は、失敗とは見なされない。 | -| WHEN-COMPILED | See “Usage” | このレジスタには、プログラムがコンパイルされた日時が「mm/dd/yyhh.mm.ss」の形式で含まれている。返ってくるのは2桁の年のみであることに注意すること。 | - ---- -`14` PICTURE句またはUSAGE句の仕様の説明については[5.3](5-3.md)を参照。 - - - -[ページトップへ](6-1-7.md) - diff --git a/automanual/old_delete/6-1-8-1.md b/automanual/old_delete/6-1-8-1.md deleted file mode 100644 index 6764a0b..0000000 --- a/automanual/old_delete/6-1-8-1.md +++ /dev/null @@ -1,34 +0,0 @@ - -[前へ](6-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-1-8-2.md) - -### 6.1.8. ファイルへの同時アクセス制御 - -データファイルの操作は、COBOL言語の大きな強みの1つである。複数のプログラムが同じファイルに同時にアクセスしようとする可能性を対処するため、COBOL言語に組み込まれている機能がある。複数プログラムの同時アクセスは、ファイル共有とレコードロックの2つの方法で処理される。 - -すべてのopensource COBOL実装がファイル共有およびレコードロックオプションをサポートしているわけではない。それらが構築されたオペレーティングシステムと、特定のopensource COBOL実装が生成されたときに使用されたビルドオプションによって異なる。 - -#### 6.1.8.1. ファイル共有 - -opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 - -OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 - -ファイルへの同時アクセスをファイルレベルで制御するには、次の3つの方法がある。 - -| 共有オプション |効果 | -| :--- | :--- | -| ALL OTHER| あなたのプログラムがファイルを開いた後に、他のプログラムがファイルを開こうとしても制限されない。これはSHARING句が指定されなかったときの既定値である。 | -| NO OTHER| あなたのプログラムがファイルを使用している限り、他のどんなプログラムによる、どんなファイルアクセスも許可しない。他のプログラムによって行われたOPENの試行は、あなたがファイルを閉じるまでファイル状態コード37(「ファイルアクセスが拒否されました」)で失敗する([6.9](6-9.md)を参照)。 | -| READ ONLY | あなたがファイルを開いている間、他のプログラムがINPUTのためにファイルを開くことを許可する。他の目的でOPENを試行すると、ファイル状態コード37で失敗する。 | - -誰かが最初にファイルにアクセスし、ファイル共有を制限する共有オプションでファイルをOPENした場合、当然あなたのプログラムはアクセスに失敗する。 - ---- -`15` Windowsには「fcntl()」と同様の機能があるが、BDBパッケージはそれらの機能を利用するようにコーディングされていない。UNIXとWindowsの両方の同時アクセスルーチン(VBISAMなど)をサポートする高度なファイルI/Oパッケージの使用は、現在、著者によって調査中である。 - -`16` Apple ComputerのMacOS XオペレーティングシステムはUNIXのオープンソースバージョンに基づいているため、「fcntl()」のサポートが含まれている。 - - - -[ページトップへ](6-1-8-1.md) - diff --git a/automanual/old_delete/6-1-8-2.md b/automanual/old_delete/6-1-8-2.md deleted file mode 100644 index 874613b..0000000 --- a/automanual/old_delete/6-1-8-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-1-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-2.md) - -#### 6.1.8.2. レコードロック - -レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。 - -ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文([6.9](6-9.md))、UNLOCK文([6.48](6-48.md))、COMMIT文([6.10](6-10.md))、またはROLLBACK文([6.37](6-37.md))を実行するまでロックが有効である。 - -レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。 - -| レコードロック オプション |効果 | -| :--- | :--- | -| WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 | -| WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 | -| IGNORING LOCK
WITH IGNORE LOCK| レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。
左に示した2つのオプションは同義である。 | -| WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。
このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。
このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 | - - -使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って([8.2.4](8-2-4.md)を参照)レコードロックを使用できる。 - - - -[ページトップへ](6-1-8-2.md) - diff --git a/automanual/old_delete/6-10.md b/automanual/old_delete/6-10.md deleted file mode 100644 index 4801ebf..0000000 --- a/automanual/old_delete/6-10.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-11.md) - -## 6.10. COMMIT - -図6-37-COMMIT構文 - -![alt text](Image/6-37-Commit.png) - -COMMIT文は、現在開いているすべてのファイルに対してUNLOCKを実行する。 - -1. 詳細についてはUNLOCK([6.48](6-48.md))の章内で説明する。 - - - -[ページトップへ](6-10.md) - diff --git a/automanual/old_delete/6-11.md b/automanual/old_delete/6-11.md deleted file mode 100644 index 7097793..0000000 --- a/automanual/old_delete/6-11.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-10.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-12.md) - -## 6.11. COMPUTE - -図6-38-COMPUTE構文 - -![alt text](Image/6-38-Compute.png) - -COMPUTE文は、ADD、SUBTRACT、MULTIPLY、およびDIVIDE文といった、厄介で混乱を招く恐れのある構文を使用する代わりに、たった一文で複雑な算術演算を簡単に実行することができる。 - -1. 単語のEQUALと等号(=)は同意義のものとして扱うことができる。 - -2. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5.1](6-5-1.md)を参照)。 - - - -[ページトップへ](6-11.md) - diff --git a/automanual/old_delete/6-12.md b/automanual/old_delete/6-12.md deleted file mode 100644 index 20162b1..0000000 --- a/automanual/old_delete/6-12.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](6-11.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-1.md) - -## 6.12. CONTINUE - -図6-39-CONTINUE構文 - -![alt text](Image/6-39-Continue.png) - -CONTINUE文は動作がないためアクションを実行しない。 - -1. CONTINUE文は、IF文([6.23](6-23.md))とともに、まだ必要とされていないか、または未設計の条件付きで実行されるコードのプレースホルダーとして多用される。次の二つの文は同等である。CONTINUE文を使うことで、今後コード挿入の必要があるかもしれない場所をマークする。 - - ![alt text](Image/6-12-1.png) - - 上記のようなコーディングは、一般的に個人の嗜好やウェブサイトのコーディング基準の問題である。オブジェクトコード自体に違いはないため、実行時の動作効率には関係しない(「コーディングが効率的であるか」の一点だけ)。 - -2. CONTINUEのもう一つのIF文の使用法は、IF文でコーディングされた条件式でのNOTの使用を回避することで、これも個人的および/またはウェブサイト標準における問題である。例を以下に示す。 - - ![alt text](Image/6-12-2.png) - -COBOL(opensource COBOLを含む)では条件式が省略形で処理されるため、左側の例の条件式は短縮版となっている。 - - IF Action-Flag NOT = ‘I’ AND Action-Flag NOT = ‘U’ - -プログラマの多くは、「IF」を(誤って)「`IF Action-Flag NOT = ‘I’ OR ‘U’`」としてコーディングしていた。これにより、実行時に問題が発生することは避けられない。 - -従ってプログラマは、少し長くても右側の例のコードの方が読みやすいと考えている。 - - - -[ページトップへ](6-12.md) - diff --git a/automanual/old_delete/6-13-1.md b/automanual/old_delete/6-13-1.md deleted file mode 100644 index 7675b44..0000000 --- a/automanual/old_delete/6-13-1.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](6-12.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-13-2.md) - -## 6.13. DELETE - -### 6.13.1. DELETE文の書き方1 ― DELETE - -図6-40-DELETE構文(レコードの削除) - -![alt text](Image/6-40-Delete.png) - -DELETE文は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルから論理的にレコードを削除する。 - -1. ACCESS MODE IS SEQUENTIALであるファイルには、INVALID KEY句とNOT INVALID KEY句を指定できない。 - -2. INVALID KEY句には、DELETEの失敗に対応できる機能があり、NOT INVALID KEY句は、DELETEの成功時に実行するアクションをプログラムが指定する機能を持つ。 - -3. ORGANIZATIONのファイル名は、RELATIVEまたはINDEXEDでなければならない。 - -4. SEQUENTIALアクセスモードのRELATIVEまたはINDEXEDファイルは、DELETE文の実行前にファイル名に対して実行された最後の入出力文が、正常に実行されたREAD文である必要があり、削除されるレコードを識別している。 - -5. RELATIVEファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、相対レコード番号がRELATIVEKEYとして指定された現在の項目値である。 - -6. INDEXEDファイルのACCESS MODEがRANDOMまたはDYNAMICの場合、削除されるレコードは、主キーがRECORD KEYとして指定された現在の項目値である。 - -7. RELATIVE KEYまたはRECORD KEYの値によって削除するように指定されたレコードが、アクセスモードのRANDOMファイルまたはDYNAMICファイルに存在しない場合、INVALID KEY条件によってINVALID KEY句を介して処理できる。これは4項に記述したように、ACCESS MODE SEQUENTIALファイルには存在しない条件である。ACCESS MODE SEQUENTIALファイルでのDELETE文の失敗は、DECLARATIVESを介してのみ「処理」することが可能である。 - - - -[ページトップへ](6-13-1.md) - diff --git a/automanual/old_delete/6-13-2.md b/automanual/old_delete/6-13-2.md deleted file mode 100644 index 2859dee..0000000 --- a/automanual/old_delete/6-13-2.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-13-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-1.md) - -### 6.13.2. DELETE文の書き方2 ― DELETE FILE - -図6-41-DELETE FILE構文(ファイルの削除) - -![alt text](Image/6-41(delete).png) - -DELETE FILE文は、ディスクファイルを削除する。 - -1. ファイル名-1のファイルは、ディスクファイルでなければならず、DELETE FILE文を実行する前に閉じていなければならない。 - -2. ファイル名-1がVBISAMの場合は、拡張子が「.dat」と「.idx」のファイルを削除する。 - -3. DELETE FILE文の実行によって、ファイル名-1に関連するファイルステータス値が更新される。 - - - -[ページトップへ](6-13-2.md) - diff --git a/automanual/old_delete/6-14-1.md b/automanual/old_delete/6-14-1.md deleted file mode 100644 index b123516..0000000 --- a/automanual/old_delete/6-14-1.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-13-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-2.md) - -## 6.14. DISPLAY - -### 6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE - -図6-42-DISPLAY構文(UPON CONSOLE) - -![alt text](Image/6-42-Display.png) - -プログラムが開始されたシェルまたはコンソールウィンドウに、指定された一意名の内容や定数値を表示する。テキストは、次に使用可能な行の1列目から表示される。すべての画面行に既にテキストが表示されていた場合、画面は1行上にスクロールし、テキストは最後の行に表示される。 - -1. UPON句が指定されていない場合、UPON CONSOLEが指定されたとみなす。 - -2. 指定する呼び名は、CONSOLE、CRT、PRINTER、またはこれらのうち1つに関連する特殊名段落内のユーザ定義の呼び名である必要がある([4.1.4](4-1-4.md)を参照)。このようなニーモニックはすべて、プログラムの実行元であるシェル(UNIX)またはコンソールウィンドウ(Windows)といった同じ宛先を指定します。 - -3. NO ADVANCING句を使うと、コンソールディスプレイの最後に追加される通常の行頭復帰/改行順序が抑制される。 - - - -[ページトップへ](6-14-1.md) - diff --git a/automanual/old_delete/6-14-2.md b/automanual/old_delete/6-14-2.md deleted file mode 100644 index 0aa0b25..0000000 --- a/automanual/old_delete/6-14-2.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-14-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-3.md) - -### 6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス - -図6-43-DISPLAY構文(コマンドライン引数へのアクセス) - -![alt text](Image/6-43-Display.png) - -後続のACCEPTによって取得されるコマンドライン引数番号を指定したり、コマンドライン引数自体に新しい値を指定することができる。 - -1. DISPLAY ・・・ UPON COMMAND-LINEを実行すると、後続のACCEPT ・・・ FROM COMMAND-LINE文に影響する(その後にDISPLAYされた値が返される)が、後続のACCEPT ・・・ FROM ARGUMENT-VALUE文には影響せず、元のプログラム実行パラメータを返す。 - - - -[ページトップへ](6-14-2.md) - diff --git a/automanual/old_delete/6-14-3.md b/automanual/old_delete/6-14-3.md deleted file mode 100644 index 3c2f94b..0000000 --- a/automanual/old_delete/6-14-3.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-14-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-4.md) - -### 6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定 - -図6-44-DISPLAY構文(環境変数へのアクセス/設定) - -![alt text](Image/6-44-Display.png) - -環境変数を作成または変更するために使われる。 - -1. 環境変数を作成または変更するには、二つのDISPLAY文が必須となり、次の手順で実行する必要がある。 - - DISPLAY - environment-variable-name UPON ENVIRONMENT-NAME - END-DISPLAY - DISPLAY - environment-variable-name UPON ENVIRONMENT-VALUE - END-DISPLAY - - -2. opensource COBOLプログラム内から作成または変更された環境変数は、そのプログラムによって生成されたサブシェルプロセス(つまり、CALL“SYSTEM”)では使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウからは認識されない。 - -3. DISPLAYの代わりにSET ENVIRONMENT([6.39.1](6-39-1.md))を使用して環境変数を設定する方がはるかに簡単である。 -  - - -[ページトップへ](6-14-3.md) - diff --git a/automanual/old_delete/6-14-4.md b/automanual/old_delete/6-14-4.md deleted file mode 100644 index 0369666..0000000 --- a/automanual/old_delete/6-14-4.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-14-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-14-5.md) - -### 6.14.4. DISPLAY文の書き方4 ― 画面データ - -図6-45-DISPLAY構文(画面データ) - -![alt text](Image/6-45-Display.png) - -形式化された画面にデータを表示する。 - -1. 一意名-1が画面節で定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)も画面節の定義から取得され、DISPLAY文で指定されたものはすべて無視される。画面節で定義されていないデータ項目を表示する場合のみ、ATおよびWITHオプションを使用する。 - -2. AT句では、データが画面に表示される前に、カーソルを画面上の特定の場所に配置することができる。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. SCROLLオプションについては、[6.4.4](6-4-4.md)(ACCEPT文の書き方4 ― 画面データの取得)で説明している。 - -4. WITHオプションについては、[5.6](5-6.md)(画面記述)で説明している。 - - - -[ページトップへ](6-14-4.md) - diff --git a/automanual/old_delete/6-14-5.md b/automanual/old_delete/6-14-5.md deleted file mode 100644 index f9493e1..0000000 --- a/automanual/old_delete/6-14-5.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-14-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-1.md) - -### 6.14.5. DISPLAY文の例外処理 - -図6-46-DISPLAY構文(例外処理) - -![alt text](Image/6-46-Display.png) - -DISPLAY文のすべての書き方で使用可能なEXCEPTION句とNOT EXCEPTION句を使うことで、DISPLAY文の失敗、成功時のそれぞれに実行されるコードを指定することができる。DISPLAY文ではリターンコードやステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となっている。 - - - -[ページトップへ](6-14-5.md) - diff --git a/automanual/old_delete/6-15-1.md b/automanual/old_delete/6-15-1.md deleted file mode 100644 index bde2aa5..0000000 --- a/automanual/old_delete/6-15-1.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-14-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-2.md) - -## 6.15. DIVIDE - -### 6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO - -図6-47-DIVIDE INTO構文 - -![alt text](Image/6-47-Divide.png) - -指定された値を一つ以上のデータ項目に分割し、それらの各データ項目を一意名-1または定数-1値で割った結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -4. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目で使用可能な数を超える桁数が必要な場合も同様である。 - - - -[ページトップへ](6-15-1.md) - diff --git a/automanual/old_delete/6-15-2.md b/automanual/old_delete/6-15-2.md deleted file mode 100644 index 6517c77..0000000 --- a/automanual/old_delete/6-15-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-3.md) - -### 6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING - -図6-48-DIVIDE INTO GIVING構文 - -![alt text](Image/6-48-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - - - -[ページトップへ](6-15-2.md) - diff --git a/automanual/old_delete/6-15-3.md b/automanual/old_delete/6-15-3.md deleted file mode 100644 index 9d61f66..0000000 --- a/automanual/old_delete/6-15-3.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-4.md) - -### 6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING - -図6-49-DIVIDE BY GIVING構文 - -![alt text](Image/6-49-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つ以上の受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは破棄される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - - - -[ページトップへ](6-15-3.md) - diff --git a/automanual/old_delete/6-15-4.md b/automanual/old_delete/6-15-4.md deleted file mode 100644 index f904f6e..0000000 --- a/automanual/old_delete/6-15-4.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-15-5.md) - -### 6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER - -図6-50-DIVIDE INTO REMAINDER構文 - -![alt text](Image/6-50-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)に分割し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - - - -[ページトップへ](6-15-4.md) - diff --git a/automanual/old_delete/6-15-5.md b/automanual/old_delete/6-15-5.md deleted file mode 100644 index d923748..0000000 --- a/automanual/old_delete/6-15-5.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-15-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-16.md) - -### 6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER - -図6-51-DIVIDE BY REMAINDER構文 - -![alt text](Image/6-51-Divide.png) - -指定された値(一意名-1/定数-1)を別の値(一意名-2/定数-2)で除算し、一つの受け取りデータ項目(一意名-3 ・・・)の内容を除算結果に置き換える。除算の余りは一意名-4に格納される。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3と一意名-4は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化されており、ADD文で使われている同名義の句と同様に動作する([6.5](6-5-1.md)を参照)。 - -5. 一意名-1/定数-1の値がゼロの時、SIZE ERROR条件が発生する。除算の結果、小数点の左側に、受け取り項目での使用可能な数を超える桁数が必要な場合も同様である。 - - - -[ページトップへ](6-15-5.md) - diff --git a/automanual/old_delete/6-16.md b/automanual/old_delete/6-16.md deleted file mode 100644 index c61fee4..0000000 --- a/automanual/old_delete/6-16.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-15-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-17.md) - -## 6.16. ENTRY - -図6-52-ENTRY構文 - -![alt text](Image/6-52-Entry.png) - -ENTRY文は、サブルーチンが予期する引数とともに、サブルーチンへの代替記述項ポイントを定義するために使用する。 - -1. ネストされたサブプログラムでENTRY文を使うことはできない([2.1](2-1.md#21-ネストされたユーザプログラム)を参照)。 - -2. ENTRY文のUSING句は、サブルーチンを呼び出すCALL文のUSING句と一致する。 - -3. 定数-1の値によって、サブルーチンの記述項ポイント名を指定する。ENTRY文で指定されているように、(大文字と小文字の使用に関して)CALL文で正確に指定する必要がある。 - - - -[ページトップへ](6-16.md) - diff --git a/automanual/old_delete/6-17.md b/automanual/old_delete/6-17.md deleted file mode 100644 index 6308809..0000000 --- a/automanual/old_delete/6-17.md +++ /dev/null @@ -1,59 +0,0 @@ - -[前へ](6-16.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-18.md) - -## 6.17. EVALUATE - -図6-53-EVALUATE構文 - -![alt text](Image/6-53-Evaluate.png) - -EVALUATE文では、さまざまな状況に合わせて実行する必要がある処理を定義する。 - -1. 予約語のTHRUとTHROUGHは同意義のものとして扱うことができる。 - -2. THROUGHを使う場合、THROUGH句に関連する値(算術式-n、一意名-n、および/または定数-n)は同じクラスである必要がある。例: - - - Legal: Not Legal: - - (3 + Years-Of-Service) THROUGH 99 0 THRU “A” - - “A” THRU “Z” Last-Name THRU Zip-Code(Assuming Last-Name is - - X’00’ THRU X’1F’ PIC X and Zip-Code is PIC 9) - - 15.7 THROUGH 19.4 - -3. EVALUATE文の後、最初のWHEN句の前に指定された値は選択主体と呼ばれ、各WHEN句の後に指定された値は選択対象と呼ばれる。 - -4. 各WHEN句には、EVALUATE文の選択主体と同じ数の選択対象が必要である。 - -5. 各EVALUATE句の選択主体は、選択対象に対応する各WHEN句と等しいかどうかテストされる。 - -6. 5項のテストで等しいと判断され、結果がTRUEである最初のWHEN句では、命令文が実行される。 - -7. 5項のテストでWHEN句との同等性はなく、結果がTRUEである場合、WHEN OTHER句に関連する命令文(命令文-2)が実行される。WHEN OTHER句がない場合、制御はEVALUATE文に続く次の文へ移る。 - -8. WHENまたはWHEN OTHER句の命令文が実行されると、制御はEVALUATE文に続く次の文へ移る。 - -9. ANYの選択対象を使うと、ANYと一致する選択主体と自動的に合致する。 - -ここで、EVALUATE文の利便性がわかる事例を示す。一日の平均残高[ADB]に基づいて口座に支払われる利息を計算するプログラムが開発され、プログラムは以下のように定義されている。 - -1. 平均残高が1000ドル未満の場合、有利子当座預金口座には利息がつかない。平均残高が1,000ドルから1,499.99ドルの有利子当座預金口座はその1%、1500ドル以上はその1.5%を利子として受け取る。 - -2. 定期預金口座は、平均残高が10,000ドルまでは1.5%、10,000ドル以上は1.75%の利息が適用される。 - -3. プラチナ普通預金口座は、平均残高に関係なく2%の利子を受け取る。 - -4. 上記以外の種類の口座には利子が適用されない。 - -これらのルールを適用した「EVALUATE」実装をテストするためにopensource COBOLプログラムのサンプルを次に示す。挿入図はプログラムからの出力結果である。 - -図6-54-EVALUATE文のデモプログラム -![alt text](Image/6-54-Evaluate.png) - - - -[ページトップへ](6-17.md) - diff --git a/automanual/old_delete/6-18.md b/automanual/old_delete/6-18.md deleted file mode 100644 index a88fb4c..0000000 --- a/automanual/old_delete/6-18.md +++ /dev/null @@ -1,42 +0,0 @@ - -[前へ](6-17.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-19.md) - -## 6.18. EXIT - -図6-55-EXIT構文 - -![alt text](Image/6-55-Exit.png) - -EXIT文は多様な目的に使用できる文である。一連のプロシージャに共通のエンドポイントを提供したり、インラインPERFORM、段落、または節を終了したり、呼び出されたプログラムの論理的な終了を示す。 - -1. 「EXIT」文をオプションの句を指定せずに使用すると、一連のプロシージャに共通の「GO TO」エンドポイントを提供する。 - - 図6-56-EXIT文
- ![alt text](Image/6-56-Exit.png) - -2. EXIT文を使う場合、それを扱う段落内で唯一の文である必要がある。 - -3. EXIT文は操作不要である(CONTINUE文とよく似ている)。 - -4. EXIT PARAGRAPH文は、現在の段落の終わりを過ぎた時点に制御を移すが、EXIT SECTION文は、現在の節の最後の段落を過ぎた時点に制御を移す。 - - EXIT PARAGRAPHまたはEXIT SECTIONが手続き型PERFORM([6.32.1](6-32-1.md))の範囲内の段落にある場合、制御はPERFORMに戻され、TIMES、VARYING、および/またはUNTIL句での評価が行われる。EXIT PARAGRAPHまたはEXIST SECTIONが手続き型PERFORMの範囲外にある場合、制御は次の段落(EXIT PARAGRAPH)または節(EXIT SECTION)の最初の実行可能な文に移る。図6-55は、EXIT PARAGRAPH文を使って、GO TOなしで図6-54の例をコーディングする方法を示している。 - - 図6-57-EXIT PARAGRAPH文
- ![alt text](Image/6-57-Exit.png) - -5. EXIT PERFORMおよびEXIT PERFORM CYCLE文は、インラインPERFORM文([6.32.2](6-32-2.md))と組み合わせて使うことを目的としている。 - -6. EXIT PERFORM CYCLEは、インラインPERFORMの現在の繰り返しを終了し、別のサイクルを実行する必要があるかどうかを判断するために、TIMES、VARYING、および/またはUNTIL句を制御する。 - -7. EXIT PERFORMは、インラインPERFORMを完全に終了し、PERFORMに続く最初の文に制御を移す。図6-58は、図6-56の例に対する最終変更を示していて、インラインPERFORM文とEXIT PERFORM文を使うことによって処理を確実に簡素化できる。 - - 図6-58-EXIT PERFORM文
- ![alt text](Image/6-58-Exit.png) - -8. 最後に、EXIT PROGRAM文は、サブルーチン(つまり、別のプログラムによってCALLされているプログラム)の実行を終了し、CALLに続く文のCALLする側のプログラムに戻る。メインプログラムによって実行された場合は、EXIT PROGRAM文は機能しない。COBOL2002標準は、COBOL言語に共通の拡張を行った。それがGOBACK文([6.21](6-21.md))であり、EXIT PROGRAMの代わりとして検討すべきである。 - - - -[ページトップへ](6-18.md) - diff --git a/automanual/old_delete/6-19.md b/automanual/old_delete/6-19.md deleted file mode 100644 index 0d2cf15..0000000 --- a/automanual/old_delete/6-19.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-18.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-20.md) - -## 6.19. FREE - -図6-59-FREE構文 - -![alt text](Image/6-59-Free.png) - -FREE文は、ALLOCATE文([6.6](6-6.md))によってプログラムに割り当てられていたメモリを解放する。 - -1. 一意名-1は、USAGE POINTERデータ項目またはBASED属性を持つ01レベルのデータ項目である必要がある。 - -2. 一意名-1がUSAGE POINTERデータ項目であり、有効なアドレスが含まれている場合、FREE文はポインタが参照するメモリブロックを解放する。更に、アドレスを提供するためにポインタが使用されたBASEDデータ項目は、基準でなくなり使えなくなる。一意名-1に有効なアドレスが含まれていなかった場合、アクションは実行されない。 - -3. 一意名-1がBASEDデータ項目であり、そのデータ項目が現在の基準となっている場合(つまり、現在メモリが割り当てられている場合)、メモリが解放され、一意名-1は基準でなくなり、使えなくなる。一意名-1が基準になっていない場合、アクションは実行されない。 - -4. ADDRESS OF句は、FREE文に特別な関数を追加しない。 - - - -[ページトップへ](6-19.md) - diff --git a/automanual/old_delete/6-2.md b/automanual/old_delete/6-2.md deleted file mode 100644 index 04d8328..0000000 --- a/automanual/old_delete/6-2.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](6-1-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-3.md) - -## 6.2. 記述形式 - -図6-16-記述形式構文 - -![alt text](Image/6-16.png) - -手続き部の最初の(オプション)セグメントは、「宣言」と呼ばれる特別な領域となっている。この領域内では、特定のイベントが発生した場合のみ実行される特殊な「トラップ」としての処理ルーチンを定義できる。これについては次の[6.3](6-3.md)で説明する。 - -手続き型および論理型プログラムが書かれている節や段落は「宣言」に従う。手続き部は独自の節や段落を作成できるCOBOL部門の一つである。 - -1. USING句とRETURNING句は、サブルーチンとして機能しているプログラムへの引数を定義する。これらの句によって指定されたすべての一意名は、USING句および、またはRETURNING句が表示されるプログラムの連絡節で定義する必要がある。 - -2. CHAINING句は、CHAIN文を介した他のプログラムによって呼び出されるプログラム内でのみ使うことができる。CHAINING句で指定された一意名は、CHAINING句が表示されるプログラムの連絡節で定義する必要がある。このCHAINING句はopensource COBOLにおいては構文的に使用可能となってはいるが、それ以外では機能しないため、CHAIN文を使おうとした場合は拒否される。 - -3. ユーザ定義関数(現在opensource COBOLでは使用不可)での使用を目的としているが、RETURNING句は、値が返されるサブプログラムへの引数を指定し、それを文書化する手段として用いることができる。 - -4. BY REFERENCE句は、プログラムの引数に対応するデータ項目のアドレスがプログラムに渡されることを示す。このプログラムでは、BY REFERENCE引数の内容を変更することができ、BY REFERENCEは、すべてのUSING/CHAINING引数において、BY REFERENCE、BY VALUEが指定されなかったときの既定値である(ここでCHAINING引数は必ずBY REFERENCEでなければならない)。 - -5. BY VALUE句では、引数に対応する呼び出し側プログラムからのデータ項目の読み込み専用コピーがプログラムに引き渡される。BY VALUE引数の内容は、サブプログラムによって変更することはできない。 - -6. USING句のメカニズムは、COBOLの一部のメインフレーム実装の場合と同様に、opensource COBOLプログラムがコマンドライン引数を取得することではない。プログラムのコマンドライン引数取得方法については、この後記述するACCEPT文が参考になる。 - -7. SIZE句は、引き渡された引数のサイズ(バイト単位)を指定し、SIZE IS AUTO句(既定値)では、呼び出し側プログラムの項目サイズに基づいて、引数のサイズが自動で決定される。残りのSIZEオプションでは、特定のサイズを強制的に決定でき、SIZE IS DEFAULTは、UNSIGNED(符号なし) SIZE IS 4と同様のサイズを示す。 - - - -[ページトップへ](6-2.md) - diff --git a/automanual/old_delete/6-20.md b/automanual/old_delete/6-20.md deleted file mode 100644 index 07d4423..0000000 --- a/automanual/old_delete/6-20.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-19.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-21.md) - -## 6.20. GENERATE - -図6-60-GENERATE構文 - -![alt text](Image/6-60-Generate.png) - -GENERATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - - - -[ページトップへ](6-20.md) - diff --git a/automanual/old_delete/6-21.md b/automanual/old_delete/6-21.md deleted file mode 100644 index 28e1940..0000000 --- a/automanual/old_delete/6-21.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-20.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-1.md) - -## 6.21. GOBACK - -図6-61-GOBACK構文 - -![alt text](Image/6-61-Goback.png) - -GOBACK文は、実行中のプログラムを論理的に終了するために使用する。 - -1. サブルーチン(つまり、CALLされたプログラム)内で実行された場合、GOBACKは制御をCALLに続く文のCALLする側のプログラムに戻す。 - -2. メインプログラム内で実行された場合、GOBACKはSTOP RUN文として機能する([6.42](6-42.md))。 - - - -[ページトップへ](6-21.md) - diff --git a/automanual/old_delete/6-22-1.md b/automanual/old_delete/6-22-1.md deleted file mode 100644 index e494689..0000000 --- a/automanual/old_delete/6-22-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-21.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-22-2.md) - -## 6.22. GO TO - -### 6.22.1. GO TO文の書き方1 ― GO TO - -図6-62-GOTO構文 - -![alt text](Image/6-62-Goto.png) - -プログラム内の制御を指定されたプロシージャ名へ無条件に移す。 - -1. 指定されたプロシージャ名がSECTIONの場合、制御はその節の最初の段落に移る。 - - - -[ページトップへ](6-22-1.md) - diff --git a/automanual/old_delete/6-22-2.md b/automanual/old_delete/6-22-2.md deleted file mode 100644 index 4fdce18..0000000 --- a/automanual/old_delete/6-22-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-22-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-23.md) - -### 6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON - -図6-63-GOTO DEPENDING ON構文 - -![alt text](Image/6-63-Goto.png) - -文で指定された一意名の数値に応じて、指定された手続き名のいずれかに制御を移す。 - -1. 指定された一意名-1のPICTUREおよび/またはUSAGE句は、数値であり、編集できない、できれば符号なし整数データ項目として定義するようなものでなければならない。 - -2. 一意名-1の値が1の場合、制御は最初に指定された手続き名に移され、値が2の場合、制御は2番目の手続き名やその他に移る。 - -3. 一意名-1の値が1未満であるか、GO TO文で指定された手続き名の総数を超えている場合、制御はGO TOに続く次の文に移る。 - -4. 次の表は、実際の適用状況下でGO TO DEPENDING ONをどのように使うかを示し、IFとEVALUATEの二つと比較している。 - - 図6-64-GOTO DEPENDING ON vs IF vs EVALUATE - - ![alt text](Image/6-64-Goto.png) - - 「現代のプログラミング哲学」でEVALUATE文が好まれるのは間違いない。興味深いことに、IF文とEVALUATE文によって生成されたコードは実質的に同じである。新しいものは、必ずしも違いを意味するわけではなく、より良いと見なされる場合もある。 - - - -[ページトップへ](6-22-2.md) - diff --git a/automanual/old_delete/6-23.md b/automanual/old_delete/6-23.md deleted file mode 100644 index 0a7ad12..0000000 --- a/automanual/old_delete/6-23.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-22-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-24.md) - -## 6.23. IF - -図6-65-IF構文 - -![alt text](Image/6-65-If.png) - -IF文は、一つの命令文を条件付きで実行するため、または条件式のTRUE/FALSE値に基づいて二つある命令文のうち一つを選択するために使われる。 - -1. 条件式がTRUEと評価された場合、ELSE句が存在するかどうかに関係なく、命令文-1が実行される。命令文-1が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -2. ELSE句が存在し、条件式-1がFALSEと評価された場合、(その場合にのみ)命令文-2が実行される。命令文-2が実行されると、制御はEND-IF句に続く最初の文、END-IF句がない場合は命令文に続く最初の文に移る。 - -3. ピリオド(.)とEND-IF文について、IF文の範囲を終了できる方法が互いにどのように類似しているか、または異なっているかを、[6.1.5](6-1-5.md)で例を挙げて説明している。 - - - -[ページトップへ](6-23.md) - diff --git a/automanual/old_delete/6-24.md b/automanual/old_delete/6-24.md deleted file mode 100644 index 3610a40..0000000 --- a/automanual/old_delete/6-24.md +++ /dev/null @@ -1,43 +0,0 @@ - -[前へ](6-23.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-25.md) - -## 6.24. INITIALIZE - -図6-66-INITIALIZE構文 - -![alt text](Image/6-66-Initialize.png) - -INITIALIZE文は、一意名-1として指定された基本項目、または一意名-1として指定された集団項目に従属する基本項目を特定の値に設定する。 - -1. これによって新しい値に設定できるデータ項目のリストは次の通りである。 - - - 一意名-1として指定されたすべての基本項目。 - - - 一意名-1として指定され、集団項目に従属して定義されたすべての基本項目。以下の例外を除く: - - - USAGE INDEX項目は除外される。 - - - 定義の一部としてREDEFINES句が含まれる項目は除外され、これに従属する項目も除外される。ただし、一意名-1の項目自体にREDEFINES句が含まれている場合や、REDEFINES句を含む項目に従属している場合がある。 - - 以上は受け取り項目のリストである。 - -2. 一意名-1項目の定義内、また、一意名-1項目に従属する項目にOCCUR DEPENDING ON句([5.3](5-3.md)参照)を含めることはできない。 - -3. オプションとしてWITH FILLER句が存在する場合、FILLER項目は受け取り項目のリストに入る(そうでない場合は除外となる)。 - -4. TO VALUE句またはREPLACING句が指定されていない場合、DEFAULT句が指定されたとみなす。 - -5. オプションとしてREPLACING句が指定されている場合、INITIALIZE文が構文的にコンパイラに受け入れられるためには、送信項目のMOVE文が、すべての受け取り項目に対して有効でなければならない。 - -6. 各受け取り項目の初期化は、以下のルールに従って行われる。 - - - TO VALUE句が存在する場合、その受け取り項目はTO VALUE句にリストされているデータカテゴリに含まれているか。含まれている場合、データ項目はそのVALUE句の値に初期化される。 - - - REPLACING句が存在する場合、その受け取り項目はREPLACING句にリストされているデータカテゴリに含まれているか。含まれている場合、受け取り項目は指定された送信項目の値に初期化される。 - - - DEFAULT句が存在する場合は、項目値をそのUSAGEに適当な値に初期化する(英数字と数値は空白、ポインタとプログラムポインタはNULL、すべての数値と数値編集はゼロに初期化される)。 - - - -[ページトップへ](6-24.md) - diff --git a/automanual/old_delete/6-25.md b/automanual/old_delete/6-25.md deleted file mode 100644 index 197bbc3..0000000 --- a/automanual/old_delete/6-25.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-24.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-26.md) - -## 6.25. INITIATE - -図6-67-INITIATE構文 - -![alt text](Image/6-67-Initiate.png) - -INITIATE文は、opensource COBOLコンパイラによって構文的には認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、機能しない。 - - - -[ページトップへ](6-25.md) - diff --git a/automanual/old_delete/6-26.md b/automanual/old_delete/6-26.md deleted file mode 100644 index be01541..0000000 --- a/automanual/old_delete/6-26.md +++ /dev/null @@ -1,88 +0,0 @@ - -[前へ](6-25.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-27.md) - -## 6.26. INSPECT - -図6-68-INSPECT構文 - -![alt text](Image/6-68-Inspect.png) - -INSPECT文は、文字列に対してさまざまなカウントまたはデータ変更操作を実行するために使われる。 - -1. 一意名-1および定数-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-1は集団項目の可能性がある。 - -2. 定数-1を指定すると、REPLACING句またはCONVERTING句が使用できなくなる。 - -3. 混同や衝突を避けるために、TALLYING、REPLACING、およびCONVERTING句は、コーディングされた順番で実行される。 - -INSPECT文のルールは、指定された句によって異なる。 - -**TALLYING句の場合:** - -TALLYING句は、一意名-1または定数-1内の文字列数をカウントするために用いられる。 - -1. 一意名-2は編集不可の数値項目でなければならない。 - -2. 一意名-3および定数-2は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-3は集団項目の可能性がある。 - -3. 一意名-2は検索対象のターゲット文字列が一意名-1で見つかるたびに、1ずつ増加する。ターゲット文字列は以下のようになる。 - - a. CHARACTERSオプションが使用されている場合は1文字。基本的に合計文字数をカウントする。ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-3または定数-2のオカレンス。 - -4. 通常は、定数-1または一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -5. ターゲット文字列が検出されて一致すると、INSPECT TALLYINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複してカウントしてしまうことを防ぐことができる。右の例は、「XX」オカレンスを検索するINSPECT TALLYINGのオブジェクトとして使われる値が「XXXXXXXX」である8文字の項目を示す。 - - 図6-69-INSPECT文TALLYING句の例
- ![alt text](Image/6-69-Inspect.png) - - 結果として、4つの「XX」オカレンスのみが見つかりました。文字位置2-3、4-5、および6-7も「XX」オカレンスではあるが、他のオカレンスと重複しているためカウントされない - -**REPLACING句の場合:** - -REPLACING句は、文字列内の部分文字列を、同じ長さで内容の異なるものに置き換えるために用いられる。1つ以上の部分文字列を、長さも内容も異なる他の部分文字列に置き換える必要がある場合は、SUBSTITUTE組み込み関数([6.1.7](6-1-7.md)参照)を使用すると良い。 - -1. 一意名-4および定数-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-4は集団項目の可能性がある。 - -3. 一意名-5および定数-4は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -4. 一意名-4と定数-3、一意名-5と定数-4は同じ長さでなければならない。 - -5. 「BY」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「BY」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -6. ターゲット文字列は次のように識別できる: - - a. CHARACTERSオプションが使用されている場合は、置換文字列の長さと同じ文字順序。 - - b. ALL、すべてのLEADING、FIRSTのみまたはすべてのTRAILINGの一意名-4または定数-3のオカレンス。 - -7. 通常は、一意名-1の文字列全体がスキャンされる。ただし、この動作はオプションのBEFORE \| AFTER句を用いて変更することができ、スキャン対象の文字列で見つかったデータに基づいて開始点や終了点を指定できる。 - -8. ターゲット文字列が検出されて置き換えられると、INSPECT REPLACINGプロセスは検出された文字列の最後から再開される。これにより、対象の文字列を重複して置き換えてしまうことを防ぐことができ、TALLYINGの場合と非常に似ている。 - -**CONVERTING句の場合:** - -CONVERTING句は、データ項目に対して単アルファベット置換を実行するために用いられる。 - -1. 一意名-5および定数-6は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-5は集団項目の可能性がある。 - -2. 一意名-6および定数-7は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、この時一意名-6は集団項目の可能性がある。 - -3. 一意名-5と定数-6、一意名-6と定数-7は同じ長さでなければならない。 - -4. 「TO」の前に指定された部分文字列は、ターゲット文字列と呼ばれ、「TO」の後に指定された部分文字列は、置換文字列と呼ばれる。 - -5. 一意名-1の内容は1文字ずつスキャンされ、その文字がターゲット文字列に該当する場合、(相対位置による)置換文字列内に対応する文字が、一意名-1のその文字を置換する。 - -6. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -7. ターゲット文字列の長さが置換文字列の長さを超える場合、置換文字列の右側に空白があると見なされてその差が埋められる。 - -8. INSPECT文は1985年のCOBOL標準で導入されたため、TRANSFORM文([6.47](6-47.md))は廃止された。 - - - -[ページトップへ](6-26.md) - diff --git a/automanual/old_delete/6-27.md b/automanual/old_delete/6-27.md deleted file mode 100644 index 4218a73..0000000 --- a/automanual/old_delete/6-27.md +++ /dev/null @@ -1,56 +0,0 @@ - -[前へ](6-26.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-1.md) - -## 6.27. MERGE - -図6-70-MERGE構文 - -![alt text](Image/6-70-Merge.png) - -MERGE文は、指定されたキーのセットで二つ以上の同じ順序ファイルを結合する。 - -1. MERGE文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使って定義する必要がある。[5.2](5-2.md)では説明の残りの部分で、このファイルを「マージファイル」と呼んでいる。 - -2. ファイル名-1、ファイル名-2、およびファイル名-3(指定されている場合)は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節でファイル記述(FD)を使って定義しなければならない。[5.1](5-1.md#51-ファイル記述)ではファイル名-1とファイル名-2で同じファイルが使われている。 - -3. 一意名-1 ・・・の項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性のためにサポートされているが機能していない。 - -5. ファイル名-1、ファイル名-2、ファイル名-3(存在する場合)、および整列ファイルのレコード記述は、レイアウトとサイズが同じであると見なされる。ファイルレコードの項目に使われる実際のデータ名は異なる場合があるが、レコードの構造、項目のPICTURE句、項目のサイズ、およびデータのUSAGE句は、すべてのファイルで項目ごとに一致する必要がある。 - - MERGE文を使った一般的なプログラミング手法は、MERGEに関連するすべてのファイルのレコードを、「**01** レコード名 **PIC X(** n **).**」(nはレコードサイズを表す)という書き方の簡潔な基本項目として定義することである。レコードの詳細が実際に記述されている唯一のファイルが整列ファイルである。 - -6. USING句で指定されたファイルには、以下のルールが適用される。 - - a. MERGEの実行時は、いずれのファイルもOPENになっていない場合がある。 - - b. 各ファイルは、MERGE文のKEY句での指定によって既に並び替えられているとみなされる。 - - c. SAME RECORD AREA、SAME SORT AREA、またはSAME SORT-MERGE AREA文で参照できるファイルはない`21`。 - -7. MERGEを実行すると、各USINGファイルの最初のレコードが読み取られる。 - -8. MERGE文が実行されると、各USINGファイルの現在のレコードが調査され、KEY句によって規定されたルールに沿って比較される。(KEY句による)順番で見て「次」であるレコードがマージファイルに書き込まれると、そのレコードの元となったUSINGファイルが読み取られて、次の順番のレコードが使用できるようになる。USINGファイルがファイル終了条件に達すると、そのファイルはそれ以降のMERGE処理から除外され、処理は残りのUSINGファイルで続行される。すべてのUSINGファイルでの処理が完全に終わるまで続く。 - -9. マージファイルにデータが入力されると、GIVING句が指定されている場合、マージされたデータはファイル名-3に書き込まれるか、手続き名-1または手続き名-1と手続き名-2の間として定義されているOUTPUT PROCEDUREを使って処理される。 - -10. GIVINGを指定する場合、MERGEの実行時にファイル名-3 ・・・をOPENにすることはできない。 - -11. OUTPUT PROCEDUREを使用する場合、マージされたレコードはRETURN文([6.35](6-35.md))を用いて、マージファイルから一つずつ手動で読み取られる。 - -12. OUTPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとMERGE文を終了する。 - -13. OUTPUT PROCEDUREから制御を移したGO TO文はMERGEを終了するが、GO TO文が制御を移した場所からプログラムの実行を継続できるようにする。GO TOを用いてOUTPUT PROCEDUREを中止してしまうと、再開することはできないが、MERGE文自体は再び実行することができる。しかし、この方法でMERGEを再起動すると、マージファイルから返されていないレコードは失われてしまう。**GO TOを使用することで並び替えを早期に終了したり、以前に中止されたMERGEを再開したりすることは、優れたプログラミング方法ではないため、避けるべきである。** - -14. OUTPUT PROCEDUREは、手続き名-2(該当するものがない場合は手続き名-1)の最後の文を過ぎた制御のフォールスルーによって暗黙的に終了するか、手続き名-2(該当するものがない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了すると、出力フェーズ(およびMERGE文自体)が終了となる。 - -15. OUTPUT PROCEDUREの範囲では、ファイルのSORT文([6.40.1](6-40-1.md))、MERGE文、またはRELEASE文([6.34](6-34.md))を実行してはならない。 - ---- -`21` [4.2.2](4-2-2.md)参照。 - - - -[ページトップへ](6-27.md) - diff --git a/automanual/old_delete/6-28-1.md b/automanual/old_delete/6-28-1.md deleted file mode 100644 index 0ed83c1..0000000 --- a/automanual/old_delete/6-28-1.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-27.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-28-2.md) - -## 6.28. MOVE - -### 6.28.1. MOVE文の書き方1 ― MOVE - -図6-71-MOVE構文 - -![alt text](Image/6-71-Move.png) - -特定の値を一つ以上の受け取りデータ項目に移動することができる。 - -1. MOVE文は、一つ以上の受け取りデータ項目(一意名-2 ・・・)の内容を新しい値に置き換える。 - -2. 新しい値が各受け取りデータ項目に格納される正確な方法は、各一意名-2項目のPICTUREとUSAGEによって異なる。 - - - -[ページトップへ](6-28-1.md) - diff --git a/automanual/old_delete/6-28-2.md b/automanual/old_delete/6-28-2.md deleted file mode 100644 index 37ac84a..0000000 --- a/automanual/old_delete/6-28-2.md +++ /dev/null @@ -1,91 +0,0 @@ - -[前へ](6-28-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-1.md) - -### 6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING - -図6-72-MOVE CORRESPONDING構文 - -![alt text](Image/6-72-Move.png) - -同じ名前の基本項目をある集団項目から別の集団項目に移動することができる。 - -1. CORRESPONDINGという単語は、CORRと省略される場合がある。 - -2. 一意名-1と一意名-2の両方が集団項目でなければならない。 - -3. 一意名-1と一意名-2に従属する二つのデータ項目は、次の条件を満たす場合に対応すると言われている: - - a. どちらも同じ名前ではあるがFILLERではない。 - - b. 一意名-1と一意名-2に直ちには従属しない場合、上位項目は同じ名前ではあるがFILLERではない。これらの項目が一意名-1と一意名-2でない場合、このルールは一意名-1と一意名-2の構造を通じて再帰的に上位の方に適用されていく。 - - c. どちらも基本項目(ADD CORR、SUBTRACT CORR)であるか、少なくとも一つが基本項目(MOVE CORR)である。 - - d. 対応する可能性のある候補は、別のデータ項目のREDEFINES句またはRENAMES句ではない。 - - e. 対応する可能性のある候補のいずれにもOCCURS句はない(ただしOCCURS句を含む従属データ項目が含まれている場合がある)。 - -4. 対応するものとの一致が確認できると、MOVE CORRESPONDINGは合致するごとに一つずつ、個々にMOVEが行われたかのように動作する。 - -この規則は、以下の例題を使うとよく理解できる。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. corrdemo. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 X. - 05 A VALUE 'A' PIC X(1). - 05 G1. - 10 G2. - 15 B VALUE 'B' PIC X(1). - 05 C. - 10 FILLER VALUE 'C' PIC X(1). - 05 G3. - 10 G4. - 15 D VALUE 'D' PIC X(1). - 05 V1 VALUE 'E' PIC X(1). - 05 E REDEFINES V1 PIC X(1). - 05 F VALUE 'F' PIC X(1). - 05 G VALUE ALL 'G'. - 10 G2 OCCURS 4 TIMES PIC X(1). - 05 H VALUE ALL 'H' PIC X(4). - 01 Y. - 02 A PIC X(1). - 02 G1. - 03 G2. - 04 B PIC X(1). - 02 C PIC X(1). - 02 G3. - 03 G5. - 04 D PIC X(1). - 02 E PIC X(1). - 02 V2 PIC X(1). - 02 G PIC X(4). - 02 H OCCURS 4 TIMES PIC X(1). - 66 F RENAMES V2. - PROCEDURE DIVISION. - 100-Main. - MOVE ALL '-' TO Y. - DISPLAY ' Names: ' 'ABCDEFGGGGHHHH'. - DISPLAY 'Before: ' Y. - MOVE CORR X TO Y. - DISPLAY ' After: ' Y. - STOP RUN - -DISPLAY文で表示される結果は以下の通りである。 - - Names: ABCDEFGGGGHHHH - Before: -------------- - After: ABC---GGGG---- - -- opensource COBOLでは、「X」および「Y」集団項目内の「A」、「B」、および「C」データ項目間の「対応する」関係を確立している。「X」は 01-05-10-15 のレベル番号付けスキームを使用し、「Y」は 01-02-03-04 を使用しているが、この違いは対応するものの一致が確立することに影響しない。 -- G OF X はOCCURS 句を含むデータ項目の親であるが、「G」項目が一致する。 -- 「D」項目は3項のbに違反しているため、一致するものはない(4つの集団項目名を注視すること)。 -- E OF X は3項のd(REDEFINES)に違反しているため、「E」項目と一致するものはない。 -- E OF X は3項のd(RENAMES)に違反しているため、「F」項目と一致するものはない。 -- H OF Y にはOCCURS句が含まれており、3項のeに違反しているため、「H」項目と一致するものはない。 - - - -[ページトップへ](6-28-2.md) - diff --git a/automanual/old_delete/6-29-1.md b/automanual/old_delete/6-29-1.md deleted file mode 100644 index 240f1c5..0000000 --- a/automanual/old_delete/6-29-1.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-28-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-29-2.md) - -## 6.29. MULTIPLY - -### 6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY - -図6-73-MULTIPLY BY構文 - -![alt text](Image/6-73-Multiply.png) - -算術積を実行する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. それぞれ一意名-2を掛けた一意名-1または定数-1の値が計算され、各計算結果が対応する一意名-2データ項目に移動され、古い内容が置き換えられる。 - -4. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - - - -[ページトップへ](6-29-1.md) - diff --git a/automanual/old_delete/6-29-2.md b/automanual/old_delete/6-29-2.md deleted file mode 100644 index ef3fcc0..0000000 --- a/automanual/old_delete/6-29-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-29-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-30.md) - -### 6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING - -図6-74-MULTIPLY GIVING構文 - -![alt text](Image/6-74-Multiply.png) - -二つの値の算術積を実行し、GIVINGの後にリストされている一意名(一意名-3 ・・・)の内容をその積に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1と定数-2は数字定数でなければならない。 - -4. 一意名-1および一意名-2の値は変更できない。 - -5. ON SIZE ERROR、NOT ON SIZE ERROR、およびROUNDED句はコード化され、ADD文での同名義句と同様に動作する([6.5](6-5-1.md)参照)。 - - - -[ページトップへ](6-29-2.md) - diff --git a/automanual/old_delete/6-3.md b/automanual/old_delete/6-3.md deleted file mode 100644 index 374bec7..0000000 --- a/automanual/old_delete/6-3.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-1.md) - -## 6.3. 宣言の記述形式 - -図6-17-宣言構文 - -![alt text](Image/6-17.png) - -プログラマは手続き部の宣言領域内で、プログラム実行時に発生する可能性のある特定のイベントを遮断する、一連の「トラップ」ルーチンを定義することができる。 - -1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 - -2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 - -3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 - -4. GLOBALオプションを使用すると、同じコンパイル単位内のすべてのプログラムにおいて宣言型プロシージャを使用できる。 - -5. 宣言ルーチン(任意の型)は、PERFORM文を介して参照する場合を除いて、宣言範囲外のプロシージャを参照することはできない。 - - - -[ページトップへ](6-3.md) - diff --git a/automanual/old_delete/6-30.md b/automanual/old_delete/6-30.md deleted file mode 100644 index 8b3366b..0000000 --- a/automanual/old_delete/6-30.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-29-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-31.md) - -## 6.30. NEXT SENTENCE - -図6-75-NEXT SENTENCE構文 - -![alt text](Image/6-75-Nextsentnce.png) - -NEXT SENTENCE文は、ネストされた一連の「IF」文を「分割」する手段として使われる。 - -1. NEXT SENTENCE文は、「IF」文内で使用する場合にのみ有効である。 - -2. 名前が示すように、この文によって制御はプログラム内の次の文に移る。 - -3. 1985年より前の標準に従ってコーディングされたCOBOLプログラムにNEXT SENTENCE文が必要な理由については、[6.1.5](6-1-5.md)で説明している。また、1985年(およびそれ以降)の標準用にコーディングされたプログラムがこの文を必要としない理由もわかるだろう。 - -4. 新しいopensource COBOLプログラムは、IF文にEND-IFスコープターミネータを使ってコーディングする必要がある。これにより、CONTINUE文([6.12](6-12.md))を優先することでNEXT SENTENCEの使用が無効となる。 - - - -[ページトップへ](6-30.md) - diff --git a/automanual/old_delete/6-31.md b/automanual/old_delete/6-31.md deleted file mode 100644 index ecbd4f0..0000000 --- a/automanual/old_delete/6-31.md +++ /dev/null @@ -1,38 +0,0 @@ - -[前へ](6-30.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-1.md) - -## 6.31. OPEN - -図6-76-OPEN構文 - -![alt text](Image/6-76-Open.png) - -OPEN文は、プログラム内の一つ以上のファイルを使用できるようにする。 - -1. opensource COBOLプログラムで定義されたファイルは、CLOSE文([6.9](6-9.md))、DELETE文([6.13](6-13-1.md))、READ文([6.33](6-33-1.md))、START文([6.41](6-41.md))、またはUNLOCK文([6.48](6-48.md))で参照される前に、正常にOPENされている必要がある。更に、ファイルのレコードデータ名(またはレコードに従属するデータ要素)をANY文で参照するためには、ファイルが正常にOPENされていなければならない。 - -2. 既に開いているファイルを開こうとすると、ファイルステータス41(「ファイルは既に開いています」)で失敗となり、これはプログラムを終了させてしまう致命的なエラーとなる。 - -3. OPENの失敗(「ファイルは既に開いています」を含む)は、DECLARATIVES([6.3](6-3.md))またはエラープロシージャを使って処理できるが、トラップルーチンが終了してしまうと、opensource COBOLランタイムシステムはプログラムを終了し、最終的にOPEN障害から回復することはできない。 - -4. INPUT、OUTPUT、I-O、およびEXTENDオプションは次のように、ファイルの使用方法をopensource COBOLに通知する。 - - | オプション | 処理 | - | --- | --- | - | INPUT | ファイルの既存内容のみを読み取ることができ、CLOSE、READ、START、および UNLOCK 文のみが許可される。 | - | OUTPUT | 新しい内容(ファイルの既存内容が完全に置き換わる場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - | I-O | ファイルに対して任意の操作を実行でき、すべてのファイル操作I/O文が許可される。 | - | EXTEND | 新しい内容(ファイルの既存内容に追加される場合)のみをファイルに書き込むことができ、CLOSE、UNLOCK、および WRITE 文のみが許可される。 | - -5. SHARING句は、同じファイルを開こうとする他のopensource COBOLプログラムと自分のプログラムがどのように共存するかをopensource COBOLに通知する。このオプションについては[6.1.8.1](6-1-8-1.md#6181-ファイル共有)で説明している。 - -6. WITH NO REWIND句とWITH LOCK句は機能しない。 - - WITH NO REWIND句をサポートできるデバイス(テープドライブ)は、opensource COBOLが動作する環境では非常に稀であり、コンパイラまたはランタイムメッセージは発行されない(何も実行されない)。 - - WITH LOCK句は正式には「実装されていない」ため扱いが少し異なり、コンパイル警告が生成される。 - - - -[ページトップへ](6-31.md) - diff --git a/automanual/old_delete/6-32-1.md b/automanual/old_delete/6-32-1.md deleted file mode 100644 index 46e3439..0000000 --- a/automanual/old_delete/6-32-1.md +++ /dev/null @@ -1,71 +0,0 @@ - -[前へ](6-31.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-32-2.md) - -## 6.32. PERFORM - -### 6.32.1. PERFORM文の書き方1 ― 手続き型 - -図6-77-手続き型PERFORM構文 - -![alt text](Image/6-77-Perform.png) - -制御を一つ以上のプロシージャに移し、指定されたプロシージャの実行が完了したときに制御を返すために使われる。このプロシージャの呼び出しは、条件がTRUEになるまで、または永久に(おそらくプロシージャ内のPERFORMの制御から抜け出す方法で)、一回、複数回、繰り返し実行できる。 - -1. THROUGHとTHRUの単語は、同じ意味を持つものとして使用することができる。 - -2. 手続き名-1と手続き名-2はどちらも、PERFORM文と同じプログラム単位で定義された手続き部の節または段落でなければならない。 - -3. 手続き名-2オプションを指定する場合は、プログラムのソースコード内にある手続き名-1に従う必要がある。 -4. PERFORMの範囲は、手続き名-1内の文、手続き名-2内の文、およびこれらの間で定義された全プロシージャ内のすべての文として定義される。 - -5. FOREVER、TIMES、またはUNTIL句が存在しない場合、PERFORMの範囲内のコードが(一度)実行された後、制御はPERFORMに続く文に移る。 - -6. FOREVERオプションは、PERFORM文に繰り返しの終了条件が定義されていない場合、PERFORMの範囲内でコードを繰り返し実行する。プログラムを停止する(STOP RUN)か、PERFORMから抜け出す(EXIT PERFORM)コードをPERFORMの範囲内に含めるのかどうかは、プログラマ次第である。 - -7. TIMESオプションは、PERFORMの範囲内で一定回数、指示された実行を繰り返す。指定された回数分の繰り返しが終了すると、制御はPERFORMに続く次の文に移る。 - -8. UNTIL句を用いると、PERFORMの範囲内の文を、条件式-1の値がTRUEになるまで繰り返し実行できる。 - -9. オプションのWITH TEST句はUNTILが、PERFORM範囲の前に実行されるか、後に実行されるかを制御する。WITH TEST句が指定されていない場合は「BEFORE」が指定されたものとみなす。 - -10. オプションのVARYING句を使うと、PERFORMの範囲内で文を実行するたびに一意の数値を持つデータ項目(一意名-3)を定義できる。初め一意名-3はFROM句で指定された値を持つ。反復の終了時に、BY句で定義された値は、条件式-1が評価される前に一意名-3に追加される。BY句が指定されていない場合は「1」が指定されたものとみなす。 - -11. VARYING句が使用されている場合は、任意の数だけAFTER句を追加して、二次ループを作成することができる。AFTER句では反復を追加作成し、反復中に増加する追加のデータ項目を定義し、反復を終了するために追加の条件式を定義することができる。機能的には、複数の文をコーディングすることなく、あるPERFORM / VARYING / UNTILを別のPERFORM / VARYING / UNTIL内にネストする基本的な方法である。次の例が参考になるだろう。 - - - 2次元(3行×4列)のテーブルと、テーブルの各要素への添字参照に使用される数値データ項目のペアを定義する次のコードを確認する。 - - ![alt text](Image/6-32-1-1.png) - - ``` - 01 PERFORM-DEMO. - 05 PD-ROW OCCURS 3 TIMES. - 10 PD-COL OCCURS 4 TIMES. - 15 PD PIC X(1). - 01 PD-Col-No PIC 9 COMP. - 01 PD-Row-No PIC 9 COMP. - ``` - ![alt text](Image/6-32-1-2.png) - - ルーチン(100-Visit-Each-PD)をPERFORMしたいとする。このルーチンは、上に示した順序で各PDデータ項目に順次にアクセスする。 - PERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3 - AFTER PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4. - ``` - ![alt text](Image/6-32-1-3.png) - - 一方で上に示した順序で各PDにアクセスしたい場合、必要なPERFORMコードは次の通りである。 - - ``` - PERFORM 100-Visit-Each-PD WITH TEST AFTER - VARYING PD-Col-No FROM 1 BY 1 UNTIL PD-Col-No = 4 - VARYING PD-Row-No FROM 1 BY 1 UNTIL PD-Row-No = 3. - ``` - - - -[ページトップへ](6-32-1.md) - diff --git a/automanual/old_delete/6-32-2.md b/automanual/old_delete/6-32-2.md deleted file mode 100644 index ca9b4df..0000000 --- a/automanual/old_delete/6-32-2.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-32-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-1.md) - -### 6.32.2. PERFORM文の書き方2 ― インライン型 - -図6-78-インライン型PERFORM構文 - -![alt text](Image/6-78-Perform.png) - -PERFORMの範囲内にある文が、プログラム内の他の場所にあるプロシージャではなく、PERFORMのコードにインラインで指定されること以外は、書き方1と同じである。 - -1. FOREVER、TIMES、WITH TEST、VARYING、BY、AFTER、およびUNTIL句は、PERFORM文の書き方1の同名義句と、使い方や効果が同じである。 - -2. この書き方と書き方1の明確な違いは、書き方2のPERFORM文では、実行コードがプロシージャではなくインライン(命令文1 ・・・)で指定されることである。 - - - -[ページトップへ](6-32-2.md) - diff --git a/automanual/old_delete/6-33-1.md b/automanual/old_delete/6-33-1.md deleted file mode 100644 index e28bc9b..0000000 --- a/automanual/old_delete/6-33-1.md +++ /dev/null @@ -1,43 +0,0 @@ - -[前へ](6-32-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-33-2.md) - -## 6.33. READ - -### 6.33.1. READ文の書き方1 ― 順次読み取り - -図6-79-READ構文(順次読み取り) - -![alt text](Image/6-79-Read.png) - -ファイルから次の(または前の)レコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがRANDOMの場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがSEQUENTIALの場合、この書き方のREAD文が唯一使用可能となり、NEXT/PRIOR句はオプションとして扱われる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ACCESS MODE DYNAMICが指定されていて、上記のような文を順次読み取りとして処理することをopensource COBOLコンパイラに通知する場合は、文にNEXTまたはPRIORを追加する必要がある(そうでない場合は、ランダム読み取りとして扱われる)。 - -5. ファイル名-1で次に使用可能なレコードが取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -6. NEXT句およびPREVIOUS句では、読み取りプロセスがどの方向でファイルを通過するかを指定する。どちらも指定されていない場合は、NEXTが指定されているものとみなされる。 - -7. PREVIOUS句は、ORGANIZATION INDEXEDファイルでのみ使うことができる。 - -8. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 - -11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 - - - -[ページトップへ](6-33-1.md) - diff --git a/automanual/old_delete/6-33-2.md b/automanual/old_delete/6-33-2.md deleted file mode 100644 index 4887805..0000000 --- a/automanual/old_delete/6-33-2.md +++ /dev/null @@ -1,51 +0,0 @@ - -[前へ](6-33-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-34.md) - -### 6.33.2. READ文の書き方2 ― ランダム読み取り - -図6-80-READ構文(ランダム読み取り) - -![alt text](Image/6-80-Read.png) - -ファイルから任意のレコードを取得する。 - -1. ファイル名-1は、INPUTまたはI-Oに対して常にOPEN([6.31](6-31.md))である必要がある。 - -2. ファイル名-1のACCESS MODEがSEQUENTIAL,の場合、この書き方のREAD文は使用できない。 - -3. ACCESS MODEがRANDOMの場合、この書き方のREAD文が唯一使用可能となる。 - -4. ACCESS MODEがDYNAMICの場合、書き方2と同様にこの書き方のREAD文も使用できる。以下、最小限のREAD文は・・・ - ``` - READ ファイル名-1 - ``` - ・・・正しい書き方として認められる。そのため、ファイルにACCESS MODE DYNAMICが指定されている場合、上記のようなREAD文は自動的にランダム読み取りとして扱われる。 - -5. KEY句は、ファイル内でレコードをどのように配置するかをコンパイラに指示する。 - - KEY句がない場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、ファイルのRELATIVE KEYとして宣言された項目の内容がレコードの識別に使われる。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、ファイルのRECORD KEYとして宣言された項目の内容がレコードの識別に使われる。 - - KEY句が指定されている場合: - - - ファイルがORGANIZATION RELATIVEファイルの場合、一意名-2の内容が、アクセスされるレコードの相対レコード番号として使われる。一意名-2は、ファイルのRELATIVE KEY項目である必要はない(必要に応じて指定することが可能)。 - - - ファイルがORGANIZATION INDEXEDファイルの場合、一意名-2はRECORD KEYまたはファイルのALTERNATE RECORD KEY項目の一つ(存在する場合)である必要があり、その項目の最新の内容によって、アクセスするレコードが識別される。代替レコードキーが使用され、重複値が許可されている場合、アクセスされるレコードは、そのキー値を持つ最初のレコードになる。 - -6. 5項で識別されるレコードはファイル名-1から取得され、その内容はファイルのFD([5.1](5-1.md#51-ファイル記述))に従属する01レベルのレコード構造に格納される。 - -7. INTO句を使うと、読み取りが成功した場合、読み取ったレコード内容がMOVEの規則に従って一意名-1にMOVEされる。 - -8. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -9. INVALID KEY句が存在する場合、ファイルステータスが23「キーが存在しない」であることが原因でREADの試行が失敗した時に命令文1を実行する。INVALID KEY句は、**_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、「キーが存在しない」以外のエラー状態を検出する。 - -10. NOT INVALID KEY句が存在する場合、READの試行が成功すると、命令文2が実行される。 - - - -[ページトップへ](6-33-2.md) - diff --git a/automanual/old_delete/6-34.md b/automanual/old_delete/6-34.md deleted file mode 100644 index cb0016c..0000000 --- a/automanual/old_delete/6-34.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-33-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-35.md) - -## 6.34. RELEASE - -図6-81-RELEASE構文 - -![alt text](Image/6-81-Release.png) - -RELEASE文は、整列ファイルに新しいレコードを追加する。 - -1. RELEASE文は、SORT文のINPUT PROCEDURE内でのみ有効である([6.40.1](6-40-1.md)参照)。 - -2. レコード名-1は、ソート記述(SD)記述項に定義されたレコードでなければならない([5.2](5-2.md)参照)。 - - - -[ページトップへ](6-34.md) - diff --git a/automanual/old_delete/6-35.md b/automanual/old_delete/6-35.md deleted file mode 100644 index ed88056..0000000 --- a/automanual/old_delete/6-35.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-34.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-36.md) - -## 6.35. RETURN - -図6-82-RETURN構文 - -![alt text](Image/6-82-Return.png) - -RETURN文は、整列ファイルまたはマージファイルからレコードを読み取る。 - -1. RETURN文は、SORT文([6.40.1](6-40-1.md))またはMERGE文([6.27](6-27.md))のOUTPUT PROCEDURE内でのみ有効である。 - -2. ファイル名-1は、ソート記述(SD)記述項で定義された整列ファイルまたはマージファイルでなければならない([5.2](5-2.md)参照)。 - -3. INTO、AT END、およびNOT AT END句は、READ文([6.33](6-33-1.md))と同様にして扱われる。 - - - -[ページトップへ](6-35.md) - diff --git a/automanual/old_delete/6-36.md b/automanual/old_delete/6-36.md deleted file mode 100644 index f591d4a..0000000 --- a/automanual/old_delete/6-36.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](6-35.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-37.md) - -## 6.36. REWRITE - -図6-83-REWRITE構文 - -![alt text](Image/6-83-Rewrite.png) - -REWRITE文は、ディスクファイル上の論理レコードを置き換える。 - -1. レコード名-1は、I-Oに対して現在OPEN([6.31](6-31.md))になっているファイルのファイル記述(FD – [5.1](5-1.md#51-ファイル記述)参照)に従属する01レベルのレコードとして定義される必要がある。 - -2. FROM句を使うと、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1へのMOVEが発生する。 - -3. REWRITE文は、ORGANIZATION IS LINE SEQUENTIALファイルでは使用できない。 - -4. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 - -5. レコードを書き換えても、ファイルの次のブロックが読み取られるか、COMMIT文([6.10](6-10.md))が発行されるか、そのファイルが閉じられるまで、ファイルのレコードの内容は物理的に更新されない。 - -6. ファイルにORGANIZATION RECORD BINARY SEQUENTIALがある場合: - - a. 書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。 - - b. レコード名-1のサイズは変更できません([5.1](5-1.md#51-ファイル記述)のRECORD CONTAINS/RECORD IS VARYING句を参照)。 - -7. ファイルにORGANIZATION RELATIVEまたはORGANIZATION INDEXEDがある場合: - - a. ACCESS MODE SEQUENTIALがある場合、書き換えられるレコードは、ファイルの最後に実行されたREAD文([6.33](6-33-1.md))によって取得されたレコードとなる。ACCESS MODE RANDOMまたはACCESS MODE DYNAMICがある場合、レコードを書き換える前のREAD文は必要ない。ファイルのRELATIVE KEY/RECORD KEY定義で、更新するレコードを指定する。 - - b. レコード名-1のサイズは更新される可能性がある。 - -8. REWRITE文の実行中にエラーが発生した場合、ON INVALID KEY句が実行される(つまり命令文1が実行される)。このようなエラーは、実際のI/Oエラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、RELATIVE KEYまたはRECORD KEY句の要件を満たすレコードが存在しないことを示す。 - -9. REWRITE文の実行中にエラーが発生しなかった場合、NOT ON INVALID KEY句が実行され、命令文2が実行される。 - - - -[ページトップへ](6-36.md) - diff --git a/automanual/old_delete/6-37.md b/automanual/old_delete/6-37.md deleted file mode 100644 index dfe2ac7..0000000 --- a/automanual/old_delete/6-37.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-36.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-1.md) - -## 6.37. ROLLBACK - -図6-84-ROLLBACK構文 - -![alt text](Image/6-84-Rollback.png) - -ROLLBACK文は、プログラムの開始以降または最後のCOMMIT以降に行われたすべてのファイルへの変更を元に戻す。 - -1. opensource COBOLは(少なくとも今現在)ファイルのロールバックをサポートしていない。ROLLBACK文は、COMMIT文([6.10](6-10.md))と同じ働きをする。 - - - -[ページトップへ](6-37.md) - diff --git a/automanual/old_delete/6-38-1.md b/automanual/old_delete/6-38-1.md deleted file mode 100644 index 76a8fda..0000000 --- a/automanual/old_delete/6-38-1.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](6-37.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-38-2.md) - -## 6.38. SEARCH - -### 6.38.1. SEARCH文の書き方1 ― 順次探索 - -図6-85-SEARCH構文(順次探索) - -![alt text](Image/6-85-Search.png) - -SEARCH文は、テーブルを順に探索するために使われ、特定の値がテーブル内に配置されるか、テーブルが完全に探索されると停止する。 - -1. VARYING句で指定された指標名-1一意名は、USAGE INDEXでなければならない。 - -2. VARYING句が指定されていない場合、探索対象のテーブルはINDEXED BY句([5.3](5-3.md)を参照)を用いて作成する必要がある。 - -3. SEARCH文の実行時に、指標名-1(またはテーブルで定義されているINDEXED BY索引)の現在の値によって、探索プロセスを実行するテーブルの開始位置が定義される。通常は次の例のように、SEARCH文を開始する前に索引値を1に初期化する: - ``` - SET 指標名-1 TO 1 - ``` -4. 探索プロセス中に条件式-1が評価され、TRUEの場合は命令文-2が実行された後に、制御はSEARCH文の次に移る。 - -5. 複数のWHEN句が存在する場合、それぞれの条件式-nが順番に評価され、最初にTRUEと評価された条件式に対応する命令文-nが実行された後に、制御はSEARCH文の次に移る。 - -6. TRUEと評価されるconditional-式-nが存在しない場合、指標名-1の値は1ずつ増加する。指標名-1の値がまだテーブル名のOCCURS範囲内にある場合、WHEN句が再度評価される。このプロセスは、WHEN句のconditional-式-nがTRUEと評価されるまで、または指標名-1の値がテーブル名のOCCURS範囲内からなくなるまで継続する。 - -7. conditional-式-nがTRUEと評価されず、指標名-1の値がテーブル名のOCCURS範囲内にない場合、AT END句の一部である命令文-1が実行され、制御はSEARCH文の次に移る。AT END句がない場合、制御は単にSEARCH文の次に移される。 -  - - -[ページトップへ](6-38-1.md) - diff --git a/automanual/old_delete/6-38-2.md b/automanual/old_delete/6-38-2.md deleted file mode 100644 index 82b1fe2..0000000 --- a/automanual/old_delete/6-38-2.md +++ /dev/null @@ -1,68 +0,0 @@ - -[前へ](6-38-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-1.md) - -### 6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL) - -図6-86-SEARCH構文(二分探索) - -![alt text](Image/6-86-Search.png) - -整列されたテーブルに対して二分探索を実行する。 - -1. テーブル名の定義には、OCCURS、ASCENDING(またはDESCENDING)KEY、そしてINDEXEDBY句を含めなければならない。 - -2. SEARCH ALL文を介してテーブルを探索できるようにするには、以下の項目が真である必要がある。 - - a. テーブルは上記1項の要件を満たしている。 - - b. テーブルに一つ以上のKEY句がある時、テーブル内にその順序でデータが並んでいるわけではない。データの順序はKEY句と一致している必要がある。`22` - - c. テーブル内の二つのレコードが同じキー項目値を持つことはできない。また、テーブルに複数のKEY定義がある場合、テーブル内の二つのレコードが同じキー項目値の組み合わせを持つことはできない。 - - aに違反した場合、コンパイラはSEARCH ALLを拒否する。bまたはc、あるいはその両方に違反した場合、コンパイラによってメッセージは発行されないが、テーブルに対するSEARCH ALLの実行結果はおそらく正しくない。 - -3. キーデータ項目-1およびキーデータ項目-2 ・・・(存在する場合)は、ASCENDING KEY句またはDESCENDING KEY句を介して、テーブル名のキーとして定義する必要がある(上記1項を参照)。 - -4. 指標名-1は、テーブル名の最初のINDEXED BYデータ項目である。 - -5. SEARCH文の書き方1とは異なり、WHEN句は必須である。 - -6. 指定できるWHEN句は一つのみである。AND句の数に制限はないが、キー項目よりWHEN句およびAND句を多く指定することはできない。各WHEN句およびAND句は、異なるキー項目を参照する必要がある。 - -7. WHEN句の機能は、AND句とともに、最初のINDEXED BY項目によって索引付けされたテーブルのキー項目を指定された定数または一意名の値と比較して、テーブルで目的の記述項を見つけることである。テーブルの索引は最小限のテストを必要とする方法で、SEARCH ALL文によって自動的に変更される。 - -8. SEARCH ALL文の内部処理は、初めに内部の「最初」および「最後」のポインタを、テーブルの最初と最後の記述項位置に設定し、次のように処理される。`23` - - a. 「最初」と「最後」の中間の記述項が識別される。これを「現在の」記述項と呼び、テーブル記述項の場所が指標名-1に保存されるように設定する。 - - b. WHEN句(およびAND句)が評価される。目的の定数または一意名の値とキーを比較すると、次の三つのうちいずれかの結果になる。 - - - i. キーと値が一致する場合、命令文2が実行された後、制御はSEARCH ALLの次の文に移る。 - - - ii. キーが値よりも小さい場合、検索されるテーブル記述項は、テーブルの「現在」から「最後」の範囲内でのみ発生する可能性があるため、新しい「最初の」ポインタ値が設定される。(この場合「現在の」ポインタとして設定される)。 - - - iii. キーが値よりも大きい場合、検索されるテーブル記述項は、テーブルの「最初」から「現在」の範囲内でのみ発生する可能性があるため、新しい「最後の」ポインタ値が設定される(この場合「現在の」ポインタとして設定される)。 - - c. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと異なる場合は、さらに検索する必要があるため、手順「a」に戻って検索を続ける。 - - d. 新しい「最初」と「最後」のポインタが、古い「最初」と「最後」のポインタと同じである場合、テーブルは使い果たされているため検索されている記述項は見つからない。命令文1が実行された後、制御はSEARCH ALLの次の文に移る。 - -上記のアルゴリズムの効果は、特定の記述項が存在するかどうかを判断するために、テーブル内のごく一部の要素をテストする必要があることである。これは、SEARCH ALLが記述項をチェックするたび、テーブル内に残っている記述項の半分を破棄するために行われる。 - -コンピュータ研究者は、二つの探索方法を次のように比較する: - -- 順次探索(書き方1)では、記述項を見つけるために平均n/2回、最悪の場合はn回の探索が必要であり、記述項が存在しないことを示す時もn回の探索が必要となる(n=テーブル内の記述項の数)。 - -- 二分探索(書き方2)では、記述項を見つけるために最悪の場合はlog2n回の探索、記述項が存在しないことを示す時でもlog2n回の探索が必要となる(n=テーブル内の記述項の数)。 - -探索方法の違いについて、より具体的な考え方がある。テーブルに1,000個の記述項があるとする。順次探索(書き方1)では、平均して500個をチェックして記述項を見つけるか、1,000個全てを調べて記述項が存在しないことを確認する必要がある。二分探索では、記述項の数を2進数(1,00010=11111010002)で表し、結果の桁数(10)を数える。これは、記述項を探索したり、記述項が存在しないことを確認したりするために必要な探索回数としては最小であり、かなりの改善されている。 - ---- -`22` もちろん、データの順序がKEY句と一致しない場合は、テーブルソートを使って簡単に順序を揃えることができる(SORT文の書き方2–テーブルソートを参照)。 - -`23` これは、純粋な教育ツールとして意図されたアルゴリズムを簡略化した考え方であって、実装して機能させるためには、厄介ではあるが詳細を追加する必要がある(ルール「a」で「現在」のエントリが12.5であると識別されたときどうするか等)。 - - - -[ページトップへ](6-38-2.md) - diff --git a/automanual/old_delete/6-39-1.md b/automanual/old_delete/6-39-1.md deleted file mode 100644 index b56f074..0000000 --- a/automanual/old_delete/6-39-1.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-38-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-2.md) - -## 6.39. SET - -### 6.39.1. SET文の書き方1 ― 環境設定 - -図6-87-SET構文(環境設定) - -![alt text](Image/6-87-Set.png) - -プログラム内から環境値を簡単に設定することができる。 - -1. opensource COBOLプログラム内から生成または変更された環境変数は、そのプログラム(つまりCALL“SYSTEM”)によって生成されたすべてのサブシェルプロセスで使用できるが、opensource COBOLプログラムを開始したシェルまたはコンソールウィンドウには認識されない。 - -2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 - - DSIPLAY SET ENVIRONMENT “VARNAME” TO - "VALUE" - “VARNAME” UPON ENVIRONMENT-NAME - END-DISPLAY - DSIPLAY - “VALUE” UPON ENVIRONMENT-VALUE - END-DISPLAY - - - -[ページトップへ](6-39-1.md) - diff --git a/automanual/old_delete/6-39-2.md b/automanual/old_delete/6-39-2.md deleted file mode 100644 index 9559ffd..0000000 --- a/automanual/old_delete/6-39-2.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-39-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-3.md) - -### 6.39.2. SET文の書き方2 ― プログラムポインター設定 - -図6-88-SET構文(プログラムポインター設定) - -![alt text](Image/6-88-Set.png) - -手続き部コードモジュールのアドレス、具体的には手続き部で宣言された記述項ポイントを取得できる。 - -1. 以前に他のバージョンのCOBOL(特にメインフレームの実装)を使ったことがある場合は、サブルーチンのCALLが手続き部の段落または節の名前を引数として渡すのを見たことがあるかもしれないが、opensource COBOLでは不可能である。その代わりに、この書き方のSET文の使い方を知っておく必要がある。 - -2. program-pointer-1はプログラムポインターとして使用しなければならない。 - -3. 定数-1または一意名-1の値には、プログラムのPROGRAM-ID、またはENTRY文で指定された記述項ポイントを代入する必要がある。 - -4. この方法で手続き部コード領域のアドレスを取得すると、そのアドレスをサブルーチン(通常はCで書かれる)に渡して、必要な用途に使うことができる。動作中のプログラムポインターの例については、[8.3.1.23](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer)および[8.3.1.24](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer)で説明する。 - - - -[ページトップへ](6-39-2.md) - diff --git a/automanual/old_delete/6-39-3.md b/automanual/old_delete/6-39-3.md deleted file mode 100644 index 6628980..0000000 --- a/automanual/old_delete/6-39-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-39-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-4.md) - -### 6.39.3. SET文の書き方3 ― アドレス設定 - -図6-89-SET構文(アドレス設定) - -![alt text](Image/6-89-Set.png) - -データ項目の内容ではなく、アドレスを処理するために使われる。 - -1. TOのにADDRESS OF句がある場合、SET文を使って連絡節またはBASEDデータ項目のアドレスを変更する。この句がない場合は、一つ以上のUSAGE POINTERデータ項目にアドレスが割り当てられる。 - -2. TOのにADDRESS OF句がある場合、一意名-1に割り当てられるアドレス、またはポインター名-1に格納されるアドレスとして、一意名-2のアドレスをSET文が識別する。この句がない場合は、ポインター名-2の内容がアドレスに割り当てられる。 - - - -[ページトップへ](6-39-3.md) - diff --git a/automanual/old_delete/6-39-4.md b/automanual/old_delete/6-39-4.md deleted file mode 100644 index 217529d..0000000 --- a/automanual/old_delete/6-39-4.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-39-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-5.md) - -### 6.39.4. SET文の書き方4 ― インデックス設定 - -図6-90-SET構文(インデックス設定) - -![alt text](Image/6-90-Set.png) - -USAGE INDEXデータ項目に値を割り当てる。 - -1. 指標名-1はインデックスである必要がある。または、指標名-1はテーブル内でINDEXED BY句と識別される必要がある。 - - - -[ページトップへ](6-39-4.md) - diff --git a/automanual/old_delete/6-39-5.md b/automanual/old_delete/6-39-5.md deleted file mode 100644 index 4ceaa3f..0000000 --- a/automanual/old_delete/6-39-5.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-39-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-6.md) - -### 6.39.5. SET文の書き方5 ― UP/DOWN設定 - -図6-91-SET構文(UP/DOWN設定) - -![alt text](Image/6-91-Set.png) - -インデックスまたはポインタの値を指定された値の分だけインクリメントまたはデクリメントするために使われる。 - -1. 指標名-1はインデックスでなければならない。ポインター-1はポインターまたはプログラムポインターである必要がある。 - -2. 指標名-1が指定されている場合、一般的にUPまたはDOWNの値を1ずつ設定する。通常指標名-1はテーブルの要素を順番にウォークスルーするために使われる。 - - - -[ページトップへ](6-39-5.md) - diff --git a/automanual/old_delete/6-39-6.md b/automanual/old_delete/6-39-6.md deleted file mode 100644 index ea4de22..0000000 --- a/automanual/old_delete/6-39-6.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-39-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-39-7.md) - -### 6.39.6. SET文の書き方6 ― 条件名設定 - -図6-92-SET構文(条件名設定) - -![alt text](Image/6-92-Set.png) - -レベル88条件名のTRUE/FALSE値を指定することができる。 - -1. 指定された条件名をTRUE/FALSE値に設定することで、実際には、条件名データ項目が従属する親データ項目に値を割り当てることになる。 - -2. TRUEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義で指定された最初の値になる。 - -3. SET文でFALSEを指定すると、各々の親データ項目に割り当てられる値は、条件名の定義のFALSE句によって指定された値になる。条件名-1のオカレンスにFALSE句がない場合、SET文はコンパイラによって拒否される。 - - - -[ページトップへ](6-39-6.md) - diff --git a/automanual/old_delete/6-39-7.md b/automanual/old_delete/6-39-7.md deleted file mode 100644 index e2c6054..0000000 --- a/automanual/old_delete/6-39-7.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-39-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-1.md) - -### 6.39.7. SET文の書き方7 ― スイッチ設定 - -図6-93-SET構文(スイッチ設定) - -![alt text](Image/6-93-Set.png) - -スイッチをオンまたはオフにする。 - -1. スイッチは、特殊名段落を使って定義される。詳細については、[4.1.4](4-1-4.md)で説明している。 - - - -[ページトップへ](6-39-7.md) - diff --git a/automanual/old_delete/6-4-1.md b/automanual/old_delete/6-4-1.md deleted file mode 100644 index a1ea70c..0000000 --- a/automanual/old_delete/6-4-1.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-2.md) - -## 6.4. ACCEPT - -### 6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り - -図6-18-ACCEPT構文(コンソールからの読み取り) - -![alt text](Image/6-18.png) - -コンソールウィンドウから値を読み取り、それをデータ項目(一意名)に格納するために使用する。 - -1. FROM句を使う場合、指定する呼び名はSYSINまたはCONSOLEのいずれかであるか、または、特殊名段落を介してこれら2つのいずれかに割り当てられたユーザ定義の呼び名である必要がある。SYSINとCONSOLEは同じ意味を持つものとして使われ、どちらもコンソールウィンドウを参照する。 - -2. FROM句が指定されていない場合は、FROM CONSOLEが指定されたとみなす。 - - - -[ページトップへ](6-4-1.md) - diff --git a/automanual/old_delete/6-4-2.md b/automanual/old_delete/6-4-2.md deleted file mode 100644 index 53143db..0000000 --- a/automanual/old_delete/6-4-2.md +++ /dev/null @@ -1,32 +0,0 @@ - -[前へ](6-4-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-3.md) - -### 6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得 - -図6-19-ACCEPT構文(コマンドライン引数) - -![alt text](Image/6-19.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. COMMAND-LINEオプションから受け取ると、プログラムを実行したコマンドラインで入力された全ての引数を、指定した通りに取得できるが、返ってきたデータを意味のある情報に解析する必要がある。 - -2. ARGUMENT-NUMBERから受け取る場合、コマンドラインから引数を解析し、発見した引数の数を返すようにopensource COBOLランタイムシステムに要求する。解析は、次のようにオペレーティングシステムのルールに従って実行される。 - - - 引数は、文字間の空白を引数間の区切り文字として扱うことで区切られる。2つの空白以外の値を区切る空白の数とは無関係である。 - - - 二重引用符(“)で囲まれた文字列は、引用符内に埋め込まれる可能性のある空白の数(空白が存在する場合は)に関係なく、単体の引数として扱われる。 - - - Windowsシステムでは、一重引用符またはアポストロフィ文字(‘)は、他のデータ文字と同じように扱われ、文字列を示すことはできない。 - -3. ARGUMENT-VALUEから受け取る場合、コマンドラインから引数を解析し、現在のARGUMENT-NUMBERレジスタにある引数を返すようにopensource COBOLランタイムシステムに要求する`17`。解析は、上記の2項で記載したルールに従って実行される。 - -4. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`17` DISPLAY文の書き方2を使ってARGUMENT-NUMBERを目的の値に設定する。 - - - -[ページトップへ](6-4-2.md) - diff --git a/automanual/old_delete/6-4-3.md b/automanual/old_delete/6-4-3.md deleted file mode 100644 index edabd0a..0000000 --- a/automanual/old_delete/6-4-3.md +++ /dev/null @@ -1,24 +0,0 @@ - -[前へ](6-4-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-4.md) - -### 6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得 - -図6-20-ACCEPT構文(環境変数値の取得) - -![alt text](Image/6-20.png) - -プログラムのコマンドラインから引数を取得するために使用する。 - -1. ENVIRONMENT-VALUEから受け取る場合、現在のENVIRONMENT-NAMEレジスタにある環境変数の値を取得するようにopensource COBOLランタイムシステムに要求する`18`。 - -2. 環境変数値を取得する、より簡単なアプローチは「ACCEPT ・・・ FROM ENVIRONMENT」を使うことである。その書き方では、ACCEPTコマンド自体で取得する環境変数を指定する。 - -3. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - ---- -`18` DISPLAY文の書き方3を使ってENVIRONMENT-NAMEを目的の環境変数名に設定する。 - - - -[ページトップへ](6-4-3.md) - diff --git a/automanual/old_delete/6-4-4.md b/automanual/old_delete/6-4-4.md deleted file mode 100644 index b08a2f9..0000000 --- a/automanual/old_delete/6-4-4.md +++ /dev/null @@ -1,27 +0,0 @@ - -[前へ](6-4-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-5.md) - -### 6.4.4. ACCEPT文の書き方4 ― 画面データの取得 - -図6-21-ACCEPT構文(画面データの取得) - -![alt text](Image/6-21.png) - -画面節で定義されたデータ項目を利用して、形式化されたコンソールウィンドウ画面からデータを取得するために使用する。 - -1. 一意名-1がSCREEN SECTIONで定義されている場合、すべてのカーソル位置(AT)および属性指定(WITH)はSCREEN SECTION定義から取得され、ACCEPTで指定されたものはすべて無視される。ATおよびWITHオプションは、SCREEN SECTIONで定義されていないデータ項目を受け入れる場合にのみ使う。 - -2. AT句は、画面が読み取られる前に、カーソルを画面上の特定の場所に配置する手段を提供する。定数-3/一意名-4の値は4桁である必要があり、最初の2桁はカーソルを配置する行、最後の2桁は列を示す。 - -3. UPDATEとSCROLLを除いて、ほとんどのWITHオプションについて[5.6](5-6.md)で説明している。SCROLL以外のWITHオプションは、1回だけ指定する必要がある。 - -4. UPDATEオプションは、新しい値を受け取る前に一意名-1の現在の内容を表示する句である。 - -5. SCROLLオプションを使用すると、画面に値が表示される前に、画面上の内容の全体が指定された行数だけ上下にスクロールされる。SCROLL UP句やSCROLL DOWN句を指定することもできる。LINES指定がない場合は「1 LINE」と見なされる。 - -6. オプションの例外処理の構文と使用法については、[6.4.7](6-4-7.md)で説明する。 - - - -[ページトップへ](6-4-4.md) - diff --git a/automanual/old_delete/6-4-5.md b/automanual/old_delete/6-4-5.md deleted file mode 100644 index 0d3aff0..0000000 --- a/automanual/old_delete/6-4-5.md +++ /dev/null @@ -1,21 +0,0 @@ - -[前へ](6-4-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-6.md) - -### 6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得 - -図6-22-ACCEPT構文(日付/時刻の取得)構文 - -![alt text](Image/6-22.png) - -システムの現在の日付や時刻を取得してデータ項目に保存するために使用する。 - -1. システムから取得したデータ、および構造化された書き方は、次の表のように異なっている。 - - 表6-23-ACCEPTオプション(日付/時刻の取得) - - ![alt text](Image/6-23.png) - - - -[ページトップへ](6-4-5.md) - diff --git a/automanual/old_delete/6-4-6.md b/automanual/old_delete/6-4-6.md deleted file mode 100644 index c1426dc..0000000 --- a/automanual/old_delete/6-4-6.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](6-4-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-4-7.md) - -### 6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得 - -図6-24-ACCEPT(画面サイズデータの取得)構文 - -![alt text](Image/6-24.png) - -プログラムが実行されているコンソールウィンドウの(文字位置での)表示可能なサイズを取得するために使用する。 - -1. Windowsコンソールウィンドウなど、ウィンドウの論理サイズが物理コンソールウィンドウの論理サイズをはるかに超える可能性のある環境では、物理コンソールウィンドウのサイズを取得する。 - - - -[ページトップへ](6-4-6.md) - diff --git a/automanual/old_delete/6-4-7.md b/automanual/old_delete/6-4-7.md deleted file mode 100644 index 653faa9..0000000 --- a/automanual/old_delete/6-4-7.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-4-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-1.md) - -### 6.4.7. ACCEPT文の例外処理 - -図6-25-ACCEPT例外処理構文 - -![alt text](Image/6-25.png) - -ACCEPT文の一部の書き方においてEXCEPTION句とNOTEXCEPTION句が利用可能で、ACCEPT文の失敗または成功時に実行されるコードを(それぞれ)指定できる。ACCEPT文ではリターンコードまたはステータスフラグを設定しないため、これが成功と失敗を検出する唯一の方法となる。 - - - -[ページトップへ](6-4-7.md) - diff --git a/automanual/old_delete/6-40-1.md b/automanual/old_delete/6-40-1.md deleted file mode 100644 index 6eaa9f0..0000000 --- a/automanual/old_delete/6-40-1.md +++ /dev/null @@ -1,89 +0,0 @@ - -[前へ](6-39-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-40-2.md) - -## 6.40. SORT - -### 6.40.1. SORT文の書き方1 ― ファイルソート - -図6-94-SORT構文(ファイルソート) - -![alt text](Image/6-94-Sort.png) - -一つ以上のキー項目に従って、大量のデータを整列することができる。 - -1. SORT文で指定された整列ファイルは、データ部のファイル節でソート記述(SD)を使用って定義する必要がある([5.2](5-2.md)を参照)。このファイルは「整列ファイル」と呼ばれる。 - -2. 指定する場合、ファイル名-1およびファイル名-2は、ORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルを参照する必要がある。これらのファイルは、データ部のファイル節のファイル記述(FD)を使って定義する必要がある([5.1](5-1.md#51-ファイル記述)を参照)。ファイル名-1とファイル名-2に同じファイルを使うことができる。 - -3. 一意名-1 ・・・項目は、整列ファイルのレコード内の項目として定義する必要がある。 - -4. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -5. 整列ファイル(1項を参照)がOPENまたはCLOSEされることはない。 - -6. SORT文は次の3段階の働きがある。 - - ステージ1(入力フェーズ): - - a. 整列されるデータは、整列ファイルにロードされる。USING句で指定されたファイルの内容全体を取得するか、手続き名1または手続き名-1 THRU 手続き名-2として定義されたINPUT PROCEDUREを使うことによって達成される。 - - b. USINGを指定する場合、SORTの実行時にファイル名-1 ・・・をOPENにすることはできない。 - - c. INPUT PROCEDUREを使うと、整列されるレコードは必要なロジックを用いて生成され、RELEASE文([6.34](6-34.md))を使うことで整列ファイルに一度につき一つずつ手動で書き込まれる。 - - d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 - - e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 - - g. INPUT PROCEDUREは、手続き名-2(ない場合は手続き名-1)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-2(ない場合は手続き名-1)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。INPUT PROCEDUREが終了したところで、入力フェーズが完了する。 - - h. INPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRETURN([6.35](6-35.md))を実行できない。 - - ステージ2(ソートフェーズ): - - a. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - - b. 例えば、一連の金融取引の流れを整列してみると、SORT文は次のようになる。 - - SORT Sort-File - ASCENDING KEY Transaction-Date - ASCENDING KEY Account-Number - DESCENDING KEY Transaction-Amount - . - . - . - - - このSORT文の効果は、すべての取引を、取引が発生した日付の昇順(過去から最新へ)に整列することである。このプログラムを利用している企業が廃業しない限り、特定の日付で多くの取引が発生する可能性があるため、同じ日付の取引の各グループ内で、取引が行われた口座番号の昇順でサブソートされる。特定の日付に特定の口座で複数の取引が行われる可能性は非常に高いため、第3レベルのサブソートでは、同じ日付の同じ口座のすべての取引を、実際の取引額の降順(最高額から最低額へ)に整列する。2009年8月31日に口座#12345で100.00ドルの取引が二件以上記録された場合、整列キーに追加の「レベル」が指定されていないため、これらの取引が互いにどのように順序付けられているかを正確に予測する方法がない。 - - c. opensource COBOLは、メインフレームコンピュータシステムのように、大容量で高性能な(そして高額な)整列用パッケージを使わないが、利用しているSORTアルゴリズム`25`はこのタスクには十分すぎるほどである。 - - ステージ3(出力フェーズ): - - a. ソートフェーズが完了すると、GIVING句が指定されている場合は整列済みデータがファイル名-2に書き込まれるか、OUTPUT PROCEDUREを使って手続き名-3または手続き名-3 THRU 手続き名-4として定義される。 - - b. GIVING句を指定する場合、SORT文の実行時にファイル名-2 ・・・をOPENにしてはならない。 - - c. OUTPUT PROCEDUREを使用する場合、整列済みレコードは、RETURN文([6.35](6-35.md))を使うことで整列ファイルに一度につき一つずつ手動で読み取られる。 - - d. OUTPUT PROCEDURE内で実行されたSTOPRUN、EXIT PROGRAM、またはGOBACKは、実行中のプログラムとSORT文を終了する。 - - e. 制御をOUTPUT PROCEDUREから転送するGO TO文はSORT文を終了するが、GO TOが制御を転送した位置からプログラムの実行を継続できるようにする。GO TOを使ってOUTPUT PROCEDUREを中止すると、再開することはできないが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、整列ファイルから未返却のレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** - - f. OUTPUT PROCEDUREは、手続き名-4(ない場合は手続き名-3)の最後の文を過ぎた後、制御のフォールスルーによって暗黙的に終了するか、手続き名-4(ない場合は手続き名-3)で実行されるEXIT SECTION/EXIT PARAGRAPHを介して明示的に終了する。OUTPUT PROCEDUREが終了したところで、出力フェーズおよびSORT文自体が完了する。 - - g. OUTPUT PROCEDUREの範囲内では、ファイルのSORT、MERGE([6.27](6-27.md))、またはRELEASE([6.34](6-34.md))を実行できない。 - -7. 整列されるデータの量によってディスク作業ファイルが必要な場合、TMPDIR、TMP、またはTEMP環境変数([7.2.4](7-2.md)を参照)によって定義されたフォルダー内のディスクに自動的に割り当てられる。ディスクファイルは、プログラムの実行終了時に自動的にパージされることはない。一時的な整列用ファイルは、自分で、または整列の終了時にプログラム内から削除する場合に備えて、「cobxxxx.tmp」という名前が付けられる。 - ---- -`24` 整列プロセスにはメモリを割り当てるためのランタイム環境変数(COB_SORT_MEMORY)がある([7.2.4](7-2.md)を参照)。 - -`25` opensource COBOLソートルーチンは、opensource COBOLランタイムライブラリから完全に補うことができる。 - - - -[ページトップへ](6-40-1.md) - diff --git a/automanual/old_delete/6-40-2.md b/automanual/old_delete/6-40-2.md deleted file mode 100644 index a8060ec..0000000 --- a/automanual/old_delete/6-40-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-40-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-41.md) - -### 6.40.2. SORT文の書き方2 ― テーブルソート - -図6-95-SORT構文(テーブルソート) - -![alt text](Image/6-95-Set.png) - -一つ以上のキー項目に従って、比較的少量のデータ、つまり、データ部のテーブルに含まれるデータを整列する。 - -1. テーブル名データ項目には、OCCURS句が必要である。 - -2. 一意名-1 ・・・項目が存在する場合は、テーブル名に従属するデータ項目として定義する必要がある。 - -3. WITH DUPLICATES IN ORDER句は互換性の目的でサポートされているが、機能はしない。 - -4. テーブル名内のデータは、SORT文で作成されたキー指定に従って所定の位置で整列される(つまり、整列ファイルは必要ない)。 - -5. 現在、SORT文でキー指定が行われていないテーブルソートはサポートされておらず、コンパイラによって拒否される。 - -6. 整列は、(存在する場合は)SORT文で指定されたCOLLATING SEQUENCEに従って、SORT文内のASCENDING KEYまたはDESCENDING KEYによって定義した順序でデータレコードを配置することで処理が行われる。何も定義されていない場合は、実行用計算機段落によって、PROGRAM COLLATING SEQUENCEが指定、または暗示される。キーは、レベル78またはレベル88のデータ項目を除いて、サポートされているものであれば、任意のデータ型とUSAGEを設定することができる。 - -7. SORT文はテーブル名内の所定の位置で実行されるため、整列ファイルは必要ない。 - - - -[ページトップへ](6-40-2.md) - diff --git a/automanual/old_delete/6-41.md b/automanual/old_delete/6-41.md deleted file mode 100644 index 64090d7..0000000 --- a/automanual/old_delete/6-41.md +++ /dev/null @@ -1,41 +0,0 @@ - -[前へ](6-40-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-42.md) - -## 6.41. START - -図6-96-START構文 - -![alt text](Image/6-96-Start.png) - -START文は、後続の順次読み取り操作のためのファイル内の論理開始点を定義する。 - -1. ファイル名-1は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルである必要がある。 - -2. ファイル名-1は、ACCESS MODE DYNAMICまたはACCESS MODE SEQUENTIALがSELECTで指定されている必要がある。 - -3. ファイル名-1はSTART文の実行時に、INPUTモードまたはI-OモードのいずれかでOPEN([6.31](6-31.md))の状態である必要がある。 - -4. KEY句が指定されていない場合、「**KEY IS EQUAL TO** 一意名-1」が指定されたとみなす。 - -5. ファイル名-1がORGANIZATION RELATIVEファイルの場合、一意名-1はファイルのRELATIVE KEYでなければならない([4.2.1.2](4-2-1-2.md)を参照)。 - -6. ファイル名-1がORGANIZATION INDEXEDファイルの場合、一意名-1はファイルのRECORD KEYまたはALTERNATE RECORD KEY項目の一つでなければならない([4.2.1.3](4-2-1-3.md)を参照)。 - -7. START文が正常に実行された後、ファイル名-1データへの内部レコードポインターは、ファイル名-1に対して実行された後続の順次READ文が読み取られるように配置される。 - - a. 指定された関係チェックがEQUALTO、GREATER THAN、GREATER THAN OR EQUAL TO(または構文上同じもの)である場合にKEY句による指定を満たす最初のレコード。 - - b. KEY句による指定を満たす最後のレコードは、指定された関係チェックがLESS THANまたはLESS THAN OR EQUAL TO(または構文上同じもの)であるということである。 - -8. START文は、後続の順次READ文のためにファイルを配置するだけであり、実際にファイル名-1の01レベルのレコードに新しいデータを入力することはない。KEY句を満たすレコードを読み取るには、START文が成功した後に順次READ文を発行する必要がある。 - -9. START文を実行中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(つまり命令文-1が実行される)。このようなエラーは、入出力エラーまたは「キーが存在しない」エラー(ファイルステータス23)である可能性があり、KEY句の要件を満たすレコードが存在しないことを示す。 - -10. START文を実行中にエラーが発生しなかった場合、NOT INVALID KEY句がトリガーされ、命令文-2が実行される。 - -11. START文が目的のレコードを見つけ(または見つけなくても)、指定された命令文-1または命令文-2を実行すると(または実行しなくても)、制御はSTARTに続く次の文に移る。 - - - -[ページトップへ](6-41.md) - diff --git a/automanual/old_delete/6-42.md b/automanual/old_delete/6-42.md deleted file mode 100644 index be9019b..0000000 --- a/automanual/old_delete/6-42.md +++ /dev/null @@ -1,26 +0,0 @@ - -[前へ](6-41.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-43.md) - -## 6.42. STOP - -図6-97-STOP構文 - -![alt text](Image/6-97-Stop.png) - -STOP文はプログラムを停止し、オペレーティングシステムに制御を戻す。 - -1. RETURNING句とGIVING句は同意義のものとして利用できる。 - -2. 定数-2オプションは構文的にサポートされているが、廃止されているため、使用すると(警告とともに)拒否されてしまう。 - -3. RETURNING句またはGIVING句を使うと、プログラムは数値リターンコードをオペレーティングシステムに返すことができ、リターンコードの値は、-2147483648から+2147483647の範囲にすることができる。 - -4. 以下の二つのコードは同じものである。リターンコードがオペレーティングシステムに返される、二つの異なる方法を以下に示す: - - STOP RUN RETURNING 16 MOVE 16 TO RETURN-CODE - STOP RUN - - - -[ページトップへ](6-42.md) - diff --git a/automanual/old_delete/6-43.md b/automanual/old_delete/6-43.md deleted file mode 100644 index 5c151e9..0000000 --- a/automanual/old_delete/6-43.md +++ /dev/null @@ -1,37 +0,0 @@ - -[前へ](6-42.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-1.md) - -## 6.43. STRING - -図6-98-STRING構文 - -![alt text](Image/6-98-String.png) - -STRING文は、複数の文字列のすべて、または一部を連結して新しい文字列を形成するために使われる。 - -1. 定数-1、定数-2、一意名-1、一意名-2、および一意名-3は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義しなければならない。これらの一意名はいずれも集団項目である可能性がある。 - -2. 一意名-4は、ゼロより大きい値を持ち、編集されていない基本整数値のデータ項目である必要がある。 - -3. 各定数-1/一意名-1は送信項目と呼ばれ、一意名-3は受け取り項目と呼ばれる。 - -4. 各送信項目の内容は文字ごとに受け取り項目にコピーされる。最初の送信項目は、WITH POINTER句で指定された文字位置から始まる受け取り項目へコピーされる(文字位置には1から順に番号が振られる)。WITH POINTER句が指定されていない場合は、1が割り当てられる。2番目の送信項目は、最初の項目によって転送された最後の文字の次の文字位置から始まる受け取り項目へコピーされる。 - -5. 受け取り項目の最後の文字位置が入力されると、現在の送信項目にコピーすべきデータが残っているかどうか、または処理すべき送信項目が残っているかどうかに関係なく、STRING処理は終了する。 - -6. 送信項目にDELIMITED BY SIZEオプションが指定されている場合、送信項目の全体がコピーされる。DELIMITED BY句が指定されていない場合、DELIMITED BY SIZEが割り当てられる。 - -7. 送信項目にSIZEオプションのないDELIMITED BY句がある場合、一意名-2または**すべての**定数-2で指定された文字順序が送信項目で見つかると、送信項目のコピーが終了する。 - -8. 受け取り項目(一意名-3)は、STRING文の開始時に(SPACESまたはその他の値に)初期化されることも、コピーされる送信項目の文字総数が受け取り項目のサイズよりも少ない場合にSPACEで埋められることもない。必要に応じて、STRINGを実行する前に受け取り項目を自分で明示的にINITIALIZE文([6.24](6-24.md))を使って初期化することができる。 - -9. 一意名-4の値が1未満の場合、またはすべての送信項目が完全に処理される前に受け取り項目の空白が不足している場合、オーバーフロー状態になる。このような場合にON OVERFLOW句が存在する時、命令文-1が実行される。 - -10. オーバーフロー条件がなく、NOT ON OVERFLOW句が存在する場合は、命令文-2が実行される。 - -11. STRING文が終了して命令文が実行されると、制御はSTRING文に続く次の文に移る。 - - - -[ページトップへ](6-43.md) - diff --git a/automanual/old_delete/6-44-1.md b/automanual/old_delete/6-44-1.md deleted file mode 100644 index 5623337..0000000 --- a/automanual/old_delete/6-44-1.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-43.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-2.md) - -## 6.44. SUBTRACT - -### 6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM - -図6-99-SUBSTRACT構文 - -![alt text](Image/6-99-Subtract.png) - -FROMの前にあるすべての引数(一意名-1または定数-1)の算術合計を生成し、その合計からTO(一意名-2)の後にリストされている各一意名を減算する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - - - -[ページトップへ](6-44-1.md) - diff --git a/automanual/old_delete/6-44-2.md b/automanual/old_delete/6-44-2.md deleted file mode 100644 index 418f750..0000000 --- a/automanual/old_delete/6-44-2.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](6-44-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-44-3.md) - -### 6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING - -図6-100-SUBSTRACT GIVING構文 - -![alt text](Image/6-100-Subtract.png) - -FROM(一意名-1または定数-1)の前にあるすべての引数の算術合計を生成し、その合計を一意名-2の内容から減算し、GIVING(一意名-3)の後にリストされた一意名の内容をその結果に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - - - -[ページトップへ](6-44-2.md) - diff --git a/automanual/old_delete/6-44-3.md b/automanual/old_delete/6-44-3.md deleted file mode 100644 index 2fc13d9..0000000 --- a/automanual/old_delete/6-44-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-44-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-45.md) - -### 6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING - -図6-101-SUBSTRACT CORRESPONDING構文 - -![alt text](Image/6-101-Subtract.png) - -二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 - -1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZE ERRORおよびNOT ON SIZE ERROR句は、ADD文([6.5.1](6-5-1.md))の場合と同じように使われる。 - - - -[ページトップへ](6-44-3.md) - diff --git a/automanual/old_delete/6-45.md b/automanual/old_delete/6-45.md deleted file mode 100644 index 7479c24..0000000 --- a/automanual/old_delete/6-45.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-44-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-46.md) - -## 6.45. SUPPRESS - -図6-102-SUPPRESS構文 - -![alt text](Image/6-102-Suppress.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、SUPPRESS文は機能しない。 - - - -[ページトップへ](6-45.md) - diff --git a/automanual/old_delete/6-46.md b/automanual/old_delete/6-46.md deleted file mode 100644 index e7fcdf4..0000000 --- a/automanual/old_delete/6-46.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-45.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-47.md) - -## 6.46. TERMINATE - -図6-103-TERMINATE構文 - -![alt text](Image/6-103-Terminate.png) - -opensource COBOLコンパイラによって構文的に認識されるが、RWCS(COBOL Report Writer)は現在opensource COBOLでサポートされていないため、TERMINATE文は機能しない。 - - - -[ページトップへ](6-46.md) - diff --git a/automanual/old_delete/6-47.md b/automanual/old_delete/6-47.md deleted file mode 100644 index a0cec1d..0000000 --- a/automanual/old_delete/6-47.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](6-46.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-48.md) - -## 6.47. TRANSFORM - -図6-104-TRANSFORM構文 - -![alt text](Image/6-104-Transform.png) - -TRANSFORM文は、データ項目の一連の文字をスキャンして置換する。それは「TO」句の前後の引数によって定義される。 - -1. 「TO」句の前に指定された定数-1または一意名-2はターゲット文字列と呼ばれ、置き換える一意名-1の文字を定義する。 - -2. 「TO」句の後に指定された定数-2または一意名-3は置換文字列と呼ばれ、定数-1または一意名-2で指定された文字と置き換える一意名-1の文字を定義する。 - -3. TRANSFORM文は1985年のCOBOL標準で廃止され、その機能はINSPECT文、具体的にはCONVERTING句([6.26](6-26.md))に含まれている。 - -4. 一意名-1の内容が一文字ずつスキャンされる。その文字がターゲット文字列に含まれている場合、置換文字列内の(相対位置に)対応する文字が一意名-1の内容を置換する。 - -5. 置換文字列の長さがターゲット文字列の長さを超える場合、超過分は無視される。 - -6. ターゲット文字列の長さが置換文字列の長さを超える場合、長さの差を補うために置換文字列の右側に空白が埋め込まれていると見なされる。 - - 図6-105-機能的なTRANSFORM文 - - ![alt text](Image/6-105-Transform.png) - - - -[ページトップへ](6-47.md) - diff --git a/automanual/old_delete/6-48.md b/automanual/old_delete/6-48.md deleted file mode 100644 index bf31b3e..0000000 --- a/automanual/old_delete/6-48.md +++ /dev/null @@ -1,22 +0,0 @@ - -[前へ](6-47.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-49.md) - -## 6.48. UNLOCK - -図6-106-UNLOCK構文 - -![alt text](Image/6-106-Unlock.png) - -この文は、まだ書き込まれていないファイルI/Oバッファーを指定されたファイル(存在する場合)に同期し、指定されたファイルに属するレコードに対して保持されているレコードロックを解放する。 - -1. ファイル名-1がSORTファイルの場合、アクションは実行されない。 - -2. すべてのopensource COBOL実装がロックをサポートしているわけではない。それらが構築されたオペレーティングシステムと、opensource COBOLが生成されたときに使用されたビルドオプションによって異なる。`26`これらのopensource COBOL実装の一つを使用するプログラムがUNLOCKを発行すると、プログラムは無視されてコンパイラメッセージは発行されない。必要に応じて、バッファー同期は引き続き行われる。 - ---- -`26` このマニュアルの著者は、例えば、MinGWビルド/ランタイム環境を利用するWindows用のopensource COBOLビルドを使い、高度なファイル入出力にBerkeleyデータベースモジュールを利用する。opensource COBOLビルドはLOCKingをサポートしていないが、UNIXビルドは一般的にレコードロックをサポートしている。 - - - -[ページトップへ](6-48.md) - diff --git a/automanual/old_delete/6-49.md b/automanual/old_delete/6-49.md deleted file mode 100644 index 863faa3..0000000 --- a/automanual/old_delete/6-49.md +++ /dev/null @@ -1,68 +0,0 @@ - -[前へ](6-48.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-50.md) - -## 6.49. UNSTRING - -図6-107-UNSTRING構文 - -![alt text](Image/6-107-Unstring.png) - -UNSTRING文は文字列を解析し、そこから部分文字列を抽出する。 - -1. 一意名-1から一意名-5、一意名-7、および一意名-8は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要があり、これらの一意名はいずれも集団項目の可能性がある。 - -2. 定数-1および定数-2は、英数字の定数でなければならない。 - -3. 一意名-6および一意名-9から一意名-11は、編集不可である基本の整数値項目でなければならない。 - -4. 一意名-10の値は0より大きい必要がある。 - -5. 一意名-1はソース文字列として知られ、一意名-4と一意名-7は宛先項目として知られている。 - -6. ソース文字列は、一意名-10で示される文字位置から(WITH POINTER句がない場合は1の場所から)始まる部分文字列に分割される。一意名-10の初期値が1未満、またはソース文字列のサイズよりも大きい場合、オーバーフロー状態になる。オーバーフローについては、この後の13項で説明する。 - -7. 部分文字列はDELIMITED BY句で指定された区切り文字列によって識別される。ALLオプションを使用すると、区切り文字順序を任意の長さの区切り文字定数のオカレンス順序にすることができるが、オプションがないと、各オカレンスは個別の区切り文字として扱われる。 - -8. 二つの連続する区切り文字順序は、空白の部分文字列を識別する。 - -9. ソース文字列が部分文字列に解析される例を次に示す: - - ![alt text](Image/6-49-1.png) - - 図6-108-STRING文の例 - - ![alt text](Image/6-108-Unstring.png) - - 示されているサンプルデータからUNSTRING文は合計5つの部分文字列を識別し、結果は次のMOVE文が実行されたかのようになる。 - - ![alt text](Image/6-49-2.png) - - すべての宛先項目に入力するのに十分な部分文字列を識別できない場合、データが見つからない部分文字列は変更されない。 - - すべての部分文字列を受け取るのに十分な宛先項目が指定されていない場合、余分な部分文字列は「破棄」されるか「オーバーフロー」状態が存在する。オーバーフローについては、この後の13項で説明する。 - -10. 各宛先項目には、オプションのDELIMITER句を使用することができる。DELIMITER句が指定されている場合、一意名-5(または一意名-8)には、MOVEする宛先項目の部分文字列を識別するために使用される区切り文字列が含まれる。前に示した例を用いると、DELIMITER一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-3.png) - -11. 各宛先項目には、オプションのCOUNT句を使用することができる。COUNT句が指定されている場合、一意名-6(または一意名-9)には、MOVEする宛先項目の部分文字列のサイズが含まれる。前に示した例を用いると、COUNT一意名に対して次の暗黙のMOVEが発生する。 - - ![alt text](Image/6-49-4.png) - -12. TALLYING句(存在する場合)は、解析された部分文字列が宛先項目にMOVEされるたびに1ずつインクリメントされる。この項目をゼロに初期化する場合は、UNSTRINGでは行われないため、自分で行う必要がある。 - -13. オプションのON OVERFLOW句が存在する場合、オーバーフロー条件が発生すると(6項および7項を参照)、命令文-1が実行される。ON OVERFLOW句がトリガーされた場合、NOT ON OVERFLOW句(存在する場合)は無視される。 - -14. オプションのNOT ON OVERFLOW句が存在せず、オーバーフロー条件が発生しない場合(6項および7項を参照)、命令文-2が実行される。NOT ON OVERFLOW句がトリガーされた場合、ON OVERFLOW句(存在する場合)は無視される。 - -15. ソース文字列が解析されると、適切な宛先項目が更新され(DELIMITER/COUNT項目とともに)、一意名-11(TALLYING)がインクリメントされ、ON OVERFLOWまたはNOT ON OVERFLOW命令文が実行される。制御はUNSTRING文に続く次の文に移る。 - ---- -`27` 空白文字列のMOVEは、空白のMOVEと同じである。 - -`28` 最後の部分文字列には常に空白の区切り文字があり、DELIMITER項目にMOVEすると空白になる。 - - - -[ページトップへ](6-49.md) - diff --git a/automanual/old_delete/6-5-1.md b/automanual/old_delete/6-5-1.md deleted file mode 100644 index 1d1a743..0000000 --- a/automanual/old_delete/6-5-1.md +++ /dev/null @@ -1,33 +0,0 @@ - -[前へ](6-4-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-2.md) - -## 6.5. ADD - -### 6.5.1. ADD文の書き方1 ― ADD TO - -図6-26-ADD TO構文 - -![alt text](Image/6-26.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、その合計値をTOのにリストされている各一意名(一意名-2)に追加する。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 定数-1は数字定数でなければならない。 - -3. 整数以外の結果が生成されるか、あるいはROUNDEDキーワードを持つ一意名-2データ項目に割り当てられた場合、一意名-2に格納された結果は、数学的規則に従って最下位桁を切り上げられる。例えば、PICTUREが99V99で、格納される結果が12.152の場合、値は12.15になるが、結果が76.165の場合では76.17の値が格納される。 - -4. LENGTH OF句が定数-1または一意名-1で使用されている場合、計算プロセスの中で使われる算術値は、データ項目または定数のバイト単位での長さであり、実際の値ではない。 - -5. ONSIZE ERROR句を使うと、一意名-2の項目に格納される結果がその項目の容量を超えた場合に実行されるコードを指定することができる。例えば、PICTUREが99V99で、格納される結果が101.43の場合、SIZE ERROR条件が発生する。ON SIZE ERROR句がない場合、opensource COBOLは01.43の値を項目に格納する。ON SIZE ERROR句を使用すると、一意名-2項目の値は変更されずに、命令文-1が実行される。例として、デモプログラムとその出力を示した(図6-27)。 - - 図6-27-ON SIZE ERROR句を使用するサンプルプログラム - - ![alt text](Image/6-27.png) - -6. NOT ON SIZE ERROR句を指定すると、ADD文で項目サイズのオーバーフロー条件が発生しなかった場合に命令文が実行される。 - - - -[ページトップへ](6-5-1.md) - diff --git a/automanual/old_delete/6-5-2.md b/automanual/old_delete/6-5-2.md deleted file mode 100644 index 5a1591e..0000000 --- a/automanual/old_delete/6-5-2.md +++ /dev/null @@ -1,25 +0,0 @@ - -[前へ](6-5-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-5-3.md) - -### 6.5.2. ADD文の書き方2 ― ADD GIVING - -図6-28-ADD GIVING構文 - -![alt text](Image/6-28.png) - -TOのにあるすべての引数(一意名-1または定数-1)の算術和を生成し、一意名-2(存在する場合)に合計値を追加、GIVINGのにリストされている一意名(一意名-3)の内容を合計値に置き換える。 - -1. 一意名-1および一意名-2は、編集不可の数値データ項目でなければならない。 - -2. 一意名-3は数値データ項目でなければならないが、編集可能な場合もある。 - -3. 定数-1は数字定数でなければならない。 - -4. 一意名-2の内容は変更できない。 - -5. ROUNDED、LENGTH OF、ON SIZEERRORおよびNOTON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - - - -[ページトップへ](6-5-2.md) - diff --git a/automanual/old_delete/6-5-3.md b/automanual/old_delete/6-5-3.md deleted file mode 100644 index 03d9d52..0000000 --- a/automanual/old_delete/6-5-3.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-5-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-6.md) - -### 6.5.3. ADD文の書き方3 ― ADD CORRESPONDING - -図6-29-ADD CORRESPONDING構文 - -![alt text](Image/6-29.png) - -二つの一意名に従属して見つかったデータ項目に対応する個々のADD TO文と、同等のコードを生成する。 - -1. 対応するものを識別するための規則については、[6.28.2](6-28-2.md) – MOVE CORRESPONDINGで説明している。 - -2. ROUNDED、ON SIZEERRORおよびNOT ON SIZE ERROR句の使い方と動作は、[6.5.1](6-5-1.md) ADD文の書き方1で説明している。 - - - -[ページトップへ](6-5-3.md) - diff --git a/automanual/old_delete/6-50.md b/automanual/old_delete/6-50.md deleted file mode 100644 index 5f3b6f8..0000000 --- a/automanual/old_delete/6-50.md +++ /dev/null @@ -1,88 +0,0 @@ - -[前へ](6-49.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-1.md) - -## 6.50. WRITE - -図6-109-WRITE構文 - -![alt text](Image/6-109-Write.png) - -WRITE文は、OPENファイルに新しいレコードを書き込む。 - -1. レコード名-1は、OUTPUT、I-OまたはEXTENDに対して、現在もOPEN([6.31](6-31.md))状態であるファイルの、ファイル記述(FD-[5.1](5-1.md)を参照)に従属する01レベルのレコードとして定義する必要がある。 - -2. 定数-1または一意名-1は、英数字のUSAGE DISPLAYデータとして明示的または暗黙的に定義する必要がある。一意名-1は集団項目の場合がある。 - -3. オプションのFROM句を使用すると、レコード名-1をファイルに書き込む前に、定数-1または一意名-1が暗黙的にレコード名-1にMOVEする。 - -4. レコードのLOCKオプションについては[6.1.8.2](6-1-8-2.md)で説明している。 - -5. ADVANCING句は、レポートが書き込まれるORGANIZATION LINE SEQUENTIALファイルで使われることを目的としている。この句を他のORGANIZATIONで使用すると、コンパイラによって完全に拒否されるか(ORGANIZATION IS RELATIVEまたはORGANIZATION IS INDEXED)、ファイルに不要な文字が書き込まれる可能性がある(ORGANIZATION IS RECORD BINARY SEQUENTIAL)。 - -6. ADVANCING n LINES句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、指定された数の改行(X"10")文字をファイルに導入する。 - -7. ORGANIZATION LINE SEQUENTIALファイルへのWRITE文でADVANCING句が指定されていない場合、AFTER ADVENCING 1 LINEが指定されたとみなす。 - -8. ADVANCING PAGE句は、書き込まれたレコードの前(AFTER ADVANCING)または書き込まれたレコードの後(BEFORE ADVANCING)のいずれかに、改ページ(X"0C")文字をファイルに導入する。 - -9. 書き込まれるファイルのFDにLINAGE句([5.1](5-1.md#51-ファイル記述))が含まれている場合、内部のラインカウンターはランタイムライブラリによって維持され、LINAGE定義のLINES AT TOPおよび/またはLINES AT BOTTOM指定に対応するかたちで、適切な数のASCII改行文字がファイルに自動的に書き込まれる。 - -10. AT END-OF-PAGE句とNOT AT END-OF-PAGE句は、ファイル記述にLINAGE句が含まれているORGANIZATION LINE SEQUENTIALまたはORGANIZATION RECORD BINARY SEQUENTIALファイルに対してのみ有効である([5.1](5-1.md))。 - -11. WRITE処理中にページ終了条件が発生した場合、AT END-OF-PAGE句がトリガーされる(したがって命令文-1が実行される)。ページ終了条件は、WRITE文がデータ行または改行文字をファイルのページフッター領域内の行位置に導入したときに発生する([図5-3](5-1.md#5-3.png)を参照)。 - -12. WRITE処理中にページ終了条件が発生しなかった場合、NOT AT END-OF-PAGE句がトリガーされる(したがって命令文-2が実行される)。 - -13. 目的とする結果を得るには、ADVANCING句とAT END-OF-PAGE句の組合せの動作を理解する必要がある。そのために、これらの句を含むWRITE文で発生する一連のイベントを次に示す: - - a. AFTER ADVANCINGが指定されている場合: - - - AFTER ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - b. データレコードがファイルに書き込まれる。内部のLINAGEカウンターが、レコードの書き込みによって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - c. BEFORE ADVANCINGが指定されている場合: - - - BEFORE ADVANCING PAGEが指定された場合、改ページ文字がファイルに書き込まれ、内部のページ終了スイッチが設定される。 - - - それ以外の場合は、適切な数の改行文字(ADVANCING n LINES)がファイルに書き込まれる。内部のLINAGEカウンターが、改行によって論理ページの最大使用可能行数が使い果たされたことを示している場合、内部のページ終了スイッチが設定される。 - - d. 内部のページ終了スイッチが設定されていない場合、命令文-2(存在する場合)が実行される。 - - - それ以外の場合(内部のページ終了スイッチが設定されている場合)、命令文-1(存在する場合)が実行される。 - -14. 上記13項を基に、AT END-OF-PAGE句でページ見出しを自動生成できるサンプルコードは以下のようになる。 - - FD Report-File - LINAGE IS 66 LINES - ........WITH FOOTER AT 57 - ........LINES AT TOP 3 - ........LINES AT BOTTOM 3 - . - . - . - OPEN OUTPUT Report-File - PERFORM Generate-Page-Header - . - . - . - WRITE Report-Rec AFTER ADVANCING 1 LINE - AT END-OF-PAGE PERFORM Generate-Page-Header - END-WRITE - . - . - . - CLOSE Report-File - -15. INVALIDKEY句とNOT INVALID KEY句は、ORGANIZATION RELATIVEまたはORGANIZATION INDEXEDファイルで使われるWRITE文でのみ有効である。 - -16. 書き込み中にエラーが発生した場合、ON INVALID KEY句がトリガーされる(したがって命令文-3が実行される)。この場合、入出力エラーまたは「キーが既に存在している」エラー(ファイルステータス22)である可能性があり、既に存在するレコードを書き込もうとしたことを示している。 - -17. 書き込み中にエラーが発生しなかった場合、NOT ON INVALID KEY句がトリガーされる(したがって命令文-4が実行される)。 - - - -[ページトップへ](6-50.md) - diff --git a/automanual/old_delete/6-6.md b/automanual/old_delete/6-6.md deleted file mode 100644 index 902885f..0000000 --- a/automanual/old_delete/6-6.md +++ /dev/null @@ -1,49 +0,0 @@ - -[前へ](6-5-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-7.md) - -## 6.6. ALLOCATE - -図6-30-ALLOCATE構文 - -![alt text](Image/6-30.png) - -ALLOCATE文は、実行時に動的にメモリを割り当てるために使用する。 - -1. 式-1を使う場合、ゼロ以外の正の整数値を持つ算術式である必要がある。「式-1 CHARACTERS」オプションを使う時は、06FEB2009バージョンの構文パーサーを混乱させないように式を括弧で囲んで、「一意名-1」オプションと間違えないように気を付ける。パーサーが「混乱」する可能性については、今後、opensource COBOL 1.1 tarballで修正される予定である。 - -2. 一意名-1は、WORKING-STORAGEまたはLOCAL STORAGEのBASED属性で定義された01レベル項目である必要がある。連絡節で定義されている01項目にすることもできるが推奨しない。 - -3. 一意名-2はUSAGE POINTERデータ項目である必要がある。 - -4. RETURNING句は、割り当てられたメモリブロックのアドレスを、指定されたUSAGE POINTER項目に返す。そのUSAGE POINTER項目に対してFREE文([6.19](6-19.md))が発生した場合に備え、opensource COBOLは割り当てられたメモリブロックが最初に要求されたサイズの情報を保持している。 - -5. 「一意名-1」オプションを使うと、INITIALIZEは一意名-1の定義に存在するPICTURE句およびVALUE句(存在する場合)に従って、割り当てられたメモリブロックを初期化する。INITIALIZE文については、[6.24](6-24.md)で説明している。 -6. 「式-1CHARACTERS」オプションでは、INITIALIZEは割り当てられたメモリブロックをバイナリゼロに初期化する。 - -7. INITIALIZE句を使わない場合、割り当てられたメモリの初期内容は、プログラムが実行されているオペレーティングシステムに対して有効なメモリ割り当てのルールに委ねられる。 - -8. 基本的な使用法は二つあり、最も単純なものは次の例である。 - - ALLOCATE My-01-Item - - `My-01-Item`の定義済みサイズ(BASED属性で定義されている必要がある)と同じサイズのストレージブロックが割り当てられる。この時ストレージブロックのアドレスが`My-01-Item`の基本アドレスとなり、そのブロックと下位データ項目がプログラム内で使用できるようになる。 - - 二つ目の使用法は以下の通りである。 - - ALLOCATE LENGTH OF My-01-Item CHARACTERS RETURNING The-Pointer. - - SET ADDRESS OF My-01-Item TO The-Pointer. - - ALLOCATE文は、`My-01-Item`に必要な分と全く同じサイズのメモリブロックを割り当て、アドレスはポインタ変数に返される。次にSET分は、`My 01-Item`のアドレスを「ベース」として、ALLOCATEによって作成されたメモリブロックのアドレスにする。 - - 上記二つの使用法の唯一の機能上の違いとしては、最初の例で、INITIALIZED句がある場合は尊重されることである。 - -9. ストレージが割り当てられる前、またはストレージが解放された後にBASEDデータ項目を参照すると、予測できない結果が発生する`19`。 - ---- -`19` COBOL標準では、「unpredictable results - 予測不可能な結果」という用語で、予期しないまたは望ましくない動作を示し、プログラムは無効なアドレスへのアクセスを中止する可能性がある。 - - - -[ページトップへ](6-6.md) - diff --git a/automanual/old_delete/6-7.md b/automanual/old_delete/6-7.md deleted file mode 100644 index 27ee31f..0000000 --- a/automanual/old_delete/6-7.md +++ /dev/null @@ -1,54 +0,0 @@ - -[前へ](6-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-1.md) - -## 6.7. CALL - -図6-31-CALL構文 - -![alt text](Image/6-31.png) - -CALL文は、サブプログラムまたはサブルーチンと呼ばれる別のプログラムに制御を移行するために使われる。 - -1. サブプログラムは最終的に制御をCALLする側のプログラムに戻し、CALL文の直後の文から実行を再開することが期待される。ただし、サブプログラムはCALLする側のプログラムに戻る必要はなく、必要に応じてプログラムの実行を自由に停止することができる。 - -2. EXCEPTIONキーワードとOVERFLOWキーワードは同意義のものとして扱うことができる。 - -3. RETURNINGキーワードとGIVINGキーワードは同意義のものとして扱うことができる。 - -4. 定数-1またはindetifier-1の値は、呼び出しをするサブプログラムの記述項ポイントである。この記述項ポイントの使用方法の詳細については、[8.1.4](8-1-4.md)および[8.1.5](8-1-5.md)で説明する。 - -5. 一意名-1を使ってサブルーチンを呼び出すと、ランタイムシステムに、動的にロード可能なモジュールを呼び出すよう強制される。このモジュールについては、[8.1.4](8-1-4.md)で説明する。 - -6. ON EXCEPTION句では、動的にロード可能なモジュールのロードが失敗した場合に実行されるコードを指定する。ON EXCEPTIONを指定すると、エラーメッセージを生成してプログラムを停止する、という初期動作が上書きされ、指定したロジックへと置き換えられる。 - -7. NOT ON EXCEPTION句では、動的にロード可能なモジュールのロードが成功した場合に実行されるコードを指定する。 - -8. USING句では、CALLする側のプログラムからサブプログラムに渡される可能性のある引数のリストを定義する。引数が渡される方法は、BY句によって異なる。 - -9. CALLされるサブプログラムがopensource COBOLプログラムであり、そのプログラムのPROGRAM-ID句にINITIAL属性が指定されている場合、サブプログラムが実行されるたびに、データ部の全てのデータが初期状態に復元される`20`。この[再]初期化動作は、INITIALの使用(または不使用)に関係なく、サブプログラムのLOCAL-STORAGE SECTION(存在する場合)で定義されたすべてのデータに適用される。 - -10. BY REFERENCE句(既定値)は引数のアドレスをサブプログラムに渡し、サブプログラムがその引数の値を変更できるようにする。引数として渡されるのが定数値であるとき、これは危険な行為となる場合がある。 - -11. BY CONTENTは、引数のコピーのアドレスをサブプログラムに渡す。サブプログラムが引数の値を変更した場合、CALLする側のプログラムに戻された元のバージョンは変更されない。図6-32に示すように、これは定数値をサブプログラムに渡すための最も安全な方法である。 - - 図6-32-CALL BY REFERENCE句(望ましくない影響を及ぼす場合がある) - - ![alt text](Image/6-32.png) - -12. BY VALUEは、引数のアドレスを引数として渡す。図6-33にコーディング例を示したが、サブプログラムがopensource COBOLで記述されている場合は、おそらくこのコーディングは不要である。なぜならこの機能は、C、C ++およびその他の言語との互換性を持たせるために存在するからである。 - - 図6-33-CALL BY VALUE句 - - ![alt text](Image/6-33.png) - -13. RETURNING句では、サブルーチンが値を返すデータ項目を指定することができる。CALLでこの句を使う場合、サブルーチンの手続き部のヘッダーにRETURNING句を含める必要がある。もちろんサブルーチンは、BY REFERENCEによって渡された任意の引数に値を返すことができる。 - -14. その他詳細については[6.8](6-8-1.md)(CANCEL)、[6.16](6-16.md)(ENTRY)、[6.18](6-18.md)(EXIT)、および[6.21](6-21.md)(GOBACK)で説明する。 - ---- -`20` サブプログラム内のどのエントリポイントがCALLされるかは関係しない。 - - - -[ページトップへ](6-7.md) - diff --git a/automanual/old_delete/6-8-1.md b/automanual/old_delete/6-8-1.md deleted file mode 100644 index 9bd376e..0000000 --- a/automanual/old_delete/6-8-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](6-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-8-2.md) - -## 6.8. CANCEL - -### 6.8.1. CANCEL文の書き方1 ― CANCEL - -図6-34-CANCEL構文 - -![alt text](Image/6-34.png) - -CANCEL文は、定数-1または一意名-1として指定された記述項ポイントを含む、動的にロード可能なモジュールをメモリから破棄する。 - -1. CANCELによって破棄された動的にロード可能なモジュールがその後再実行されると、そのモジュールのデータ部のすべてのストレージが再び初期状態になる。 - - - -[ページトップへ](6-8-1.md) - diff --git a/automanual/old_delete/6-8-2.md b/automanual/old_delete/6-8-2.md deleted file mode 100644 index 873aba5..0000000 --- a/automanual/old_delete/6-8-2.md +++ /dev/null @@ -1,15 +0,0 @@ - -[前へ](6-8-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-9.md) - -### 6.8.2. CANCEL文の書き方2 ― CANCEL ALL - -図6-35-CANCEL ALL構文 - -![alt text](Image/6-35(cancel).png) - -CANCEL ALL文は、一度でも呼ばれたすべての動的にロード可能なモジュールをメモリから破棄する。 - - - -[ページトップへ](6-8-2.md) - diff --git a/automanual/old_delete/6-9.md b/automanual/old_delete/6-9.md deleted file mode 100644 index 3175531..0000000 --- a/automanual/old_delete/6-9.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](6-8-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](6-10.md) - -## 6.9. CLOSE - -図6-36-CLOSE構文 - -![alt text](Image/6-36-CLOSE.png) - -CLOSE文は、指定されたファイルまたは現在実装されているリール/ユニットへのプログラムアクセスを終了する。 - -1. CLOSE文は、正常にOPENされたファイルに対してのみ実行できCLOSE文は、正常に開かれたファイルに対してのみ実行できる。 - -2. REEL、UNIT、およびNO REWIND句は、ORGANIZATION SEQUENTIAL(LINEまたはRECORD BINARY)SEQUENTIALファイルでのみ使うことができる。REELとUNITという言葉は同意義で使われる場合があり、複数のリムーバブルテープ/ディスクに保存されている、または書き込まれるファイルを反映している。すべてのシステムがそのようなデバイスをサポートしているわけではないため、複数ユニットのファイルを操作できるといったopensource COBOLの特性がシステムでは機能しない場合がある。 - -3. REELおよびUNIT句は、SELECT句でMULTIPLE REELまたはMULTIPLE UNITが指定されているファイルでの使用を目的としている。ランタイムシステムが複数ユニットのファイルを認識しない場合、CLOSE REELおよびCLOSE UNIT文は機能しない。 - -4. ファイルが閉じられると、再び正常にOPENされるまで、ファイルに再度アクセスすることはできない。 - -5. OUTPUTモードまたはEXTENDモードのいずれかでOPENされたファイルに対して、REELまたはUNITを使うことなくCLOSEが正常に実行されると、残りの未書込レコードバッファーがファイルに書き込まれ、OPENモードに関係なく、閉じたファイルに対して保持されていたレコードロックも解放される。閉じられたファイルは、再度OPENされるまで、後続のREAD、WRITE、REWRITE、START、またはDELETE文で使用できなくなる。 - -6. CLOSE WITH LOCKは、プログラムが同じプログラム実行内でファイルを再度開いてしまうことを防いでくれる。 - -7. REELまたはUNITを使ってCLOSEを正常に実行すると、残りの未書込レコードバッファーが閉じられたファイルに書き込まれ、それらのファイルに対して保持されていたレコードロックも解放される。現在実装されているリール/ユニットは実装が解除され、次のリール/ユニットが要求される。この時ファイルは開かれたままである。 - - - -[ページトップへ](6-9.md) - diff --git a/automanual/old_delete/7-1.md b/automanual/old_delete/7-1.md deleted file mode 100644 index 9396937..0000000 --- a/automanual/old_delete/7-1.md +++ /dev/null @@ -1,27 +0,0 @@ - -[前へ](6-50.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-2.md) - -# 7. 日本語の使用 - -日本におけるコード系の標準は、JIS X0201のローマ文字・カタカナ用8単位符号系である。opensource COBOLでは、シフトJISコードはこのコード系に基づいて日本語文字のマッピングを行っている。 - -## 7.1. 英数字項目の日本語 - -文法上、日本語項目はPICTURE句の文字「N」でしか定義できないが、英数字項目でも日本語データ(文字と日本語文字の混在または日本語文字のみ)を取り扱えられるようにしてある。これは、文法上何も規定せず(整合性がとれなくなる)に、その使用はプログラマの責任としている。つまり、INSPECT文、STRING文およびUNSTRING文で使用した場合や、部分参照を行った場合、その実行結果は保証されない。このようなことを暗に認めているのは、PIC Nで定義した項目は日本語文字だけしか定義、格納できないが、実際のアプリケーション上では、文字(1バイトコード=半角文字)と日本語文字(2バイトコード=全角文字)が混在したデータが多数存在することによる。また、特に文法拡張を行わずに、PIC Xで日本語データを処理している既存製品との互換性をとる意味もある。例えば以下のように、日本語1文字に対して、2バイトの領域を定義する必要がある。 - - - 01 データ項目1 PIC X(8) VALUE"顧客code" - - 01 データ項目2 PIC X(10) VALUE"顧客コード" - -データ項目1のように半角文字と全角文字が混在していると、プログラムの可搬性のために、コンパイル中に警告メッセージが表示されるが、実行は正常になされる。 - -注意:暗黙事項として、英数字項目でも日本語文字を格納できることとしているにも関わらず、日本語項目を新たに定義しているのは、次の2点が理由である。 - -1. NATIONAL(日本語)文字に対する処理系の標準化動向(日本語データの文字列操作を容易に行うこと)。 -2. 種々の日本語コード系に対応を図る(シフトイン/アウト制御コードの削除) - - - -[ページトップへ](7-1.md) - diff --git a/automanual/old_delete/7-2.md b/automanual/old_delete/7-2.md deleted file mode 100644 index 2a7703d..0000000 --- a/automanual/old_delete/7-2.md +++ /dev/null @@ -1,20 +0,0 @@ - -[前へ](7-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-1.md) - -## 7.2. 日本語項目と表意定数 - -日本語項目(PIC N項目)における各表意定数の値は、次の通りである。 - -表7-1-日本語項目と表意定数の値 - -| 表意定数 | シフトJISコード | -| --- | :--- | -| SPACE(S) | 日本語空白文字 X"8140" | -| HIGH-VALUE(S) | X"FFFF" | -| LOW-VALUE(S) | X"0000" | -| ALL 定数 | 定数の値に依存する | - - - -[ページトップへ](7-2.md) - diff --git a/automanual/old_delete/7-3-1.md b/automanual/old_delete/7-3-1.md deleted file mode 100644 index 263bdb1..0000000 --- a/automanual/old_delete/7-3-1.md +++ /dev/null @@ -1,56 +0,0 @@ - -[前へ](7-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-3-2.md) - -## 7.3. 各命令文と日本語の取扱い - -### 7.3.1. MOVE文 - -MOVE文で、英字、英数字、整数、英数字編集及び数字編集項目と日本語項目との転記を認めている。このことは、INSPECT文、STRING文及びUNSTRING文で、日本語文字(全角文字)と文字(半角文字)との混在を禁止しているので、文法上の整合はとれないが、PIC X項目による日本語の定義と格納と同様、実アプリケーション上の必要性があるということで転記を認めている。 - -表7-2は、転記時の処理内容を示すものであるが、送出し側データ項目には、文法上規定された正しいデータが格納されているものとする。 - -表7-2-転記の処理方法 - -| 送出し側データ項目の項類 | 受取側データ項目の項類 | 処理方式 | -| :--- | :--- | :--- | -| 英字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字 | 日本語,日本語編集 | 全角文字へコード変換 | -| 英数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 整数 | 日本語,日本語編集 | 全角文字へコード変換 | -| 非整数 | 日本語,日本語編集 | コンパイルエラー | -| 数字編集 | 日本語,日本語編集 | 全角文字へコード変換 | -| 日本語,日本語編集 | 英字 | そのまま転記 | -| 日本語,日本語編集 | 英数字,英数字編集 | そのまま転記 | -| 日本語,日本語編集 | 整数,非整数,数字編集 | コンパイルエラー | -| 日本語,日本語編集 | 日本語,日本語編集 | そのまま転記 | - -データの内容は、文字データのみ、日本語文字データのみ、および文字と日本語データが混在している場合がある。 - -文字には半角カタカナも含まれる。 - -ここで、文法上定義されていないのは、英字、英数字、英数字編集データ項目の内容が、日本語文字のみ、または文字と日本語文字が混在している時の処理方法である。この場合、送出し側データ項目の内容がすべて日本語文字(全角文字)の場合は、そのまま転記する。日本語文字(全角文字)と文字(半角文字)が混在しているときは、文字は全角文字へ変換を行い、日本語文字はそのまま転記する。なお、集団項目は英数字項目の扱いになるため、受取り側の各基本項目が日本語項目であっても、全角文字へのコード変換は行われない。転記は、標準桁寄せ規則に従って、必要に応じて右端を切り捨てたり、日本語空白文字の空白詰めを行う。ただし、送出し側が日本語データ項目で、受取り側データ項目の英字、英数字、英数字編集項目が2バイト単位のデータを格納できない(最後の1バイト領域へ全角文字を転記)場合には、最右端の最後のバイトは空白文字に置き換えられる。受取り側データ項目にJUSTIFIED句(けたよせ)句を書いた場合、桁寄せは、[5.3](5-3.md)に示すJUSTIFIED RIGHT句の規則に従う。 - -受取り側データ項目が日本語、日本語編集のとき、送出し側データ項目の内容によっては、次のように転記される。 - -表7-3-送出し側データ項目の内容に対する処理方法 - -| 送出し側データ項目の内容 | 処理方式 | -| --- | --- | -| 正しい文字 | 全角文字へコード変換 | -| 不正な文字(≠日本語文字) | 日本語空白文字へコード変換 | -| 正しい日本語文字 | そのまま転記 | -| 不正な日本語文字(≠文字) | そのまま転記 | -| X”00” | X”0000”29 | -| X”20”=半角の空白文字 | 日本語空白文字へコード変換 | -| X”FF” | X”FFFF” | -| 制御コード,グラフィック文字 | 日本語空白文字へコード変換 | - -ただし、日本語空白文字は、シフトJISコード系ではX”8140”である。 - ---- -`29` opensource COBOL 1.5.2Jではそのまま転記される不具合が発生している。 - - - -[ページトップへ](7-3-1.md) - diff --git a/automanual/old_delete/7-3-2.md b/automanual/old_delete/7-3-2.md deleted file mode 100644 index b7803a4..0000000 --- a/automanual/old_delete/7-3-2.md +++ /dev/null @@ -1,13 +0,0 @@ - -[前へ](7-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](7-4.md) - -### 7.3.2. ACCEPT/DISPLAY文 - -ACCEPT文とDIPLAY文による日本語データの入出力も、実質的には、PICTURE句([5.3](5-3.md))および本章の英数字項目の日本語([7.1](7-1.md#71-英数字項目の日本語))とMOVE文([7.3.1](7-3-1.md#731-move文))の規則に従って処理される。 - -日本語項目への入力では、日本語文字(全角文字)だけを受け取る。このとき、キーボード上の文字(JIS X0201 8単位符号)は、そのまま入力すると自動的に全角文字へ内部表現形式の変換を行う。また、必要に応じて、日本語空白文字を埋める。英数字項目に対しては、英数字文字(カタカナを含む半角文字)と日本語文字(全角文字)の入力が可能で、それらが混在していてもよい。ただし、受取り側データ項目が全角文字の入力に対してそのデータを格納できない(最後の1バイトの領域)場合には、最右端の文字位置は空白文字に置き換えて再表示される。いずれにしても文法上の規定外にあるため、その後の処理については注意が必要である。 - - - -[ページトップへ](7-3-2.md) - diff --git a/automanual/old_delete/7-4.md b/automanual/old_delete/7-4.md deleted file mode 100644 index 228240a..0000000 --- a/automanual/old_delete/7-4.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](7-3-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-1.md) - -## 7.4. UTF-8の使用 - -opensource COBOLは、Unicode(UTF-8)をサポートしている。この文字コードを使用する場合には「./configure」実行時に「--enable-utf8」を指定してビルドする必要がある。指定しない場合は、既定値のSHIFT-JISとなる。SHIFT-JISサポート版との違いは以下である。 - -1. PICTURE句において、「N」1つは3バイトと見なす。 - -2. 部分参照の開始位置と長さやINSPECTの単位は、「文字」ではなく「バイト」である。 - -3. 空白詰めは半角空白で行われる。 - -4. STRING文において、項目の種類が混在した時のチェックを抑止する。 - - - -[ページトップへ](7-4.md) - diff --git a/automanual/old_delete/8-1-1.md b/automanual/old_delete/8-1-1.md deleted file mode 100644 index 77ded76..0000000 --- a/automanual/old_delete/8-1-1.md +++ /dev/null @@ -1,19 +0,0 @@ - -[前へ](7-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-2.md) - -# 8. opensource COBOLシステムインターフェース - -## 8.1. opensource COBOLコンパイラの使い方(cobc) - -### 8.1.1. 解説 - -プログラムソースファイルの拡張子は「.cob」または「.cbl」が一般的である。 -プログラムのファイル名はPROGRAM-IDの指定(大文字と小文字を含む)と完全に一致しなければならない。この理由については[3章](3.md)で説明している。 -空白をPROGRAM-IDに含めることはできないため、プログラムのファイル名にも含めることはできない。 -opensource COBOLコンパイラは、COBOLプログラムをCソースコードに変換し、opensource COBOLのビルド時に指定された「C」コンパイラを使用してそのCソースコードを実行可能バイナリ形式にコンパイルし、その実行可能バイナリを、直接実行可能形式、静的リンク可能形式、または動的にロード可能な実行可能形式にリンクする。 -opensource COBOLコンパイラの名称は「cobc」(Windowsシステムでは「cobc.exe」)である。 - - - -[ページトップへ](8-1-1.md) - diff --git a/automanual/old_delete/8-1-2.md b/automanual/old_delete/8-1-2.md deleted file mode 100644 index 6069ba9..0000000 --- a/automanual/old_delete/8-1-2.md +++ /dev/null @@ -1,95 +0,0 @@ - -[前へ](8-1-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-3.md) - -### 8.1.2. コンパイルオプション - -次に、cobcコマンドの構文とオプションスイッチについて説明する。この情報は「cobc-\-help」のコマンドを入力することで表示することができる。 - - 使い方: cobc [options] file... - オプション: - --help このメッセージを表示します - --version, -V コンパイラのバージョンを表示します - -v コンパイラが起動したプログラムを表示します - -x 実行可能プログラムをビルドします - -m 動的ロード可能モジュールをビルドします(デフォルト) - -std=<方言> 指定した方言に基づいて警告/機能します : - cobol2002 Cobol 2002 - cobol85 Cobol 85 - ibm IBM互換 - mvs MVS互換 - bs2000 BS2000互換 - mf Micro Focus互換 - default 指定しない - config/default.conf および config/*.conf を参照してください - -free 自由形式を使用します - -free_1col_aster 自由形式(かつ第1カラムの*を注釈行の標識とみなす)を使用します - -fixed 固定形式を使用します(デフォルト) - -O, -O2, -Os 最適化を有功にします - -c Cコンパイラのデバッグオプション/スタックチェック/トレースを有効にします - -debug すべての実行時エラーチェックを有功にします - -o <ファイル> 出力先を <ファイル> にします - -b すべての入力ファイルをひとつに結合します - 動的ロード可能モジュール - -E 前処理のみ; コンパイルやリンクを行いません - -C トランスレートのみ; COBOL から C へ変換します - -S コンパイルのみ; アセンブリファイルを出力します - -c コンパイルとアセンブルを行い、リンクを行いません - -t <ファイル> プログラムリストを <ファイル> に生成します - -I <ディレクトリ> COPY/INCLUDEの探索パスに <ディレクトリ> を加えます - -L <ディレクトリ> ライブラリの探索パスに <ディレクトリ> を加えます - -l ライブラリ をリンクします - -B Cコンパイルフェーズに を追加します - -Q Cリンクフェーズに を追加します - -D Cコンパイラに を渡します - -conf=<ファイル> ユーザ定義の方言設定 - -std=を参照してください - --list-reserved 予約語の一覧を表示します - --list-intrinsics 組み込み関数の一覧を表示します - --list-mnemonics 作成者語の一覧を表示します - -save-temps(=) 中間生成ファイルを保存します (デフォルトはカレントディレクトリ) - -MT 依存関係リストで使用される対象ファイルを指定します - -MF <ファイル> 依存関係リストを <ファイル> に生成します - -ext 既定のファイル拡張子を追加します - -assign_external すべてのASSIGN句に省略値EXTERNALが指定されたとみなします - -reference_check 実行時の参照チェックを有効にします - -constant(=) $IF 文で評価する定数名 に 値 を設定します - - -W すべての警告を有功にする - -Wall 以下を除くすべての警告を有功にする - -Wobsolete 廃要素が使われていれば警告する - -Warchaic 古い仕様が使われていれば警告する - -Wredefinition データ項目の再定義を警告する - -Wconstant 不適切な定数を警告する - -Wparentheses OR と AND が括弧なしで並んでいれば警告する - -Wstrict-typing タイプの不適合を厳密に警告する - -Wimplicit-define データ項目の再定義を警告する - -Wcall-params CALLのパラメタに指定された01レベルおよび77レベル以外の項目を警告する - (-Wall指定時は適用されません) - -Wcolumn-overflow 72 桁を越えるテキストを警告する(-Wall指定時は適用されません) - -Wterminator 終止符(END-XXX)がなければ警告する(-Wall指定時は適用されません) - -Wtruncate 項目の切り詰めの可能性を警告する(-Wall指定時は適用されません) - -Wlinkage 使われない連絡節項目を警告する(-Wall指定時は適用されません) - -Wunreachable 実行されない文を警告する(-Wall指定時は適用されません) - -Wcompat コンパイラ実装間で非互換を発生しやすい記述を警告する(-Wall指定時は適用されません) - - -ftrace トレースコードの生成(実行された節/段落の追跡) - -ftraceall トレースコードの生成(実行された節/段落/文の追跡) - -fsyntax-only 文法チェックのみ。何も出力しない - -fdebugging-line デバッグ行(標識領域に'D')を有効にする - -fsource-location ソース行情報の生成(-debugか-gで有効) - -fimplicit-init Cobolラインタイム初期化の自動実行 - -fsign-ascii ASCII符号で数字を表示(ASCII機のデフォルト) - -fsign-ebcdic EBCDIC符号で数字を表示(EBCDIC機のデフォルト) - -fstack-check PERFORM実行スタックのランタイムチェック(-debugまたは-gで有効) - -ffold-copy-lower COPYブック名の小文字化(デフォルトは変換なし) - -ffold-copy-upper COPYブック名の大文字化(デフォルトは変換なし) - -fnotrunc 2進項目のPICTURE句に合わせた切り詰めを行わない - -ffunctions-all 組み込み関数使用時のFUNCTIONキーワードの省略を許す - -fmfcomment 第1カラムの'*'と'/'をコメント行標識と解釈する(固定形式のみ) - -fnull-param CALL文のパラメタにNULL終端ポインタを追加して受け渡す - -[2章](2-1.md)で説明したように、プログラムコンパイルユニットは、単一のソースファイルで順番に定義された複数のプログラムで構成されている場合がある。「cobc」コマンドで複数のソースファイルを指定することにより、「cobc」コマンドを1回実行するだけで複数のコンパイルユニットを処理することが可能になる。 - - - -[ページトップへ](8-1-2.md) - diff --git a/automanual/old_delete/8-1-3.md b/automanual/old_delete/8-1-3.md deleted file mode 100644 index e7ca77f..0000000 --- a/automanual/old_delete/8-1-3.md +++ /dev/null @@ -1,17 +0,0 @@ - -[前へ](8-1-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-4.md) - -### 8.1.3. 実行可能プログラムのコンパイル - -最も簡単なコンパイルモードは、1つ以上のopensource COBOLソースファイルから単一の実行可能ファイルを生成することである。 - - cobc –x prog1.cbl prog2.cbl prog3.cbl - -メインプログラムは、「prog1.cbl」ファイルにある最初のプログラムでなければならない。「prog1.cbl」の残りの部分、および「prog2.cbl」と「prog3.cbl」のすべては、サブプログラムまたはネストされたサブプログラムである必要がある。 - -これにより、必要なすべてのCOBOLプログラムが含まれている単一の実行可能ファイル(UNIX)またはexeファイル(Windows)が生成される。ただし、opensource COBOL、GMP、およびBDB(または使用しているopensource COBOLパッケージに組み込まれている他のファイルI/Oモジュール)の動的ロード可能なランタイムライブラリは、実行時に引き続き使用可能である必要がある。 - - - -[ページトップへ](8-1-3.md) - diff --git a/automanual/old_delete/8-1-4.md b/automanual/old_delete/8-1-4.md deleted file mode 100644 index 3b1b56a..0000000 --- a/automanual/old_delete/8-1-4.md +++ /dev/null @@ -1,42 +0,0 @@ - -[前へ](8-1-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-5.md) - -### 8.1.4. 動的にロード可能なサブプログラム - -実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 - - cobc –m sprog1.cbl -または - - cobc –m sprog1.cbl sprog2.cbl sprog3.cbl - -上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。 - -次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。 - -1. 「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。 - -2. 単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。 - -3. 複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールの*プライマリ記述項ポイント*である。 - -4. プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき - - a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名([6.7](6-7.md)を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID([3章](3.md))または記述項ポイント([6.16章](6-16.md))のいずれかとして定義される。 - - b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。 - - c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。 - - - i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。 - - - ii. ファイルが見つからなかった場合は、エラーメッセージ(「**libcob:モジュール'xxxxxxxx'が見つかりません**」)が出力され、プログラムの実行が中止する。 - -5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 - -「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 - - - -[ページトップへ](8-1-4.md) - diff --git a/automanual/old_delete/8-1-5.md b/automanual/old_delete/8-1-5.md deleted file mode 100644 index 5423e88..0000000 --- a/automanual/old_delete/8-1-5.md +++ /dev/null @@ -1,23 +0,0 @@ - -[前へ](8-1-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-6.md) - -### 8.1.5. 静的サブルーチン - -opensource COBOLサブルーチンをアセンブラソースコードにコンパイルして、メインプログラムのコンパイル時に組み立てて繋げることもできる。このようなアセンブラソースファイルを作成するには、次のようにサブプログラムをコンパイルする。 - - cobc –S sprog1.cbl - -(注:「**-S**」は大文字で表記する) - -これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 - -メインプログラムをコンパイルするには、アセンブラソースファイルと組み合わせ、静的にリンクする。 - - cobc –x mainprog.cbl sprog1.s - -複数のサブプログラムが必要な場合は、それらの「.s」ファイルをコマンドラインに追加するだけである。「.s」ファイルが指定されていないサブプログラムの*記述項ポイント*は、実行時に動的にロード可能なモジュールとして呼び出される。 - - - -[ページトップへ](8-1-5.md) - diff --git a/automanual/old_delete/8-1-6.md b/automanual/old_delete/8-1-6.md deleted file mode 100644 index a513ea2..0000000 --- a/automanual/old_delete/8-1-6.md +++ /dev/null @@ -1,139 +0,0 @@ - -[前へ](8-1-5.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-7.md) - -### 8.1.6. COBOLとCプログラムの結合 - -opensource COBOLとC言語プログラム間のリンクは可能だが、プログラム間でデータを受け渡すためには、いずれかのプログラムで少し特別なコーディングが必要になる場合があり、次の3つが主な対処法である。問題について説明し、具体的にどのように対処するか、実際のプログラムコードを示す。 - -#### 8.1.6.1. opensource COBOLランタイムライブラリの要件 - -COBOL言語の他の実装と同様に、opensource COBOLはランタイムライブラリを使用する。特定の実行シーケンスで実行される最初のプログラム単位がopensource COBOLプログラムである場合、ランタイムライブラリの初期化は、C言語プログラマにとって明確な方法であるCOBOLのコードによって実行される。ただし、Cプログラム単位が最初に実行される場合は、opensource COBOLランタイムライブラリの初期化を実行する負担がCプログラムにかかる。 - -#### 8.1.6.2. opensource COBOLとCの文字列割り当ての違い - -どちらの言語も、文字列を固定長の連続した文字順序として格納する。 - -COBOLは、これらの文字順序を、データ項目のPICTURE句によって課される特定の数量制限まで格納する。例: - - 01 LastName PIC X(15). - -USAGE DISPLAYデータ項目に含まれる文字列の長さは正確でなくてもよいが、PICTURE句で許可されている文字数は常に正確である必要がある。上記の例では、「LastName」には常に正確に15文字が含まれる。もちろん、現在のLastName値の一部として、0から15までの末尾の空白が存在する可能性がある。 - -実際、Cには「文字列」データ型がなく、配列の各要素が1文字である「char」データ型項目の配列として文字列を格納する。配列であるため、特定の「文字列」に格納できる文字数には上限がある。例: - - char lastName[15]; /* 15 chars: lastName[0] thru lastName[14] */ - -Cは、あるchar配列から別のchar配列に文字列をコピーしたり、特定の文字を文字列内で検索したり、あるchar配列を別のchar配列と比較したり、char配列を連結したりするための、強力な文字列操作関数を提供する。これらの機能を可能にするために、文字列の論理的な終了を定義できる必要があった。Cは、すべての文字列(char配列)がNULL文字(x'00')で終了することを期待してこれを実現する。もちろん、プログラマはこれを強制されてはいないが、文字列を操作するためにC標準関数を使用するのであれば、実行したほうがよいだろう。 - -#### 8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致 - -これは非常に単純である。opensource COBOLとCのプログラマは、対応するCデータ型とCOBOLのUSAGE句を認識している必要がある。 - -表8-1-Cまたはopensource COBOLのデータ型の一致 - -| COBOLのUSAGE句 (PICTURE句は使用できない) | 占領する領域 | 保持できる数値 | 対応するデータ型 | -| :--- | :--- | :--- | :--- | -|BIARY-CHAR
BINARY-CHAR UNSIGNED | 1バイト | 0 ~ 255 | unsigned char | -| BINARY-CHAR SIGNED | 1バイト | -128 ~ +127 | signed char | -| BINARY-SHORT
BINARY-SHORT UNSIGNED | 2バイト | 0 ~ 65535| unsigned
unsigned int
unsigned short
unsigned short int | -| BINARY-SHORT SIGNED | 2バイト | -32768 ~ +32767| int
short
short int
signed int
signed short
signed short int| -| BINARY-LONG
BINARY-LONG UNSIGNED | 4バイト | 0 ~ 4294967295| unsigned long
unsigned long int | -| BINARY-LONG SIGNED | 4バイト | -2147483648 ~ +2147483647| long
long int
signed long
signed long int | -| BINARY-C-LONG SIGNED | 4バイトまたは8バイト | -2147483648 ~ +2147483647または-9223372036854775808 ~ +9223372036854775807| long(USAGE BINARY-C-LONGの[表5-10](5-3.md)を参照) | -| BINARY-DOUBLE
BINARY-DOUBLE UNSIGNED | 8バイト | 0 ~ 18446744073709551615|unsigned long long
unsigned long long int | -|BINARY-DOUBLE SIGNED| 8バイト | -9223372036854775808 ~ +9223372036854775807|long long int
signed long long int | -|COMPUTATIONAL-1| 4バイト |-3.4×1038 ~ +3.4×1038
(小数点以下6桁の精度) | float | -|COMPUTATIONAL-2| 8バイト | -1.7×10308 ~ +1.7×10308
(小数点以下15桁の精度) | double | -| N/A(opensource COBOLに相当するものなし) | 12バイト | -1.19×10^4932 ~ +1.19×10^4932
(小数点以下18桁の精度) | long double | - - - - -同じストレージサイズと値の範囲の組み合わせを定義できる、他のopensource COBOLのPICTURE句またはUSAGE句の組み合わせがある。しかし(COMP-1とCOMP-2を除いて)、これらはCプログラムのデータ互換性のためのANSI2002標準仕様であり、データがCプログラムと共有されている場合、opensource COBOLプログラマはこれを使用することに慣れておく必要がある(優れたドキュメントでもあり、データがCプログラムと「共有」されるという事実を強調している)。 - -様々なSIGNED整数のUSAGE句で示されている最小値は、負の符号付きバイナリ値に2の補数表現を使用するコンピュータシステム(Windows PCでよく見られるCPUなど)に適している。負の符号付きバイナリ値に1の補数表現を使用するコンピュータシステムでは、最小値が1大きくなる(例えば、-128ではなく-127)。 - -#### 8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し - -CサブプログラムをCALLするopensource COBOLプログラムの例を次に示す。 - -図8-2-opensource COBOLのC呼び出し - -![alt text](Image/8-2.png) - -考え方としては、2つの文字列と1つのフルワードの符号なし引数をサブプログラムに渡し、サブプログラムにそれらを出力させ、3つすべてを変更して、リターンコード2を呼び出し元に渡すことである。次に、呼び出し元は3つの引数を再表示し(2つのBY REFERENCE引数の変更のみ表示する)、リターンコードを表示して停止する。これら2つのプログラムは単純だが、必要な手法がよく説明されている。 - -COBOLプログラムが、nullの文字列終了符が両方の文字列引数に存在することの確認方法に注意すること。 - -Cプログラムは3つの引数に変更を加えようとしているため、関数の先頭で3つをポインターとして宣言し、関数の本体で3番目の引数をポインターとして参照する。`30` - -これらのプログラムは、次のようにコンパイルおよび実行される。以下の例では、ネイティブCコンパイラを使用するopensource COBOLビルドを備えたUNIXシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - $ cc –c subc.c - $ cobc -x maincob.cbl subc.o - $ maincob - Starting cobmain - Starting subc - Arg1=Arg1 - Arg2=Arg2 - Arg3=123456789 - Back - Arg1=Arg1 - Arg2=Yrg2 - Arg3=+0987654321 - Returned value=+000000002 - $ - - - -null文字は、実際はopensource COBOLの「Arg1」および「Arg2」データ項目にあるということに注意すること。出力には表示されないが存在する。文字列をCプログラムに渡す場合、文字列項目のnull終了コピーを作成してCプログラムに渡すことを推奨する。 - -[6.7](6-7.md)で説明したように、サブプログラムがopensource COBOL以外の言語で記述されている場合、opensource COBOLのサブプログラム呼び出しでは、BY CONTENT句を指定して、サブプログラムが引数を変更できないようにする必要がある。CALLする側のプログラムとCALLされる側のプログラムの両方がopensource COBOLである場合、BY VALUE句はBY CONTENT句のより高速な代替手段になる。 - -#### 8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し - -ここでは前の章の2つの言語の役割が反転し、Cメインプログラムがopensource COBOLサブプログラムを実行する。 - -図8-3-Cのopensource COBOL呼び出し - -![alt text](Image/8-3.png) - -Cプログラムはopensource COBOLサブルーチンの前に最初に実行されるため、opensource COBOLランタイム環境を初期化する負担はそのCプログラムにあり、「libcob」ライブラリの一部である「cob_init」関数を呼び出す必要がある。 - -「cob_init」ルーチンへの引数は、プログラムの実行開始時にメイン関数に渡された引数の数と値のパラメータである。これらをopensource COBOLサブプログラムに渡すことにより、そのopensource COBOLプログラムが、コマンドラインまたは個々のコマンドライン引数を取得できるようになる。それが必要なければ、「cob_init(0,NULL);」を代わりに指定できる。 - -Cプログラムは、「arg3」がサブプログラムによって変更されることを許可しているため、「&」を前に付けてBY REFERENCE句による引数呼び出しを強制する。「arg1」と「arg2」は文字列(char配列)であるため、自動的に参照渡しされる。 - -コンパイルプロセスとプログラム実行の出力を次に示す。以下の例では、GNU Cコンパイラを使用するopensource COBOLビルドを備えたWindowsシステムを想定している。この手法は、使用しているCコンパイラやオペレーティングシステムに関係なく、同じように機能する。 - - C:\Users\Gary\Documents\Programs> cobc -S subcob.cbl - C:\Users\Gary\Documents\Programs> gcc mainc.c subcob.s –o mainc.exe -llibcob - C:\Users\Gary\Documents\Programs> mainc.exe - Starting mainc... - Starting cobsub.cbl - Arg1=Arg1 - Arg2=Arg2 - Arg3=+0123456789 - Back - Arg1=Xrg1 - Arg2=Xrg2 - Arg3=987654321 - Returned value=2 - C:\Users\Gary\Documents\Programs> - - -第1引数がBY VALUE句であることをopensource COBOLで記述したにも関わらず、BY REFERENCE句であるかのように扱われたことに注意すること。C呼び出し元からopensource COBOLサブプログラムに渡される文字列(char配列)引数は、サブプログラムによって変更可能である。サブプログラムによって変更されないようにする場合は、データのコピーを渡すのが最善である。 - -ただし、3番目の引数は異なる。これは配列ではないため、BY REFERENCE句`31`またはBY VALUE句`32`のいずれかで渡すことができる。 - ---- -`30` 実際には、2つの文字列(char配列)引数は選択できなかった。ポインターを表す「*」を先頭に付けずに関数コードで参照していても、関数内でポインターとして定義する必要がある。 - -`31` C呼び出しプログラムでは、引数に「&」を使用する。COBOLサブプログラムで引数をBY REFERENCE句として指定する。 - -`32` C呼び出しプログラムでは、引数に「&」を使用してはいけない。COBOLサブプログラムで引数をBY VALUE句として指定する。 - - - -[ページトップへ](8-1-6.md) - diff --git a/automanual/old_delete/8-1-7.md b/automanual/old_delete/8-1-7.md deleted file mode 100644 index cc22abd..0000000 --- a/automanual/old_delete/8-1-7.md +++ /dev/null @@ -1,36 +0,0 @@ - -[前へ](8-1-6.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-8.md) - -### 8.1.7. 重要な環境変数 - -次の表は、opensource COBOLプログラムのコンパイルで使用できる様々な環境変数を示している。 - -表8-4-環境変数コンパイラ - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | -| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | -| COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | -| COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -| COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | -|COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | -| COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | -| COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | -| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | -| COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | -| COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | -| COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | -|LD_LIBRARY_PATH| 静的にリンクされたサブルーチンライブラリの使用を計画している場合は、この変数を、ライブラリを含むディレクトリへのパスに設定する。 | -|OC_EXTEND_CREATES | この環境変数に「yes」を設定することで、EXTENDオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_IO_CREATES | この環境変数に「yes」を設定することで、I-Oオプションでファイルを開く時に自動でファイルが生成される。 | -| OC_USERFH | この環境変数にCOBOLプログラム名を指定することで、COBOLのファイル処理をユーザ定義のプログラムで実行できるようになる。OPEN, CLOSE, DELETE, READ, REWRITE, START, WRITE, COMMIT, ROLLBACK, UNLOCKの処理がサポートされている。 | -|TMPDIR
TMP
(この順番で確認) | 一時ファイルを作成するのに適したディレクトリ/フォルダに設定する。cobcによって作成された中間作業ファイルがここに生成される(不要になると削除される)。通常Windowsシステムでは、ログオン時にTMP環境変数が設定される。別の一時フォルダを使用する場合は、TMPDIRを自分で設定すれことで、TMPに依存する他のWindowsソフトウェアを中断する心配はない。 | - ---- -`33` これらのスイッチは、高度なユーザによる特殊な状況での使用のみを目的としているため、使用は推奨していない。opensource COBOLの今後のリリースでは、cobcコマンドからCコンパイラやローダーに切り替えるためのより良い方法が導入される予定である。 - - - -[ページトップへ](8-1-7.md) - diff --git a/automanual/old_delete/8-1-8.md b/automanual/old_delete/8-1-8.md deleted file mode 100644 index 34316e0..0000000 --- a/automanual/old_delete/8-1-8.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](8-1-7.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-1-9.md) - -### 8.1.8. コンパイル時のコピーブックの検索 - -opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 - -- コンパイルされるプログラムが存在するフォルダ。 -- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 -- COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 -- COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 - -上記の各フォルダでコピーブック―例えば「COPY XXXXXXXX」―が検索されると、opensource COBOLコンパイラは次のいずれかの名前で順にコピーブックファイルを検索する。 - -- XXXXXXXX.CPY -- XXXXXXXX.CBL -- XXXXXXXX.COB -- XXXXXXXX.cpy -- XXXXXXXX.cbl -- XXXXXXXX.cob -- XXXXXXXX - -UNIXシステムではCOPYコマンドの大文字と小文字が区別される。「COPY copybookname」と「COPY COPYBOOKNAME」はどちらも、UNIXシステムで「CopyBookName」コピーブックを見つけることはできない。opensource COBOLのWindows実装では、Windowsのバージョンとopensource COBOLビルドオプションに応じて、コピーブック名の大文字と小文字が区別される場合とされない場合があるが、すべての環境でCOPYコマンドを大文字と小文字を区別するものとして扱うのが最も安全である。 - ---- -`34` opensource COBOLコンパイラがネイティブWindows環境用に構築されている場合は、セミコロン(;)を使用する。ただし、opensource COBOLコンパイラがUnixまたはLinux環境用、またはCygwinやMinGW Unix「エミュレータ」を使ったWindows環境用に構築されている場合は、区切り文字としてコロン文字(:)を使用する。 - - - -[ページトップへ](8-1-8.md) - diff --git a/automanual/old_delete/8-1-9.md b/automanual/old_delete/8-1-9.md deleted file mode 100644 index b805f5e..0000000 --- a/automanual/old_delete/8-1-9.md +++ /dev/null @@ -1,123 +0,0 @@ - -[前へ](8-1-8.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-1.md) - -### 8.1.9. コンパイラ構成ファイルの使い方 - -opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 - -以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 - -``` -# COBOL compiler configuration -*- sh -*- - -# Value: any string -name: "opensource COBOL" - -# Value: int -tab-width: 8 -text-column: 72 - -# Value: 'cobol2002', 'mf', 'ibm' -# -assign-clause: mf - -# If yes, file names are resolved at run time using environment variables. -# For example, given ASSIGN TO "DATAFILE", the actual file name will be -# 1. the value of environment variable 'DD_DATAFILE' or -# 2. the value of environment variable 'dd_DATAFILE' or -# 3. the value of environment variable 'DATAFILE' or -# 4. the literal "DATAFILE" -# If no, the value of the assign clause is the file name. -# -# Value: 'yes', 'no' -filename-mapping: yes - -# Value: 'yes', 'no' -pretty-display: yes - -# Value: 'yes', 'no' -auto-initialize: yes - -# Value: 'yes', 'no' -complex-odo: no - -# Value: 'yes', 'no' -indirect-redefines: no - -# Binary byte size - defines the allocated bytes according to PIC -# Value: signed unsigned bytes -# ------ -------- ----- -# '2-4-8' 1 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1-2-4-8' 1 - 2 1 -# 3 - 4 2 -# 5 - 9 4 -# 10 - 18 8 -# -# '1--8' 1 - 2 1 - 2   1 -# 3 - 4 3 - 4 2 -# 5 - 6 5 - 7 3 -# 7 - 9 8 - 9 4 -# 10 - 11 10 - 12 5 -# 12 - 14 13 - 14 6 -# 15 - 16 15 - 16 7 -# 17 - 18 17 - 18 8 -binary-size: 1-2-4-8 - -# Value: 'yes', 'no' -binary-truncate: yes - -# Value: 'native', 'big-endian' -binary-byteorder: big-endian - -# Value: 'yes', 'no' -larger-redefines-ok: no - -# Value: 'yes', 'no' -relaxed-syntax-check: no - -# Perform type OSVS - If yes, the exit point of any currently executing perform -# is recognized if reached. -# Value: 'yes', 'no' -perform-osvs: no - -# If yes, linkage-section items remain allocated -# between invocations. -# Value: 'yes', 'no' -sticky-linkage: no - -# If yes, allow non-matching level numbers -# Value: 'yes', 'no' -relax-level-hierarchy: no - -# not-reserved: -# Value: Word to be taken out of the reserved words list -# (case independent) - -# Dialect features -# Value: 'ok', 'archaic', 'obsolete', 'skip', 'ignore', 'unconformable' -author-paragraph: obsolete -memory-size-clause: obsolete -multiple-file-tape-clause: obsolete -label-records-clause: obsolete -value-of-clause: obsolete -data-records-clause: obsolete -top-level-occurs-clause: skip -synchronized-clause: ok -goto-statement-without-name: obsolete -stop-literal-statement: obsolete -debugging-line: obsolete -padding-character-clause: obsolete -next-sentence-phrase: archaic -eject-statement: skip -entry-statement: obsolete -move-noninteger-to-alphanumeric: error -odo-without-to: ok -``` - - - -[ページトップへ](8-1-9.md) - diff --git a/automanual/old_delete/8-2-1.md b/automanual/old_delete/8-2-1.md deleted file mode 100644 index 65ffe25..0000000 --- a/automanual/old_delete/8-2-1.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](8-1-9.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-2.md) - -## 8.2. opensource COBOLプログラムの実行 - -### 8.2.1. プログラムの直接実行 - -「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 - -これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 - -これはUNIXシステムでは、プログラムがbash、csh、kshなどのコマンドシェルから実行される可能性があることを意味する。opensource COBOLプログラムがWindowsシステムで実行される場合、コンソールウィンドウ(つまり「cmd.exe」)内で実行される。 - -プログラムとユーザ間のやりとりは、標準入力、標準出力、および標準エラー出力を使って行われる。プログラムによって実行される画面節の入出力は、コマンドシェルの「ウィンドウ」内で実行される。 - -プログラムの直接実行構文は次の通りである。 - - [path]program [arguments] - -例: -``` - /usr/local/printaccount ACCT=6625378 - または - C:\Users\Me\Documents\Programs\printaccount.exe - ACCT=6625378 -``` - - - -[ページトップへ](8-2-1.md) - diff --git a/automanual/old_delete/8-2-2.md b/automanual/old_delete/8-2-2.md deleted file mode 100644 index 0f38d99..0000000 --- a/automanual/old_delete/8-2-2.md +++ /dev/null @@ -1,29 +0,0 @@ - -[前へ](8-2-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-3.md) - -### 8.2.2. 「cobcrun」ユーティリティの使用 - -「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 - -opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 - -この方法でコンパイルされたメインプログラムは、次のように実行する必要がある: - - [path]cobcrun program [arguments] - -プログラム名に「.so」または「.dll」拡張子を指定してはならない。「プログラム」の値は、メインプログラムのPROGRAM-ID(大文字と小文字を含む)と正確に一致する必要がある。 - -cobcrunの使用例: - - cd /usr/local - cobcrun printaccount ACCT=6625378 - または - cd C:\Users\Me\Documents\Programs - cobcrun printaccount.exe ACCT=6625378 - -cobcrunコマンドでは、プログラム名でパスを指定できないことに注意が必要である―プログラムの動的ロード可能モジュールが存在するディレクトリは、現在のディレクトリであるか、現在のPATHで定義されていなければならない。 - - - -[ページトップへ](8-2-2.md) - diff --git a/automanual/old_delete/8-2-3.md b/automanual/old_delete/8-2-3.md deleted file mode 100644 index 24086ac..0000000 --- a/automanual/old_delete/8-2-3.md +++ /dev/null @@ -1,14 +0,0 @@ - -[前へ](8-2-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-2-4.md) - -### 8.2.3. プログラムの引数 - -プログラムの実行方法に関係なく、プログラムに指定された引数は、[6.4.2](6-4-2.md)に記載されている次のいずれかを介して取得できる。 - -- ACCEPT ・・・ FROM COMMAND-LINE -- ACCEPT ・・・ FROM ARGUMENT-VALUE - - - -[ページトップへ](8-2-3.md) - diff --git a/automanual/old_delete/8-2-4.md b/automanual/old_delete/8-2-4.md deleted file mode 100644 index 835d6ae..0000000 --- a/automanual/old_delete/8-2-4.md +++ /dev/null @@ -1,31 +0,0 @@ - -[前へ](8-2-3.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](8-3-1.md) - -### 8.2.4. 重要な環境変数 - -次の表は、opensource COBOLプログラムの実行で使用できる様々な環境変数を示している。 - -表8-5-実行時環境変数 - -|環境変数 | 使い方 | -| :--- | :--- | -|COB_LIBRARY_PATH | opensource COBOLは実行時に、PATHおよびプログラム実行可能なディレクトリから動的にロード可能なライブラリを見つけ、ロードしようとする。これらのライブラリファイルが別の場所に存在する可能性がある場合、この変数を使用してディレクトリパスを指定する。| -|COB_PRE_LOAD | null以外の値に設定すると、この変数により、プログラムの実行開始時に動的ロード可能なすべてのライブラリがロードされる(モジュールを検索してロードするよりも先に)。 | -|COB_SCREEN_ESC | 空白以外の値に設定すると、この変数によりACCEPT文がEscキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SCREEN_EXCEPTIONS | この変数を空白以外の値に設定すると、ACCEPT文がEsc、PgUp、およびPgDnキーを検出できるようになる。詳細については、[表4-8](4-1-4.md)で説明している。| -|COB_SORT_MEMORY |この変数の値(整数)は、整列時に割り当てられるメモリ量を定義するために使用される。値が1048576以上の場合、「そのまま」の値がメモリ量(バイト単位)として割り当てられる。値が1048576未満の場合、ソートメモリ量の初期値は128MBで設定される。 | -|COB_SWITCH_n | (n = 1~8)これらの環境変数は、SWITCH-1からSWITCH-8に対応する。「オン」に設定するとアクティブになり、それ以外の値はオフになる。詳細については、[4.1.4](4-1-4.md)で説明している。| -|COB_SYNC |大文字または小文字の「p」の値を設定すると、ファイルが書き込まれるたびにファイルを強制的にコミットする(次のコミットが発生するまでデータがメモリに保持されるのではなく、すぐにファイルに書き込まれるようにする)。これによりファイルへの更新アクセスが遅くなるが、プログラムに障害が発生した場合の整合性が向上する。| -|DB_HOME |opensource COBOLビルドでBerkeley DB(BDB)パッケージを使用する場合は、この環境変数を使って、プログラムによって開かれたすべての非SORTファイルに関連付けられるロック管理ファイルに関連するフォルダを指定する`35`。この変数を定義すると、READ文([6.33](6-33-1.md))、REWRITE文([6.36](6-36.md))、およびWRITE文([6.50](6-50.md))でレコードロック機能がアクティブになる`36`。| -|PATH |opensource COBOLの「bin」ディレクトリはPATHで定義する必要がある。| -|TMPDIR
TMP
TEMP
(この順番で確認) |一時ファイルを作成するのに適当なディレクトリ/フォルダを設定し、一時作業ファイルを作成するためにSORTおよびMERGEによって使用される。このフォルダは、アプリケーションで必要になるどの一時ファイルに対しても使用できる。適切な形式としては、アプリケーションが一時的な作業ファイルを作成する場合、その後でクリーンアップする必要がある`37`。| - ---- -`35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 -`36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 -`37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 - - - -[ページトップへ](8-2-4.md) - diff --git a/automanual/old_delete/8-3-1.md b/automanual/old_delete/8-3-1.md deleted file mode 100644 index 985fe6d..0000000 --- a/automanual/old_delete/8-3-1.md +++ /dev/null @@ -1,756 +0,0 @@ - -[前へ](8-2-4.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-1.md) - -## 8.3. 組み込みサブルーチン - -### 8.3.1. 「名前による呼び出し」ルーチン - -opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_...)またはACUCOBOL(C$ ...)で使用可能なルーチンと一致することを目的としている。 - -これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。 - - -- 現在のディレクトリの変更 -- ファイルのコピー -- ディレクトリの作成 -- ファイルの作成、開く、閉じる、読み取り、書き込み -- ディレクトリ(フォルダ)の削除 -- ファイルの削除 -- サブルーチンに渡された引数の数の決定 -- ファイル情報の取得(サイズと最終変更日時) -- サブルーチンに渡される引数の長さ(バイト単位)の取得 -- 項目の左揃え、右揃え、または中央揃えの決定 -- ファイルの移動(破壊的な「コピー」) -- スリープ時間を秒単位で指定して、プログラムを「スリープ状態」にする -- スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする - - 警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない -- 実行時のopensource COBOLのバージョンに適したシェル環境にコマンドを送信する - -次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて[6.7](6-7.md)で説明している。 - -#### 8.3.1.1. CALL “C$CALLEDBY” USING *program-name GIVING status* - -このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。 - -*program-name*には呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。 - -statusは次のいずれかの値を受け取る。 - -| | | -| --- | --- | -| 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | -| 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | -| -1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 | - - -#### 8.3.1.2. CALL “C$CHDIR” USING *directory-path, result* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -操作の戻り値は、*result*引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。 - -[8.3.1.15章](8-3-1.md#83115-call-cbl_change_dir-using-directory-path)―**CBL_CHANGE_DIR**を参照 - -#### 8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0 - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -第3引数は必須ではあるが、使用されない。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.18章](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path)―**CBL_COPY_FILE**を参照 - -#### 8.3.1.4. CALL “C$DELETE” USING *file-path*, 0 - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -第2引数は必須ではあるが、使用されない。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.22章](8-3-1.md#83122-call-cbl_delete_file-using-file-path)―**CBL_DELETE_FILE**を参照 - -#### 8.3.1.5. CALL “C$FILEINFO” USING *file-path, file-info* - -このルーチンを使用すると、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`38`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 File-Info. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-YYYYMMDD PIC 9(8) COMP. *> Modification Date - 05 Mod-HHMMSS00 PIC 9(8) COMP. *> Modification Time - -変更時刻の小数点以下2桁は常に0である。 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.16章](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info)―**CBL_CHECK_FILE_EXIST**を参照 - -#### 8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type” - -C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。*justification-type*引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。 - -- なし 「R」と同じように扱われる -- Cxxx... 大文字の「C」で始まる場合、値は中央揃えになる -- Rxxx... 大文字の「R」で始まる場合、値は右揃えとなり、左に空白が埋められる -- Lxxx... 大文字の「L」で始まる場合、値は左揃えとなり、右に空白が埋められる -- それ以外 「R」として扱われる - -#### 8.3.1.7. CALL “C$LIST-DIRECTORY” USING *item-1, item-2, item-3* - -このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。 - -与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。 - -| | | -| --- | --- | -| item-1が1の時 | 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。 | -| item-1が2の時 | 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。 | -| item-1の3の時 | 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。 | - -``` - 01 PATTERN PIC X(5) VALUE "*". - 01 DIRECTORY PIC X(256) VALUE - "./list". - 01 FILENAME PIC X(30). - 01 MYDIR PIC 9(8) COMP-5. - PROCEDURE DIVISION. - CALL "C$LIST-DIRECTORY" USING 1, - DIRECTORY, - PATTERN - END-CALL. - MOVE RETURN-CODE TO MYDIR. - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL. - PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES - DISPLAY FUNCTION TRIM(FILENAME) - CALL "C$LIST-DIRECTORY" USING 2, - MYDIR, - FILENAME - END-CALL - END-PERFORM. - CALL "C$LIST-DIRECTORY" USING 3, MYDIR - END-CALL. -``` - -#### 8.3.1.8. CALL “C$MAKEDIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.19章](8-3-1.md#83119-call-cbl_create_dir-using-dir-path)―**CBL_CREATE_DIR**を参照 - -#### 8.3.1.9. CALL “C$NARG” USING *arg-count-result* - -C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目*arg count-result*に返す。 - -メインプログラムからCALLされた場合、戻り値は常に0になる。 - -[6.1.7章](6-1-7.md)―**NUMBER-OF-CALL-PARAMETERS**を参照 - -#### 8.3.1.10. CALL “C$PARAMSIZE” USING *argument-number* - -このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。 - -サイズは、RETURN-CODE特殊レジスタに返される。 - -指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。 - -#### 8.3.1.11. CALL “C$SLEEP” USING *seconds-to-sleep* - -C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。 - -1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。 - -[8.3.1.33章](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep)―**CBL_OC_NANOSLEEP**を参照 - -#### 8.3.1.12. CALL “C$TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.38章](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length)―**CBL_TOLOWER**を参照 - -#### 8.3.1.13. CALL “C$TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.39章](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length)―**CBL_TOUPPER**を参照 - -#### 8.3.1.14. CALL “CBL_AND” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「AND」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length* ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.15. CALL “CBL_CHANGE_DIR” USING *directory-path* - -このルーチンは、*directory-path*(英数字定数または一意名)を現在のディレクトリにする。 - -ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。 - -操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。 - -[8.3.1.2章](8-3-1.md#8312-call-cchdir-using-directory-path-result)―**C$CHDIR**を参照 - -#### 8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING *file-path, file-info* - -このルーチンは、*file-path*引数(英数字定数または一意名)として指定されたファイルサイズ`39`と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義される*file-info*引数に返される。 - - 01 Argument-2. - 05 File-Size-In-Bytes PIC 9(18) COMP. - 05 Mod-DD PIC 9(2) COMP. *> Modification Time - 05 Mod-MO PIC 9(2) COMP. - 05 Mod-YYYY PIC 9(4) COMP. *> Modification Date - 05 Mod-HH PIC 9(2) COMP. - 05 Mod-MM PIC 9(2) COMP. - 05 Mod-SS PIC 9(2) COMP. - 05 FILLER PIC 9(2) COMP. *> This will always be 00 - -サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。 - -[8.3.1.5章](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info)―**C$FILEINFO**を参照 - -#### 8.3.1.17. CALL “CBL_CHANGE_DIR” USING *directory-path* - -CBL_CLOSE_FILEサブルーチンは、**CBL_OPEN_FILE**または**CBL_CREATE_FILE**サブルーチンによって既に開かれているファイルを閉じる。 - -*file-handle*引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前に**CBL_FLUSH_FILE**が暗黙的に実行される。 - -サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。 - -#### 8.3.1.18. CALL “CBL_COPY_FILE” USING *src-file-path, dest-file-path* - -このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、*src-file-path*を*dest-file-path*にファイルをコピーする。 - -どちらのファイルパス引数も、英数字定数または一意名にすることができる。 - -ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.3章](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0)―**C$COPY**を参照 - -#### 8.3.1.19. CALL “CBL_CREATE_DIR” USING *dir-path* - -このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、*dir-path*引数(英数字定数または一意名)として指定される。 - -指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。 - -RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -[8.3.1.8章](8-3-1.md#8318-call-cmakedir-using-dir-path)―**C$MAKEDIR**を参照 - -#### 8.3.1.20. CALL “CBL_CREATE_FILE” USING *file-path*, 2, 0, 0, *file-handle* - -CBL_CREATE_FILEサブルーチンは、*file-path*引数を使用して指定された新しいファイルを作成し、**CBL_WRITE_FILE**で使用できるファイルとして出力用に開く。 - -引数2、3、および4は、示されている定数値としてコーディングする必要がある。`40` - -後続の**CBL_WRITE_FILE**または**CBL_CLOSE_FILE**呼び出しに対して、*file handle*(PIC X(4) USAGE COMP-X)が返される。 - -サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。 - -[8.3.1.34章](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle)―**CBL_OPEN_FILE**を参照 - -#### 8.3.1.21. CALL “CBL_DELETE_DIR” USING *dir-path* - -CBL_DELETE_DIRを使って空のディレクトリを削除する。 - -唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。 - -指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。 - -RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。 - -#### 8.3.1.22. CALL “CBL_DELETE_FILE” USING *file-path* - -このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。 - -ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。 - -[8.3.1.4章](8-3-1#8314-call-cdelete-using-file-path-0)―**C$DELETE**を参照 - -#### 8.3.1.23. CALL “CBL_ERROR_PROC” USING *function, program-pointer* - -このルーチンは、一般的なエラー処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。 - -一度に有効にできるユーザ定義のエラー手続きは1つだけである。 - -エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある。 - -エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoerrproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Err-Proc. - SET Err-Proc-Address TO ENTRY "999-Err" - CALL "CBL_ERROR_PROC" - USING Err-Proc-Install, Err-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not' & - 'register Error Procedure' - END-IF - . - 099-Now-Test-Err-Proc. - CALL "Tilt" END-CALL - GOBACK - . - 999-Err-Proc. - ENTRY "999-Err" - DISPLAY - '** A Runtime Error Has Occurred **' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.24. CALL “CBL_EXIT_PROC” USING *function, program-pointer* - -このルーチンは、一般的な終了処理ルーチンを登録する。 - -*function*の引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。 - -*program-pointer*は、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、[6.39.2章](6-39-2.md)で説明している。 - -成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。 - -「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。 - -一度に有効にできるユーザ定義の終了手続きは1つだけである。 - -終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある。 - -終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。 - -以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。 - - IDENTIFICATION DIVISION. - PROGRAM-ID. demoexitproc. - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - 78 Exit-Proc-Install VALUE 0. - 01 Current-Date PIC X(8). - 01 Current-Time PIC X(8). - 01 Exit-Proc-Address USAGE PROCEDURE-POINTER. - 01 Formatted-Date PIC XXXX/XX/XX. - 01 Formatted-Time PIC XX/XX/XX. - PROCEDURE DIVISION. - 000-Register-Exit-Proc. - SET Exit-Proc-Address TO ENTRY "999-Exit" - CALL "CBL_EXIT_PROC" - USING Exit-Proc-Install, Exit-Proc-Address - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY 'Error: Could not register Exit Procedure' - END-IF - 099-Now-Test-Exit-Proc. - DISPLAY - 'Executing a STOP RUN...' - END-DISPLAY - GOBACK - . - 999-Exit-Proc. - ENTRY "999-Exit" - DISPLAY - '*** STOP RUN has been executed ***' - END-DISPLAY - ACCEPT - Current-Date FROM DATE YYYYMMDD - END-ACCEPT - ACCEPT - Current-Time FROM TIME - END-ACCEPT - MOVE Current-Date TO Formatted-Date - MOVE Current-Time TO Formatted-Time - INSPECT Formatted-Time REPLACING ALL '/' BY ':' - DISPLAY - '*** ' Formatted-Date ' ' Formatted-Time ' ***' - END-DISPLAY - GOBACK - . - -プログラムの出力結果は・・・ -``` -** A Runtime Error Has Occurred ** - *** 2009/08/28 10:35:10 *** -libcob: Cannot find module 'Tilt' - -``` - -#### 8.3.1.25. CALL “CBL_EQ” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、項目-1と項目-2の左端の8\**byte-length*の位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「EQ」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.26. CALL “CBL_FLUSH_FILE” USING *file-handle* - -このサブルーチンをMicro Focus COBOLでCALLすると、*file-handle*が引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。 - -このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。 - -#### 8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE *length*, BY REFERENCE *buffer* - -現在のディレクトリの完全修飾パス名が取得され、指定された*buffer*にパス名の*length*文字が保存される。 - -第1引数は使用されないが、**BY VALUE**で指定する必要がある。 - -*length*引数は**BY VALUE**で指定する必要がある。 - -*buffer*引数は**BY REFERENCE**で指定する必要がある。 - -*length*引数(数字定数またはデータ項目)に指定する値は、*buffer*引数の長さを超えてはならない。 - -*length*引数に指定された値が*buffer*引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、*buffer*の最初の*length*バイト内に空白が埋められる―そのポイント以降の*buffer*内のバイトは変更されない。 - -ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。 - -#### 8.3.1.28. CALL “CBL_IMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「IMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 1 | -| 1 | 0 | 0 | -| 1 | 1 | 1 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.29. CALL “CBL_NIMP” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NIMP」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 0 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.30. CALL “CBL_NOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 1 | -| 0 | 1 | 0 | -| 1 | 0 | 0 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.31. CALL “CBL_NOT” USING *item-1*, BY VALUE *byte-length* - -このサブルーチンは、項目-2の左端の8\**byte-length*のビットを「反転」し、結果のビット文字列を項目-2に格納する。 - -項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8\**byte-length*でなければならない。 - -byte-lengthは数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「NOT」プロセスを示している。 - -| 古い引数2ビット | 新しい引数2ビット | -| :---: | :---: | -| 0 | 1 | -| 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.32. CALL “CBL_OC_KEISEN” USING *item-1* - -CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。 - -item-1として次の集団項目を定義する。 - - 01 KEISEN. - 02 KEI-CMD PIC 9(1) COMP-X. - 02 KEI-LINE PIC 9(2) COMP-X. - 02 KEI-COL PIC 9(2) COMP-X. - 02 KEI-LNG1 PIC 9(2) COMP-X. - 02 KEI-LNG2 PIC 9(2) COMP-X. - 02 KEI-COLOR PIC 9(2) COMP-X. - 02 KEI-PRN PIC 9(2) COMP-X. - -各項目の意味を以下に示す。 - -| | | -| --- | --- | -| KEI-CMD | 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
| -| KEI-LINE | 開始ライン(1~24) | -| KEI-COL | 開始カラム(1~80) | -| KEI-LNG1 | 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4 | -| KEI-LNG2 | 線長
 縦線(1~24) KEI-CMD:5 | -| KEI-COLOR | 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。 | -| KEI-PTN | 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線 | - -#### 8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING *nanoseconds-to-sleep* - -CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。 - -*nanoseconds-to-sleep*引数は数字定数またはデータ項目である。 - -1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、*nanoseconds-to-sleep*の値に250000000を設定する。 - -[8.3.1.11章](8-3-1.md#83111-call-csleep-using-seconds-to-sleep)―**C$SLEEP**を参照 - -#### 8.3.1.34. CALL “CBL_OPEN_FILE” *file-path, access-mode*, 0, 0, *handle* - -このルーチンは、**CBL_WRITE_FILE**または**CBL_READ_FILE**で使用できる既存のファイルを開く。 - -*file-path*引数は、英数字定数またはデータ項目である。 - -*access-mode*引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。 - -- 1 = 入力 (読み取り専用) -- 2 = 出力 (書き込み専用) -- 3 = 入力または出力 - -第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。 - -最後の引数―*handle*―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。 - -RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。 - -[8.3.1.20章](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle)―**CBL_CREATE_FILE**を参照 - -#### 8.3.1.35. CALL “CBL_OR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「OR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 1 | - - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer - -このルーチンは、*handle*で定義されたファイルから指定された*buffer*に、バイト番号*offset*で始まる*nbytes*のデータを読み取る。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。 - -*flags*引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。`41`それ以外に有効な*flags*の値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.37. CALL “CBL_RENAME_FILE” USING *old-file-path, new-file-path* - -このサブルーチンを使用してファイル名を変更できる。 - -*old-file-path*で指定されたファイルは、*new-file-path*で指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。 - -このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初に*old-file-path*を*new-file-path*にコピーし、次に*old-file-path*を削除するという2段階の順序と考えられる。 - -ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。 - -#### 8.3.1.38. CALL “CBL_TOLOWER” USING *data-item*, BY VALUE *convert-length* - -このルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を小文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.12章](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length)―**C$TOLOWER**を参照 - -#### 8.3.1.39. CALL “CBL_TOUPPER” USING *data-item*, BY VALUE *convert-length* - -C$TOUPPERサブルーチンは、*convert-length*(数字定数またはデータ項目)の*data-item*(英数字一意名)の先頭文字を大文字に変換する。 - -*convert-length*引数は、**BY VALUE**で指定する必要がある。*data-item*の(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。 - -*convert-length*が負またはゼロの場合、変換は実行されない。 - -[8.3.1.13章](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length)―**C$TOUPPER**を参照 - -#### 8.3.1.40. CALL “CBL_WRITE_FILE” USING *handle, offset, nbytes, 0, buffer* - -このルーチンは、指定された*buffer*から*handle*で定義されたファイルに、*nbytes*のデータをバイト番号*offset*から書き込む。 - -*handle*引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。 - -*offset*引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。 - -*nbytes*引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 -唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。 - -完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。 - -#### 8.3.1.41. CALL “CBL_XOR” USING *item-1, item-2*, BY VALUE *byte-length* - -このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8\**byte-length*の位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。 - -項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8\**byte-length*でなければならない。 - -*byte-length*は数字定数またはデータ項目であり、**BY VALUE**で指定する必要がある。 - -下の真理値表は「XOR」プロセスを示している。 - -| 引数1ビット | 引数2ビット | 新しい引数2ビット | -| :---: | :---: | :---: | -| 0 | 0 | 0 | -| 0 | 1 | 1 | -| 1 | 0 | 1 | -| 1 | 1 | 0 | - -項目-2の8\**byte-length*ポイントの後のビットは影響を受けない。 - -結果のゼロがRETURN-CODEレジスタに戻される。 - -#### 8.3.1.42. CALL “SYSTEM” USING *command* - -このサブルーチンは、指定された*command*(英数字定数またはデータ項目)をコマンドシェルに送信する。 - -CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。 - -コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。 - -Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。 - -ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。 - -実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。 - ---- -`38` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`39` ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
-`40` **CBL_CREATE_FILE**は**CBL_OPEN_FILE**ルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
-`41` すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。
- - - -[ページトップへ](8-3-1.md) - diff --git a/automanual/old_delete/9-1.md b/automanual/old_delete/9-1.md deleted file mode 100644 index e974737..0000000 --- a/automanual/old_delete/9-1.md +++ /dev/null @@ -1,58 +0,0 @@ - -[前へ](8-3-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](9-2.md) - -# 9. サンプルプログラム - -## 9.1. FileStat-Msgs.cpy – ファイル状態コード - -このコピーブックには、ファイルI/O文によって生成されるであろう2桁のファイル状態コードを変換するためのEVALUATE文が含まれている。 - -コピーブックでは、ファイル状態データ項目の名前が「STATUS」で、エラーメッセージデータ項目の名前が「MSG」であると想定している。ただし、COPY文のREPLACING句を使用すると、次のようにユーザが名付けたデータ名を扱うことができる。 - -``` - COPY FileStat-Msgs - REPLACING STATUS BY Input-File-Status - MSG BY Error-Message. -``` - -以下は、コピーブック「FileStat-Msgs.cpy」である。 - -``` - EVALUATE STATUS - WHEN 00 MOVE 'SUCCESS ' TO MSG - WHEN 02 MOVE 'SUCCESS DUPLICATE ' TO MSG - WHEN 04 MOVE 'SUCCESS INCOMPLETE ' TO MSG - WHEN 05 MOVE 'SUCCESS OPTIONAL ' TO MSG - WHEN 07 MOVE 'SUCCESS NO UNIT ' TO MSG - WHEN 10 MOVE 'END OF FILE ' TO MSG - WHEN 14 MOVE 'OUT OF KEY RANGE ' TO MSG - WHEN 21 MOVE 'KEY INVALID ' TO MSG - WHEN 22 MOVE 'KEY EXISTS ' TO MSG - WHEN 23 MOVE 'KEY NOT EXISTS ' TO MSG - WHEN 30 MOVE 'PERMANENT ERROR ' TO MSG - WHEN 31 MOVE 'INCONSISTENT FILENAME ' TO MSG - WHEN 34 MOVE 'BOUNDARY VIOLATION ' TO MSG - WHEN 35 MOVE 'FILE NOT FOUND ' TO MSG - WHEN 37 MOVE 'PERMISSION DENIED ' TO MSG - WHEN 38 MOVE 'CLOSED WITH LOCK ' TO MSG - WHEN 39 MOVE 'CONFLICT ATTRIBUTE ' TO MSG - WHEN 41 MOVE 'ALREADY OPEN ' TO MSG - WHEN 42 MOVE 'NOT OPEN ' TO MSG - WHEN 43 MOVE 'READ NOT DONE ' TO MSG - WHEN 44 MOVE 'RECORD OVERFLOW ' TO MSG - WHEN 46 MOVE 'READ ERROR ' TO MSG - WHEN 47 MOVE 'INPUT DENIED ' TO MSG - WHEN 48 MOVE 'OUTPUT DENIED ' TO MSG - WHEN 49 MOVE 'I/O DENIED ' TO MSG - WHEN 51 MOVE 'RECORD LOCKED ' TO MSG - WHEN 52 MOVE 'END-OF-PAGE ' TO MSG - WHEN 57 MOVE 'I/O LINAGE ' TO MSG - WHEN 61 MOVE 'FILE SHARING FAILURE ' TO MSG - WHEN 91 MOVE 'FILE NOT AVAILABLE ' TO MSG - END-EVALUATE. -``` - - - -[ページトップへ](9-1.md) - diff --git a/automanual/old_delete/9-2.md b/automanual/old_delete/9-2.md deleted file mode 100644 index 2726e55..0000000 --- a/automanual/old_delete/9-2.md +++ /dev/null @@ -1,205 +0,0 @@ - -[前へ](9-1.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/[次へ](credit.md) - -## 9.2. COBDUMP – 16進数/文字データダンプサブルーチン - -次のサンプルプログラムは、渡されたデータ域の書式設定された16進数と文字のダンプを生成するための、ユーティリティサブルーチンである。 - -``` -IDENTIFICATION DIVISION. -PROGRAM-ID. COBDUMP. -***************************************************************** -** This is an OpenCOBOL subroutine that will generate a ** -** formatted Hex/Char dump of a storage area. To use this ** -** subroutine, simply CALL it as follows: ** -** ** -** CALL "COBDUMP" USING ** -** [ ] ** -** ** -** If specified, the argument specifies how many ** -** bytes of are to be dumped. If absent, all of ** -** will be dumped (i.e. LENGTH() will ** -** be assumed for ). ** -** ** -** >>> Note that the subroutine name MUST be specified in <<< ** -** >>> UPPERCASE <<< ** -** ** -** The dump is generated to STDERR, so you may pipe it to a ** -** file when you execute your program using "2> file". ** -** ** -** AUTHOR: GARY L. CUTLER ** -** CutlerGL@gmail.c ** -** ** -** NOTE: The author has a sentimental attachment to ** -** this subroutine - it's been around since 1971 ** -** and it's been converted to and run on 10 dif- ** -** ferent operating system/compiler environments ** -** ** -** DATE-WRITTEN: October 14, 1971 ** -** ** -***************************************************************** -** DATE CHANGE DESCRIPTION ** -** ====== ==================================================== ** -** GC1071 Initial coding - Univac Dept. of Defense COBOL '68 ** -** GC0577 Converted to Univac ASCII COBOL (ACOB) - COBOL '74 ** -** GC1182 Converted to Univac UTS4000 COBOL - COBOL '74 w/ ** -** SCREEN SECTION enhancements ** -** GC0883 Converted to Honeywell/Bull COBOL - COBOL '74 ** -** GC0983 Converted to IBM VS COBOL - COBOL '74 ** -** GC0887 Converted to IBM VS COBOL II - COBOL '85 ** -** GC1294 Converted to Micro Focus COBOL V3.0 - COBOL '85 w/ ** -** extensions ** -** GC0703 Converted to Unisys Universal Compiling System (UCS) ** -** COBOL (UCOB) - COBOL '85 ** -** GC1204 Converted to Unisys Object COBOL (OCOB) - COBOL 2002 ** -** GC0609 Converted to OpenCOBOL 1.1 - COBOL '85 w/ some COBOL ** -** 2002 features ** -** GC0410 Enhanced to make 2nd argument (buffer length) ** -** optional ** -***************************************************************** -ENVIRONMENT DIVISION. -CONFIGURATION SECTION. -REPOSITORY. - FUNCTION ALL INTRINSIC. -DATA DIVISION. -WORKING-STORAGE SECTION. -78 Undisplayable-Char-Symbol VALUE X'F9'. -01 Addr-Pointer USAGE POINTER. -01 Addr-Number REDEFINES Addr-Pointer - USAGE BINARY-LONG. - -01 Addr-Sub USAGE BINARY-CHAR. - -01 Addr-Value USAGE BINARY-LONG. - -01 Buffer-Length USAGE BINARY-LONG. - -01 Buffer-Sub COMP-5 PIC 9(4). - -01 Hex-Digits VALUE '0123456789ABCDEF'. -05 Hex-Digit OCCURS 16 TIMES PIC X(1). - -01 Left-Nibble COMP-5 PIC 9(1). -01 Nibble REDEFINES Left-Nibble - BINARY-CHAR. -01 Output-Detail. -05 OD-Addr. -10 OD-Addr-Hex OCCURS 8 TIMES PIC X. -05 FILLER PIC X(1). -05 OD-Byte PIC Z(3)9. -05 FILLER PIC X(1). -05 OD-Hex OCCURS 16 TIMES. -10 OD-Hex-1 PIC X. -10 OD-Hex-2 PIC X. -10 FILLER PIC X. -05 OD-ASCII OCCURS 16 TIMES - PIC X. -01 Output-Sub COMP-5 PIC 9(2). - -01 Output-Header-1. - 05 FILLER PIC X(80) VALUE - '<-Addr-> Byte ' & - '<---------------- Hexadecimal ----------------> ' & - '<---- Char ---->'. -01 Output-Header-2. - 05 FILLER PIC X(80) VALUE - '======== ==== ' & - '=============================================== ' & - '================'. -01 PIC-XX. -05 FILLER PIC X VALUE LOW-VALUES. -05 PIC-X PIC X. -01 PIC-Halfword REDEFINES PIC-XX - PIC 9(4) COMP-X. -01 PIC-X10. -05 FILLER PIC X(2). -05 PIC-X8 PIC X(8). -01 Right-Nibble COMP-5 PIC 9(1). - -LINKAGE SECTION. -01 Buffer PIC X ANY LENGTH. - -01 Buffer-Len USAGE BINARY-LONG. -PROCEDURE DIVISION USING Buffer, OPTIONAL Buffer-Len. -000-COBDUMP. - IF NUMBER-OF-CALL-PARAMETERS = 1 - MOVE LENGTH(Buffer) TO Buffer-Length - ELSE - MOVE Buffer-Len TO Buffer-Length - END-IF - MOVE SPACES TO Output-Detail - SET Addr-Pointer TO ADDRESS OF Buffer - PERFORM 100-Generate-Address - MOVE 0 TO Output-Sub - DISPLAY - Output-Header-1 UPON SYSERR - END-DISPLAY - DISPLAY - Output-Header-2 UPON SYSERR - END-DISPLAY - PERFORM VARYING Buffer-Sub FROM 1 BY 1 - UNTIL Buffer-Sub > Buffer-Length - ADD 1 - TO Output-Sub - END-ADD - IF Output-Sub = 1 - MOVE Buffer-Sub TO OD-Byte - END-IF - MOVE Buffer (Buffer-Sub : 1) TO PIC-X - IF (PIC-X < ' ') - OR (PIC-X > '~') - MOVE Undisplayable-Char-Symbol - TO OD-ASCII (Output-Sub) - ELSE - MOVE PIC-X - TO OD-ASCII (Output-Sub) - END-IF - DIVIDE PIC-Halfword BY 16 - GIVING Left-Nibble - REMAINDER Right-Nibble - END-DIVIDE - ADD 1 TO Left-Nibble - Right-Nibble - END-ADD - MOVE Hex-Digit (Left-Nibble) - TO OD-Hex-1 (Output-Sub) - MOVE Hex-Digit (Right-Nibble) - TO OD-Hex-2 (Output-Sub) - IF Output-Sub = 16 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - MOVE SPACES TO Output-Detail - MOVE 0 TO Output-Sub - SET Addr-Pointer UP BY 16 - PERFORM 100-Generate-Address - END-IF -END-PERFORM -IF Output-Sub > 0 - DISPLAY - Output-Detail UPON SYSERR - END-DISPLAY - END-IF - EXIT PROGRAM - . -100-Generate-Address. - MOVE 8 TO Addr-Sub - MOVE Addr-Number TO Addr-Value - MOVE ALL '0' TO OD-Addr - PERFORM WITH TEST BEFORE UNTIL Addr-Value = 0 - DIVIDE Addr-Value BY 16 - GIVING Addr-Value - REMAINDER Nibble - END-DIVIDE - ADD 1 TO Nibble - MOVE Hex-Digit (Nibble) - TO OD-Addr-Hex (Addr-Sub) - SUBTRACT 1 FROM Addr-Sub -END-PERFORM -. -``` - - - -[ページトップへ](9-2.md) - diff --git a/automanual/old_delete/TOC.md b/automanual/old_delete/TOC.md deleted file mode 100644 index 8e89598..0000000 --- a/automanual/old_delete/TOC.md +++ /dev/null @@ -1,239 +0,0 @@ -目次 -1. [まえがき](1-1.md) - - [1.1. opensource COBOLとは](1-1.md#11-opensource-cobolとは) - - [1.2. COBOL/opensource COBOLの重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) - - [1.2.1. COBOLプログラムの構文](1-2-1.md#121-cobolプログラムの構文) - - [1.2.2. コピーブック](1-2-2.md) - - [1.2.3. 構造化データ](1-2-3.md) - - [1.2.4. ファイル](1-2-4.md) - - [1.2.5. 表操作](1-2-5.md) - - [1.2.6. データの並び替えと結合](1-2-6.md) - - [1.2.7. 文字列操作](1-2-7.md) - - [1.2.8. テキストユーザインターフェース(TUI)機能](1-2-8.md) - - [1.3. 構文規則](1-3.md) - - [1.4. ソースコードの形式](1-4.md) - - [1.5. カンマ/セミコロンの使い方](1-5.md) - - [1.6. COPY文の使い方](1-6.md) - - [1.7. 定数の使い方](1-7-1.md) - - [1.7.1. 数字定数](1-7-1.md#171-数字定数) - - [1.7.2. 英数字定数](1-7-2.md) - - [1.7.3. 日本語定数](1-7-3.md) - - [1.8. 表意定数の使い方](1-8.md) - - [1.9. ユーザ定義名](1-9.md) - - [1.10. LENGTH OFの使い方](1-10.md) -2. [opensource COBOLのプログラム形式](2-1.md) - - [2.1. ネストされたユーザプログラム](2-1.md#21-ネストされたユーザプログラム) - - [2.2. ネストされたユーザ定義関数](2-2.md) -3. [見出し部](3.md) -4. [環境部](4-1-1.md) - - [4.1. 構成節](4-1-1.md#41-構成節) - - [4.1.1. 翻訳用計算機段落](4-1-1.md#411-翻訳用計算機段落) - - [4.1.2. 実行用計算機段落](4-1-2.md) - - [4.1.3. リポジトリ段落](4-1-3.md) - - [4.1.4. 特殊名段落](4-1-4.md) - - [4.2. 入出力節](4-2-1-1.md) - - [4.2.1. ファイル管理段落](4-2-1-1.md#421-ファイル管理段落) - - [4.2.1.1. 順編成ファイル](4-2-1-1.md#4211-順編成ファイル) - - [4.2.1.2. 相対編成ファイル](4-2-1-2.md) - - [4.2.1.3. 索引編成ファイル](4-2-1-3.md) - - [4.2.2. 入出力管理段落](4-2-2.md) -5. [データ部](5-1.md) - - [5.1. ファイル記述](5-1.md#51-ファイル記述) - - [5.2. 整列用記述](5-2.md) - - [5.3. データ記述の形式](5-3.md) - - [5.4. 条件名](5-4.md) - - [5.5. 定数記述](5-5.md) - - [5.6. 画面記述](5-6.md) -6. [手続き部](6-1-1.md) - - [6.1. 構成要素](6-1-1.md#61-構成要素) - - [6.1.1. 表の参照](6-1-1.md#611-表の参照) - - [6.1.2. データ名の修飾](6-1-2.md) - - [6.1.3. 部分参照](6-1-3.md) - - [6.1.4. 式](6-1-4-1.md) - - [6.1.4.1. 算術式](6-1-4-1.md#6141-算術式) - - [6.1.4.2. 条件式](6-1-4-2.md) - - [6.1.5. ピリオド(.)](6-1-5.md) - - [6.1.6. 動詞/END-動詞](6-1-6.md) - - [6.1.7. 特殊レジスタ](6-1-7.md) - - [6.1.8. ファイルへの同時アクセス制御](6-1-8-1.md) - - [6.1.8.1. ファイル共有](6-1-8-1.md#6181-ファイル共有) - - [6.1.8.2. レコードロック](6-1-8-2.md) - - [6.2. 記述形式](6-2.md) - - [6.3. 宣言の記述形式](6-3.md) - - [6.4. ACCEPT](6-4-1.md) - - [6.4.1. ACCEPT文の書き方1 ― コンソールからの読み取り](6-4-1.md#641-accept文の書き方1--コンソールからの読み取り) - - [6.4.2. ACCEPT文の書き方2 ― コマンドライン引数の取得](6-4-2.md) - - [6.4.3. ACCEPT文の書き方3 ― 環境変数値の取得](6-4-3.md) - - [6.4.4. ACCEPT文の書き方4 ― 画面データの取得](6-4-4.md) - - [6.4.5. ACCEPT文の書き方5 ― 日付/時刻の取得](6-4-5.md) - - [6.4.6. ACCEPT文の書き方6 ― 画面サイズデータの取得](6-4-6.md) - - [6.4.7. ACCEPT文の例外処理](6-4-7.md) - - [6.5. ADD](6-5-1.md) - - [6.5.1. ADD文の書き方1 ― ADD TO](6-5-1.md#651-add文の書き方1--add-to) - - [6.5.2. ADD文の書き方2 ― ADD GIVING](6-5-2.md) - - [6.5.3. ADD文の書き方3 ― ADD CORRESPONDING](6-5-3.md) - - [6.6. ALLOCATE](6-6.md) - - [6.7. CALL](6-7.md) - - [6.8. CANCEL](6-8-1.md) - - [6.8.1. CANCEL文の書き方1 ― CANCEL](6-8-1.md#681-cancel文の書き方1--cancel) - - [6.8.2. CANCEL文の書き方2 ― CANCEL ALL](6-8-2.md) - - [6.9. CLOSE](6-9.md) - - [6.10. COMMIT](6-10.md) - - [6.11. COMPUTE](6-11.md) - - [6.12. CONTINUE](6-12.md) - - [6.13. DELETE](6-13-1.md) - - [6.13.1. DELETE文の書き方1 ― DELETE](6-13-1.md#6131-delete文の書き方1--delete) - - [6.13.2. DELETE文の書き方2 ― DELETE FILE](6-13-2.md) - - [6.14. DISPLAY](6-14-1.md) - - [6.14.1. DISPLAY文の書き方1 ― UPON CONSOLE](6-14-1.md#6141-display文の書き方1--upon-console) - - [6.14.2. DISPLAY文の書き方2 ― コマンドライン引数へのアクセス](6-14-2.md) - - [6.14.3. DISPLAY文の書き方3 ― 環境変数へのアクセスまたは設定](6-14-3.md) - - [6.14.4. DISPLAY文の書き方4 ― 画面データ](6-14-4.md) - - [6.14.5. DISPLAY文の例外処理](6-14-5.md) - - [6.15. DIVIDE](6-15-1.md) - - [6.15.1. DIVIDE文の書き方1 ― DIVIDE INTO](6-15-1.md#6151-divide文の書き方1--divide-into) - - [6.15.2. DIVIDE文の書き方2 ― DIVIDE INTO GIVING](6-15-2.md) - - [6.15.3. DIVIDE文の書き方3 ― DIVIDE BY GIVING](6-15-3.md) - - [6.15.4. DIVIDE文の書き方4 ― DIVIDE INTO REMAINDER](6-15-4.md) - - [6.15.5. DIVIDE文の書き方5 ― DIVIDE BY REMAINDER](6-15-5.md) - - [6.16. ENTRY](6-16.md) - - [6.17. EVALUATE](6-17.md) - - [6.18. EXIT](6-18.md) - - [6.19. FREE](6-19.md) - - [6.20. GENERATE](6-20.md) - - [6.21. GOBACK](6-21.md) - - [6.22. GO TO](6-22-1.md) - - [6.22.1. GO TO文の書き方1 ― GO TO](6-22-1.md#6221-go-to文の書き方1--go-to) - - [6.22.2. GO TO文の書き方2 ― GO TO DEPENDING ON](6-22-2.md) - - [6.23. IF](6-23.md) - - [6.24. INITIALIZE](6-24.md) - - [6.25. INITIATE](6-25.md) - - [6.26. INSPECT](6-26.md) - - [6.27. MERGE](6-27.md) - - [6.28. MOVE](6-28-1.md) - - [6.28.1. MOVE文の書き方1 ― MOVE](6-28-1.md#6281-move文の書き方1--move) - - [6.28.2. MOVE文の書き方2 ― MOVE CORRESPONDING](6-28-2.md) - - [6.29. MULTIPLY](6-29-1.md) - - [6.29.1. MULTIPLY文の書き方1 ― MULTIPLY BY](6-29-1.md#6291-multiply文の書き方1--multiply-by) - - [6.29.2. MULTIPLY文の書き方2 ― MULTIPLY GIVING](6-29-2.md) - - [6.30. NEXT SENTENCE](6-30.md) - - [6.31. OPEN](6-31.md) - - [6.32. PERFORM](6-32-1.md) - - [6.32.1. PERFORM文の書き方1 ― 手続き型](6-32-1.md#6321-perform文の書き方1--手続き型) - - [6.32.2. PERFORM文の書き方2 ― インライン型](6-32-2.md) - - [6.33. READ](6-33-1.md) - - [6.33.1. READ文の書き方1 ― 順次読み取り](6-33-1.md#6331-read文の書き方1-順次読み取り) - - [6.33.2. READ文の書き方2 ― ランダム読み取り](6-33-2.md) - - [6.34. RELEASE](6-34.md) - - [6.35. RETURN](6-35.md) - - [6.36. REWRITE](6-36.md) - - [6.37. ROLLBACK](6-37.md) - - [6.38. SEARCH](6-38-1.md) - - [6.38.1. SEARCH文の書き方1 ― 順次探索](6-38-1.md#6381-search文の書き方1--順次探索) - - [6.38.2. SEARCH文の書き方2 ― 二分探索(SEARCH ALL)](6-38-2.md) - - [6.39. SET](6-39-1.md) - - [6.39.1. SET文の書き方1 ― 環境設定](6-39-1.md#6391-set文の書き方1--環境設定) - - [6.39.2. SET文の書き方2 ― プログラムポインター設定](6-39-2.md) - - [6.39.3. SET文の書き方3 ― アドレス設定](6-39-3.md) - - [6.39.4. SET文の書き方4 ― インデックス設定](6-39-4.md) - - [6.39.5. SET文の書き方5 ― UP/DOWN設定](6-39-5.md) - - [6.39.6. SET文の書き方6 ― 条件名設定](6-39-6.md) - - [6.39.7. SET文の書き方7 ― スイッチ設定](6-39-7.md) - - [6.40. SORT](6-40-1.md) - - [6.40.1. SORT文の書き方1 ― ファイルソート](6-40-1.md#6401-sort文の書き方1--ファイルソート) - - [6.40.2. SORT文の書き方2 ― テーブルソート](6-40-2.md) - - [6.41. START](6-41.md) - - [6.42. STOP](6-42.md) - - [6.43. STRING](6-43.md) - - [6.44. SUBTRACT](6-44-1.md) - - [6.44.1. SUBTRACT文の書き方1 ― SUBTRACT FROM](6-44-1.md#6441-subtract文の書き方1--subtract-from) - - [6.44.2. SUBTRACT文の書き方2 ― SUBTRACT GIVING](6-44-2.md) - - [6.44.3. SUBTRACT文の書き方3 ― SUBTRACT CORRESPONDING](6-44-3.md) - - [6.45. SUPPRESS](6-45.md) - - [6.46. TERMINATE](6-46.md) - - [6.47. TRANSFORM](6-47.md) - - [6.48. UNLOCK](6-48.md) - - [6.49. UNSTRING](6-49.md) - - [6.50. WRITE](6-50.md) -7. [日本語の使用](7-1.md) - - [7.1. 英数字項目の日本語](7-1.md#71-英数字項目の日本語) - - [7.2. 日本語項目と表意定数](7-2.md) - - [7.3. 各命令文と日本語の取扱い](7-3-1.md) - - [7.3.1. MOVE文](7-3-1.md#731-move文) - - [7.3.2. ACCEPT/DISPLAY文](7-3-2.md) - - [7.4. UTF-8の使用](7-4.md) -8. [opensource COBOLシステムインターフェース](8-1-1.md) - - [8.1. opensource COBOLコンパイラの使い方(cobc)](8-1-1.md#81-opensource-cobolコンパイラの使い方cobc) - - [8.1.1. 解説](8-1-1.md#811-解説) - - [8.1.2. コンパイルオプション](8-1-2.md) - - [8.1.3. 実行可能プログラムのコンパイル](8-1-3.md) - - [8.1.4. 動的にロード可能なサブプログラム](8-1-4.md) - - [8.1.5. 静的サブルーチン](8-1-5.md) - - [8.1.6. COBOLとCプログラムの結合](8-1-6.md) - - [8.1.6.1. opensource COBOLランタイムライブラリの要件](8-1-6.md#8161-opensource-cobolランタイムライブラリの要件) - - [8.1.6.2. opensource COBOLとCの文字列割り当ての違い](8-1-6.md#8162-opensource-cobolとcの文字列割り当ての違い) - - [8.1.6.3. Cデータ型とopensource COBOL USAGE句の一致](8-1-6.md#8163-cデータ型とopensource-cobol-usage句の一致) - - [8.1.6.4. opensource COBOLメインプログラムのCサブプログラム呼び出し](8-1-6.md#8164-opensource-cobolメインプログラムのcサブプログラム呼び出し) - - [8.1.6.5. Cメインプログラムのopensource COBOLサブプログラム呼び出し](8-1-6.md#8165-cメインプログラムのopensource-cobolサブプログラム呼び出し) - - [8.1.7. 重要な環境変数](8-1-7.md) - - [8.1.8. コンパイル時のコピーブックの検索](8-1-8.md) - - [8.1.9. コンパイラ構成ファイルの使い方](8-1-9.md) - - [8.2. opensource COBOLプログラムの実行](8-2-1.md) - - [8.2.1. プログラムの直接実行](8-2-1.md#821-プログラムの直接実行) - - [8.2.2. 「cobcrun」ユーティリティの使用](8-2-2.md) - - [8.2.3. プログラムの引数](8-2-3.md) - - [8.2.4. 重要な環境変数](8-2-4.md) - - [8.3. 組み込みサブルーチン](8-3-1.md) - - [8.3.1. 「名前による呼び出し」ルーチン](8-3-1.md#831-名前による呼び出しルーチン) - - [8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status](8-3-1.md#8311-call-ccalledby-using-program-name-giving-status) - - [8.3.1.2. CALL “C$CHDIR” USING directory-path, result](8-3-1.md#8312-call-cchdir-using-directory-path-result) - - [8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0](8-3-1.md#8313-call-ccopy-using-src-file-path-dest-file-path-0) - - [8.3.1.4. CALL “C$DELETE” USING file-path, 0](8-3-1.md#8314-call-cdelete-using-file-path-0) - - [8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info](8-3-1.md#8315-call-cfileinfo-using-file-path-file-info) - - [8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”](8-3-1.md#8316-call-cjustify-using-data-item-justification-type) - - [8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3](8-3-1.md#8317-call-clist-directory-using-item-1-item-2-item-3) - - [8.3.1.8. CALL “C$MAKEDIR” USING dir-path](8-3-1.md#8318-call-cmakedir-using-dir-path) - - [8.3.1.9. CALL “C$NARG” USING arg-count-result](8-3-1.md#8319-call-cnarg-using-arg-count-result) - - [8.3.1.10. CALL “C$PARAMSIZE” USING argument-number](8-3-1.md#83110-call-cparamsize-using-argument-number) - - [8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep](8-3-1.md#83111-call-csleep-using-seconds-to-sleep) - - [8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83112-call-ctolower-using-data-item-by-value-convert-length) - - [8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83113-call-ctoupper-using-data-item-by-value-convert-length) - - [8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83114-call-cbl_and-using-item-1-item-2-by-value-byte-length) - - [8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83115-call-cbl_change_dir-using-directory-path) - - [8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info](8-3-1.md#83116-call-cbl_check_file_exist-using-file-path-file-info) - - [8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path](8-3-1.md#83117-call-cbl_change_dir-using-directory-path) - - [8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path](8-3-1.md#83118-call-cbl_copy_file-using-src-file-path-dest-file-path) - - [8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path](8-3-1.md#83119-call-cbl_create_dir-using-dir-path) - - [8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle](8-3-1.md#83120-call-cbl_create_file-using-file-path-2-0-0-file-handle) - - [8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path](8-3-1.md#83121-call-cbl_delete_dir-using-dir-path) - - [8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path](8-3-1.md#83122-call-cbl_delete_file-using-file-path) - - [8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer](8-3-1.md#83123-call-cbl_error_proc-using-function-program-pointer) - - [8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer](8-3-1.md#83124-call-cbl_exit_proc-using-function-program-pointer) - - [8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83125-call-cbl_eq-using-item-1-item-2-by-value-byte-length) - - [8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle](8-3-1.md#83126-call-cbl_flush_file-using-file-handle) - - [8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer](8-3-1.md#83127-call-cbl_get_current_dir-using-by-value-0-by-value-length-by-reference-buffer) - - [8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83128-call-cbl_imp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83129-call-cbl_nimp-using-item-1-item-2-by-value-byte-length) - - [8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83130-call-cbl_nor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length](8-3-1.md#83131-call-cbl_not-using-item-1-by-value-byte-length) - - [8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1](8-3-1.md#83132-call-cbl_oc_keisen-using-item-1) - - [8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep](8-3-1.md#83133-call-cbl_oc_nanosleep-using-nanoseconds-to-sleep) - - [8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle](8-3-1.md#83134-call-cbl_open_file-file-path-access-mode-0-0-handle) - - [8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83135-call-cbl_or-using-item-1-item-2-by-value-byte-length) - - [8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer](8-3-1.md#83136-call-cbl_read_file-using-handle-offset-nbytes-flag-buffer) - - [8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path](8-3-1.md#83137-call-cbl_rename_file-using-old-file-path-new-file-path) - - [8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length](8-3-1.md#83138-call-cbl_tolower-using-data-item-by-value-convert-length) - - [8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length](8-3-1.md#83139-call-cbl_toupper-using-data-item-by-value-convert-length) - - [8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer](8-3-1.md#83140-call-cbl_write_file-using-handle-offset-nbytes-0-buffer) - - [8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length](8-3-1.md#83141-call-cbl_xor-using-item-1-item-2-by-value-byte-length) - - [8.3.1.42. CALL “SYSTEM” USING command](8-3-1.md#83142-call-system-using-command) -9. [サンプルプログラム](9-1.md) - - [9.1. FileStat-Msgs.cpy – ファイル状態コード](9-1.md#91-filestat-msgscpy--ファイル状態コード) - - [9.2. COBDUMP – 16進数/文字データダンプサブルーチン](9-2.md) - -[クレジット](credit.md) - - - -[ページトップへ](TOC.md) - diff --git a/automanual/old_delete/credit.md b/automanual/old_delete/credit.md deleted file mode 100644 index aff9f44..0000000 --- a/automanual/old_delete/credit.md +++ /dev/null @@ -1,39 +0,0 @@ - -[前へ](9-2.md)/[目次](https://opensourcecobol.github.io/markdown/TOC.html)/次へ - -
- -# クレジット - -opensource COBOL Programmer's Guide - -【制作】
-OSSコンソーシアム オープンCOBOLソリューション部会 - -【原著】
-Gary Cutler ("OpenCOBOL 1.1 Programmer’s Guide") - -【翻訳・執筆】
-東京システムハウス株式会社 島田桃花 - -【マークダウン化】
-東京システムハウス株式会社 馮婉怡、横川桃子、横山颯斗 - -【監修】
-東京システムハウス株式会社 比毛寛之、上野俊作、井坂徳恭
-株式会社SIT11 飯島裕一 - -【協力】(50音順)
-OVOL ICTソリューションズ株式会社
-株式会社SIT11
-株式会社CIJ
-サン情報サービス株式会社
- -【発行】
-OSSコンソーシアム オープンCOBOLソリューション部会
-URL: [https://www.osscons.jp/osscobol/](https://www.osscons.jp/osscobol/) - - - -[ページトップへ](credit.md) - diff --git a/automanual/opensourcecobol.github.io.code-workspace b/automanual/opensourcecobol.github.io.code-workspace deleted file mode 100644 index 36af5d8..0000000 --- a/automanual/opensourcecobol.github.io.code-workspace +++ /dev/null @@ -1,20 +0,0 @@ -{ - "folders": [ - { - "path": ".." - }, - { - "path": "../../../opensourcecobol4j-1.1.1" - } - ], - "settings": { - "coboleditor.metadata_symbols": [], - "coboleditor.metadata_entrypoints": [], - "coboleditor.metadata_types": [], - "coboleditor.metadata_files": [ - "1719534595000,tests/cobol85/DB/DB103M.CBL", - "1722229028318,automanual/AUTOMANUAL.cbl" - ], - "coboleditor.metadata_knowncopybooks": [] - } -} \ No newline at end of file From 089908932df2054a59ff8c625d0eb707e5bf01f6 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 12:00:59 +0900 Subject: [PATCH 04/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/3.md b/markdown/3.md index b7d9c30..ddb7699 100644 --- a/markdown/3.md +++ b/markdown/3.md @@ -12,7 +12,7 @@ 2. PROGRAM-ID句は他のプログラムが参照できるように(つまりCALL “program-name”)、名前(プログラム名)を定義する。 -3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「**-m**」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「**-x**」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 +3. プログラム名は大文字と小文字を区別する。コンパイル単位が動的にロード可能なライブラリファイル(opensource COBOLコンパイラコマンドの「 **-m** 」オプションを使用するもの)として作成されている場合、コンパイラによって作成されたライブラリファイル名はプログラム名と完全に一致する。コンパイル単位が実行可能ファイル(opensource COBOLコンパイラコマンドの「 **-x** 」オプションを使用するもの)として作成されている場合、プログラムIDは有効なCOBOL一意名となり、実行可能ファイル名は、「cbl」または「cob」拡張子のないソースプログラムファイル名と同じになる。 4. INITIAL句とCOMMON句は、サブプログラム内で使用される。COMMON句はネストされたユーザプログラムであるサブプログラム内でのみ使うことができる。 From 43d4a4f8e66c35a12e3a2e9ed5d97699b7022700 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 12:59:48 +0900 Subject: [PATCH 05/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/4-1-1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/markdown/4-1-1.md b/markdown/4-1-1.md index b062d87..c3059e3 100644 --- a/markdown/4-1-1.md +++ b/markdown/4-1-1.md @@ -31,9 +31,9 @@ 1. 計算機名-1に指定された値が、opensource COBOLの予約語とは一致しない有効なCOBOL語である場合、この値は定義と無関係である。 -2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「**-W**」、「**-Wobsolete**」、または「**-Wall**」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 +2. オプションのWITH DEBUGGING MODE句が存在する場合、廃止した構文としてフラグが付けられ(「 **-W** 」、「 **-Wobsolete** 」、または「 **-Wall** 」コンパイラスイッチを使う場合)、プログラムのコンパイルには影響しない。 -3. ただし、opensource COBOLコンパイラへの「**-fdebugging-line**」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 +3. ただし、opensource COBOLコンパイラへの「 **-fdebugging-line** 」スイッチを指定することで、プログラムのデバッグ行をコンパイルできる。opensource COBOLプログラムでデバッグ行を指定する方法については[1.4](1-4.md)で説明している。 From 2017d21a2c24beb5b2d6ec02ca2e3a9ba139bd07 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:00:15 +0900 Subject: [PATCH 06/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/4-1-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/4-1-3.md b/markdown/4-1-3.md index 189f987..c48b3ea 100644 --- a/markdown/4-1-3.md +++ b/markdown/4-1-3.md @@ -11,7 +11,7 @@ 1. 関数名の前に「FUNCTION」とコーディングしなくても、一つ以上(またはすべて)の組み込み関数に使用可能とするフラグを立てることができる。 -2. この段落を使用する代わりに、「**-ffunctions-all**」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 +2. この段落を使用する代わりに、「 **-ffunctions-all** 」スイッチを用いてopensource COBOLプログラムをコンパイルすることもできる。 From 4c9cf868a8c819c884dba31cee7a06cb5f232b02 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:00:57 +0900 Subject: [PATCH 07/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-1-8-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/6-1-8-1.md b/markdown/6-1-8-1.md index 6764a0b..3f3938c 100644 --- a/markdown/6-1-8-1.md +++ b/markdown/6-1-8-1.md @@ -9,7 +9,7 @@ #### 6.1.8.1. ファイル共有 -opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「**fcntl()**」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 +opensource COBOLは、プログラムがファイルを開こうとしたときに適用されるファイル共有の概念によって、最水準でファイルの同時アクセスを制御する([6.31](6-31.md)を参照)。これは「 **fcntl()** 」と呼ばれるUNIXオペレーティングシステムルーチンを介して実行される。そのモジュールは現在Windowsでサポートされておらず`15`、MinGW Unixエミュレーションパッケージに含まれていない。MinGW環境を使用して作成されたopensource COBOLビルドは、ファイル共有制御をサポートできなくなる―そのような環境ではファイルが常に共有される。WindowsでCygwin環境を使用して作成されたopensource COBOLビルドは、「fcntl()」にアクセスできると思われるため、ファイル共有をサポートするだろう。もちろん、opensource COBOLのUnixビルドやMacOSビルドは`16`、「fcntl()」がUnixに組み込まれているため、BDBを使用しても問題はない。 OPENの成功に課せられる制限は、プログラムがファイルをCLOSEするか、終了するまで残る。 From 77f8179cc91b5d301a3e02ac0490a306a4a0de2a Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:01:30 +0900 Subject: [PATCH 08/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/6-3.md b/markdown/6-3.md index 374bec7..c2055e2 100644 --- a/markdown/6-3.md +++ b/markdown/6-3.md @@ -11,7 +11,7 @@ 1. RWCSは現在opensource COBOLにおいてサポートされていないため、USE BEFORE REPORTING句は構文的には認識されても拒否される。 -2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「**-Wall**」または「**-W**」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 +2. USE FOR DEBUGGING句も同様に、構文的に認識されても無視されてしまう。「 **-Wall** 」または「 **-W** 」のコンパイラスイッチを使用すると、この機能がまだ実装されていないことを示す警告メッセージが表示される。 3. USE AFTER STANDARD ERROR PROCEDURE句では、指定されたI/Oタイプで(または指定されたファイルに対して)障害が発生したときに呼び出されるルーチンを定義する。 From 84c4d243b78b5a20dfc3792b34e2a4c1eefd0d06 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:03:11 +0900 Subject: [PATCH 09/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-33-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/6-33-1.md b/markdown/6-33-1.md index e28bc9b..c54d1e4 100644 --- a/markdown/6-33-1.md +++ b/markdown/6-33-1.md @@ -33,7 +33,7 @@ 9. レコードのLOCK句については[6.1.8.2](6-1-8-2.md)で説明している。 -10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、**_ゼロ以外のファイルステータス値を検出しないため、_**DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 +10. AT END句が存在する場合、ファイルステータスが10「ファイルの終わり」であることが原因でREADの試行が失敗した時に命令文1を実行する。AT END句は、 **_ゼロ以外のファイルステータス値を検出しないため、_** DECLARATIVESルーチン([6.3](6-3.md))またはREAD後に明示的に宣言されたファイルステータス項目を使って、ファイルの終わり以外のエラー状態を検出する。 11. NOT AT END句が存在する場合、READの試行が成功すると、命令文2が実行される。 From 77ae781be6faa6ede3ccd1919d0b592681f1b2bb Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:04:00 +0900 Subject: [PATCH 10/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-40-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/6-40-1.md b/markdown/6-40-1.md index 6eaa9f0..ea5dd7c 100644 --- a/markdown/6-40-1.md +++ b/markdown/6-40-1.md @@ -33,7 +33,7 @@ d. INPUT PROCEDURE内で実行されたSTOP RUN、EXIT PROGRAM、またはGOBACKは、現在実行中のプログラムとSORT文を終了する。 - e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。**_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** + e. INPUT PROCEDUREから制御を移すGO TO文は、SORT文を終了するが、GO TOが制御を移した位置からプログラムの実行を継続できるようにする。GO TOを使ってINPUT PROCEDUREを中止すると、再開することはできなくなるが、SORT文自体を再実行することはできる。この方法でSORT文を再起動すると、以前整列ファイルにリリースされたレコードはすべて失われてしまう。 **_GO TOを使って整列を早期に終了したり、以前に中止したSORT文を再開したりすることは、優れたプログラミングとは見なされないため、回避しなければならない。_** f. データが整列ファイルにロードされると、実際には動的に割り当てられたメモリにバッファリングされる。整列されるデータの量が使用可能なソートメモリ量(128MB)`24`を超える場合にのみ、実際のディスクファイルが割り当てられて使用される。これらの「整列作業ファイル」については、後ほど説明する。 From 3abd036d181546f02c89ed572d308bb672ee365b Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:05:44 +0900 Subject: [PATCH 11/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-1-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-1-4.md b/markdown/8-1-4.md index 3b1b56a..0bb9e12 100644 --- a/markdown/8-1-4.md +++ b/markdown/8-1-4.md @@ -3,7 +3,7 @@ ### 8.1.4. 動的にロード可能なサブプログラム -実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「**-m**」オプションを使ってコンパイルする必要がある。 +実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「 **-m** 」オプションを使ってコンパイルする必要がある。 cobc –m sprog1.cbl または From 88d683ef3ca47d0b306d28e2ac283db609b66d8c Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:07:22 +0900 Subject: [PATCH 12/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-1-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-1-4.md b/markdown/8-1-4.md index 0bb9e12..6eb8517 100644 --- a/markdown/8-1-4.md +++ b/markdown/8-1-4.md @@ -34,7 +34,7 @@ 5. 4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。 -「**-x**」オプションではなく「**-m**」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 +「 **-x** 」オプションではなく「 **-m** 」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、[8.2.2](8-2-2.md)で説明しているように、cobcrunコマンドを使う必要がある。 From 2459cfd410530c91b15e5f6b9dfdcb590218f083 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:07:48 +0900 Subject: [PATCH 13/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-1-5.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-1-5.md b/markdown/8-1-5.md index 5423e88..f9ce1da 100644 --- a/markdown/8-1-5.md +++ b/markdown/8-1-5.md @@ -7,7 +7,7 @@ opensource COBOLサブルーチンをアセンブラソースコードにコン cobc –S sprog1.cbl -(注:「**-S**」は大文字で表記する) +(注:「 **-S** 」は大文字で表記する) これにより、「sprog1.s」というアセンブラソースファイルが作成される。複数の入力ファイルを指定すると、それぞれが独自の「.s」ファイルを作成する。 From 21df388e9874457b41c521e65cccc48d7a7ed8ee Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:08:44 +0900 Subject: [PATCH 14/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-1-7.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/markdown/8-1-7.md b/markdown/8-1-7.md index cc22abd..b50e7e3 100644 --- a/markdown/8-1-7.md +++ b/markdown/8-1-7.md @@ -10,14 +10,14 @@ |環境変数 | 使い方 | | :--- | :--- | |COB_CC | opensource COBOLで使用するCコンパイラの名前に設定する。
**この機能の利用は自己責任である―opensource COBOLビルドが生成されたCコンパイラを常に使用する必要がある。** | -| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「**-Iprefix/include**」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | +| COB_CFLAGS`33` | cobcコンパイラからCコンパイラに渡すスイッチに設定する(cobcが指定するスイッチに加えて)。既定値は「 **-Iprefix/include** 」で、「prefix」は使用しているopensource COBOLのインストールパスである。 | | COB_CONFIG_DIR | opensource COBOLの「構成」ファイルが保存されているフォルダへのパスに設定する。構成ファイルの使用方法については、[8.1.9](8-1-9.md)で説明する。 | | COB_COPY_DIR | プログラムに必要なCOPYモジュールがプログラムと同じディレクトリに保管されていない場合は、この環境変数をCOPYモジュールが含まれているフォルダに設定する(IBMメインフレームプログラマはこれを「SYSLIB」と認識する)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | | COB_DATE | システム日付に任意の日付を「yyyy/mm/dd」の形式で設定する。 | |COB_IO_ASSUME_REWRITE | この環境変数に「Y」を設定することで、I-Oオプションでファイルを開いた時のWRITEをREWRITEに読み替えられるようにする。 | | COB_LDADD | プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定できる追加のリンカースイッチ(ld)に設定する。既定値は””(null)。 | | COB_LDFLAGS | cobcコンパイラからCコンパイラに渡すリンカ/ローダ(ld)スイッチに設定する(cobcが指定するスイッチに加えて)。既定値は未設定。 | -| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「**-Lprefix/lib-lcob**」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | +| COB_LIBS| プログラムとリンクする必要のある標準ライブラリが見つけられる場所を指定するリンカースイッチ(ld)に設定する。既定値は「 **-Lprefix/lib-lcob** 」で、「prefix」は、使用しているopensource COBOLバイナリが作成されたときに指定されたパスプレフィックスである。 | | COB_NIBBLE_C_UNSIGNED |この環境変数に「Y」を設定することで、字類検査においてPIC 9項目の値に符号ニブル「C」を許容する。 | | COB_VERBOSE |この環境変数に「Y」を設定することで、SORT実行時に出力するメッセージを冗長化することが可能になる。 | | COBCPY | この環境変数は、コンパイラがCOPYモジュールを見つけられる場所を指定する追加手段を提供する(上記のCOB_COPY_DIRも参照)。COPYモジュールの使用に関する追加情報については、[8.1.8](8-1-8.md)で説明する。 | From f687a94d9ee005fd19cdaa93a46a32028e7abc88 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:09:20 +0900 Subject: [PATCH 15/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-1-8.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-1-8.md b/markdown/8-1-8.md index 34316e0..34aec3a 100644 --- a/markdown/8-1-8.md +++ b/markdown/8-1-8.md @@ -6,7 +6,7 @@ opensource COBOLコンパイラは、以下のフォルダでコピーブック(COPY文を介してコンパイルプロセスに持ち込まれたソースコードモジュール)を検索する。検索は以下の順序で実行され、コピーブックが見つかると終了する。 - コンパイルされるプログラムが存在するフォルダ。 -- 「**-I**」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 +- 「 **-I** 」コンパイラスイッチ([8.1.2](8-1-2.md)を参照)で指定されたフォルダ。 - COBCPY環境変数([8.1.7](8-1-7.md)を参照)で指定された各フォルダ。システムに適した区切り文字で区切ることによって、単一のフォルダあるいは複数のフォルダを指定することができる。`34`複数のフォルダを指定した場合、環境変数で指定された順序で検索される。 - COB_COPY_DIR環境変数([8.1.7](8-1-7.md)を参照)で指定されたフォルダ。 From 01422105bf2d39ef4890c71126c88ba22cd3d5be Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:09:52 +0900 Subject: [PATCH 16/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-1-9.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-1-9.md b/markdown/8-1-9.md index b805f5e..b3ff0af 100644 --- a/markdown/8-1-9.md +++ b/markdown/8-1-9.md @@ -5,7 +5,7 @@ opensource COBOLは、コンパイラ構成ファイルを使って、コンパイルプロセスを制御する様々なオプションを定義する。これらの構成ファイルは、「-conf」コンパイルスイッチで指定されるか、COB_CONFIG_PATH環境変数で定義されたフォルダにある。 -以下は、「初期値」構成ファイル(「**-conf**」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 +以下は、「初期値」構成ファイル(「 **-conf** 」スイッチを指定しない場合に使用される)の逐語的なリストで、設定を表示する。 ``` # COBOL compiler configuration -*- sh -*- From c705a2f9cd9ac461ed0a4642d1125427df6ae3ce Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:10:27 +0900 Subject: [PATCH 17/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-2-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-2-1.md b/markdown/8-2-1.md index 65ffe25..051e07a 100644 --- a/markdown/8-2-1.md +++ b/markdown/8-2-1.md @@ -5,7 +5,7 @@ ### 8.2.1. プログラムの直接実行 -「**-x**」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「**-x**」オプションを指定すると「.exe」ファイルとして生成される。 +「 **-x** 」オプションを指定してコンパイルされたopensource COBOLプログラムは、直接実行可能なプログラムとして生成される。例えば、Windowsシステムで「 **-x** 」オプションを指定すると「.exe」ファイルとして生成される。 これらのネイティブ実行可能ファイルは、非グラフィカルユーザインターフェースプログラムとしての実行に適している。 From 6713f37dbfbdddf88d84704bd1e2cbd683974efc Mon Sep 17 00:00:00 2001 From: momo2584 Date: Mon, 3 Feb 2025 13:11:03 +0900 Subject: [PATCH 18/40] =?UTF-8?q?=E5=A4=AA=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-2-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-2-2.md b/markdown/8-2-2.md index 0f38d99..024e37c 100644 --- a/markdown/8-2-2.md +++ b/markdown/8-2-2.md @@ -3,7 +3,7 @@ ### 8.2.2. 「cobcrun」ユーティリティの使用 -「**-m**」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 +「 **-m** 」オプションを使用してメインプログラムに対してもコンパイラの出力形式を指定することにより、サブルーチンだけでなくすべてのopensource COBOLプログラムの実行可能モジュールを生成できる([8.1.4](8-1-4.md)で説明したように、これは推奨されているサブルーチンの出力形式オプションである)。 opensource COBOLメインプログラムをこれらの動的にロード可能なモジュールにコンパイルして、「メインプログラムなのかサブルーチンなのか」を考えずに、すべてのプログラムに共通の一般的なコンパイルコマンドを使用することを好む人もいる。 From 4f3e9a5dd84147b4f7ea30308e18ae41e1328d92 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 09:59:16 +0900 Subject: [PATCH 19/40] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB1?= =?UTF-8?q?=E8=A1=8C=E7=9B=AE=E3=81=AE=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/1-2-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/1-2-4.md b/markdown/1-2-4.md index 03fc837..bd0d93b 100644 --- a/markdown/1-2-4.md +++ b/markdown/1-2-4.md @@ -5,7 +5,7 @@ COBOLの主な強みの一つは、様々なファイルにアクセスできることである。opensource COBOLは、他のCOBOL実装と同様に、読み書きするファイルの構造を記述しておく必要がある。ファイル構造の最高レベルの特性は、次のように、ファイルの編成([4.2.1](4-2-1-1.md))を指定することによって定義される。 -||| +|記述方法|説明| |:---|:---| |ORGANIZATION IS
LINE SEQUENTIAL|内部構造の中で最も単純なファイルであり、その内容は一連のデータレコードとして簡単に構造化され、特殊なレコード終了区切り文字で終了する。ASCII 改行文字(16進数の0A)は、UNIXまたは疑似UNIX(MinGW、Cygwin、MacOS)のopensource COBOLビルドで使用されるレコード終了区切り文字である。真のネイティブWindowsビルドでは、行頭復帰(CR)、改行(LF)(16進数の0D0A)順序が使用される。

ファイルタイプのレコードは、同じ長さである必要はない。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

opensource COBOLプログラムによってファイルに書き込まれるとき、区切り文字順序が各データレコードに自動的に追加される。

ファイルが読み取られるとき、opensource COBOLランタイムシステムは各レコードから末尾の区切り文字順序を削除し、読み取ったデータがプログラム内のデータレコード用に記述された領域よりも短い場合、必要に応じて、データ(の右側)を空白で埋める。データが長すぎる場合は切り捨てられ、超過分は消失する。

これらのファイルは、正確なバイナリデータ項目を含むように定義してはならない。これらの項目の内容の値の一部として、誤ってレコード終了順序が含まれる可能性があるためである。これは、ファイル読み取り時にランタイムシステムを混乱させ、その値を実際のレコード終了順序として解釈してしまう。| ORGANIZATION IS
RECORD BINARY
SEQUENTIAL|これらのファイルも単純な内部構造を持っており、内容も一連の固定長データレコードとして簡単に構化されており、特別なレコード終了区切り文字はない。

このファイルタイプのレコードは、物理的な長さがすべて同じである。可変長論理レコードがプログラムに定義されている場合([5.3](5-3.md))、ファイル内の各物理レコードが占有する空白は、占有可能な最大である。

レコードは、純粋にファイルの先頭から順に読み書きする必要がある。レコード番号100を読み取る(または書き込む)唯一の方法は、最初にレコード番号1から99を読み取る(または書き込む)ことである。

ファイルがopensource COBOLプログラムによって書き込まれる場合、区切り文字順序はデータに追加されない

ファイルが読み取られると、データはファイルに存在する通りにプログラムに転送される。短いレコードが最後のレコードとして読み取られる場合は空白が埋め込まれる。

このようなファイルを読み取るプログラムは、そのファイルを作成したプログラムが使用する長さとまったく同じ長さのレコードを記述するよう注意しなければならない。例えば、次の例は6文字のレコードを5つ書き込んだプログラムによって作成されたRECORD BINARY SEQUENTIALファイルの内容を示している。「A」、「B」、・・・の値と背景色は、ファイルに書き込まれたレコードを反映している。

![alt text](Image/1-2-4-1.png)
ここで、別のプログラムがこのファイルを読み取るが、6文字ではなく10文字のレコードが記述されているとする。プログラムが読み取るレコードは次の通りである。

![alt text](Image/1-2-4-2.png)

これはあなたが求めていた結果かもしれないが、多くの場合でこれは望ましい動作ではない。これは、コピーブックを使用してファイルのレコードレイアウトを記述することで、そのファイルにアクセスする複数のプログラムが同じレコードサイズとレイアウトを「参照する」ことが保証される。

これらのファイルには、正確なバイナリデータ項目を含めることができる。レコード終了区切り文字がないため、レコード項目の内容は読み取りプロセスとは無関係である。

| From 09192110102870a012743544e0497a306d81192c Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 09:59:51 +0900 Subject: [PATCH 20/40] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB1?= =?UTF-8?q?=E8=A1=8C=E7=9B=AE=E3=81=AE=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/1-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/1-3.md b/markdown/1-3.md index 5a178bd..de7d419 100644 --- a/markdown/1-3.md +++ b/markdown/1-3.md @@ -5,7 +5,7 @@ opensource COBOL言語の構文について、COBOLプログラマに馴染みのある規則に従って説明していく。以下は、構文の記述方法についての説明である。 -| | | +|構文|説明| | :--- | :--- | | 大文字 | COBOL言語のキーワードと実装に依存する名前(いわゆる「予約語」)は大文字で表示される。 | | 下線 | 下線が引かれている予約語は、構文上の文脈により必要である。予約語に下線が引かれていない場合はオプションであり、プログラムに影響を与えない。 | From 80665248b434fc59f537aa839e98bb9705402e43 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:02:05 +0900 Subject: [PATCH 21/40] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB1?= =?UTF-8?q?=E8=A1=8C=E7=9B=AE=E3=81=AE=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/1-4.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/markdown/1-4.md b/markdown/1-4.md index e6c4231..105aac5 100644 --- a/markdown/1-4.md +++ b/markdown/1-4.md @@ -7,7 +7,7 @@ opensource COBOLには、入力ファイルのソースコード形式を指定する、次の四つの方法がある。 -| | | +|記述方法|説明| | :--- | :--- | | -fixed | このopensource COBOLコンパイラスイッチは、ソースコード入力が従来の固定形式(80桁)になることを指定し、これが初期モードである。 | | -free | このopensource COBOLコンパイラスイッチは、ソースコード入力がANSI2002の自由形式(256桁)になることを指定する。 | @@ -16,7 +16,7 @@ opensource COBOLには、入力ファイルのソースコード形式を指定 以下のものは、opensource COBOLプログラムで様々なことを示すために使う、特別な命令または文字である。 -| | | +|記述方法|説明| | :--- | :--- | | 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | | 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | From 60f953bfea521cfbb6674a9bfad67b169e5635ce Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:07:23 +0900 Subject: [PATCH 22/40] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB1?= =?UTF-8?q?=E8=A1=8C=E7=9B=AE=E3=81=AE=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/5-3.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/markdown/5-3.md b/markdown/5-3.md index 3371754..f6457d2 100644 --- a/markdown/5-3.md +++ b/markdown/5-3.md @@ -14,7 +14,7 @@ 2. 他のCOBOL実装と同様に、レベル番号は以下の値に制限されている。 - | | | + |レベル番号|説明| | --- | --- | | 01 | 最上位レベルのデータ項目で、それ自体で完成している場合(基本項目とも呼ばれる)もあれば、従属項目に分割される場合(集団項目とも呼ばれる)もある。01レベルのデータ項目は「レコード」または「レコード記述」とよく呼ばれる。 | | 02 - 49 | 上位レベルのデータ項目の、従属部品であるデータ項目を定義するために使用されるレベル番号(レベル番号が数値的に小さいほど、定義されているデータ構造の階層全体で、データ項目は大きくなる―すべての構造化データは、単一の01レベルの項目から始める必要がある)。レベル02-49のすべてが基本項目でも良いし、レベル02-48がすべて集団項目でも良い。 | @@ -31,15 +31,15 @@ 表5-6-データのクラス定義 PICTURE記号(9/A/X) | 基本記号 | 意味・使用方法 | - | :--- | :--- | - | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGE句によって異なる。 | - | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストレージを表す。 | - | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | - | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージを表す。 | + | :--- | :--- | + | 9 | 1桁の10進数用に予約されている場所を定義する。実際に占有されるストレージ量は、指定されるUSAGEによって異なる。 | + | A | 単一の英字(「A」-「Z」、「a」-「z」)用に予約されている場所を定義する。各「A」は1バイトのストージを表す。 | + | X | 1つの文字のストレージ用に予約されている場所を定義する。各「X」は1バイトのストレージを表す。 | + | N | 1つの日本語文字のストレージ用に予約されている場所を定義する。各「N」は2バイトのストレージをす。 | 以上の四つの記号は、PICTURE句で繰り返し使用され、項目内に含まれる可能性のあるデータのクラス数を定義する。例: - | | | + | PICTURE句 | 説明 | | --- | --- | | PIC 9999 | 4桁の正数を格納できるデータ項目を割り当てる(負の値については後述する)。項目のUSAGE句がDISPLAY指定(既定値)の場合、4バイトのストレージが割り当てられ、各バイトに「0」「1」「2」・・・「8」または「9」を入れることができる。数字限定というルールは実行時には強制されないが、コンパイル時にはルールに違反する定数値が項目にMOVEされた場合、エラー警告が表示される。ランタイムエラーはクラスの条件テストを使用することで検出できる([6.1.4.2.2](6-1-4-2.md#61422-字類条件)を参照)。 | | PIC 9(4) | 上記と同様-括弧で囲まれた繰り返し回数は、繰り返しを許可する任意のPICTURE記号で使用できる。 | @@ -57,10 +57,10 @@ 表5-7-数値形式オプションのPICTURE記号(P/S/V) | 数値形式のオプション記号 | 意味・使用方法 | - | :--- | :--- | - | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後続ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きい値を含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実行されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのような項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ドルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
このとき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位が固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenue PIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各P記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「P」が「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | - | S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す。「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | - | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小数点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を占有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内にある場合、その値を参照するすべての文で「123.4」として扱われる。 | + | :--- | :--- | + | P | 実行時にデータ項目が参照されるとき0と見なされる、暗黙の桁位置を定義する。値の末尾に特定数の後ゼロ(「P」につき1つ)が存在すると想定することによって、より少ないストレージを使用して、非常に大きいを含んだデータ項目を割り当てられるように、この記号が使用される。
このようなデータ項目に対して実されるすべての演算およびその他の操作は、ゼロが実際に存在しているかのように動作する。
値がそのよな項目に格納されると、「P」記号で定義された桁位置は削除される。
例えば、会社の今年の総収益に何百ルもの収益を含んだデータ項目を割り当てる必要があるとする:
`01 Gross-Revenue PIC 9(9).`
ことき9バイトのストレージが予約され、値の000000000~999999999は総収益を表す。ただし、百万以下の単位固定される場合(つまり後ろの6桁が常に0になる)、項目を次のように定義できる。
`01 Gross-revenuePIC 9(3)P(6).`
プログラム内でGross-Revenueが参照されるときは必ず、ストレージ内の実際の値は、各記号(この場合では全部で6つ)がゼロであるかのように扱われる。項目に1億2800万の値を格納するときは、「Pが「9」であるかのように扱う。
`MOVE 128000000 TO Gross-Revenue.` | + S | PICTURE値の最初の記号として使用する必要があり、このデータ項目では負の値が扱えることを示す「S」がなければ、MOVE文または算術文を介してデータ項目に格納された負の値からは、負の符号が取り除かれる(実際には絶対値となる)。 | + | V | 暗黙の小数点(存在する場合)が数値項目のどこにあるかを定義するために使用される記号。数値には小点が1つしかないのと同じように、PICTURE句には「V」が1つしかない。暗黙の小数点はストレージ内の空白を有せずに、値の使用方法を指定する。例えば、値「1234」がPIC 999V9として定義された項目のストレージ内ある場合、その値を参照するすべての文で「123.4」として扱われる。 | 5. USAGE DISPLAYの数値データにのみ許可されるSIGN句は、「S」記号の表現形式を指定する。SEPARATE CHARACTER句の指定がないとき、データ項目の値の符号は、最終桁(TRAILING)または先頭桁(LEARDING)を次のように変換することで符号化できる。 From b6018f38efa5cf5252ff4f57044e51b7a1c05b65 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:08:47 +0900 Subject: [PATCH 23/40] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB1?= =?UTF-8?q?=E8=A1=8C=E7=9B=AE=E3=81=AE=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-1-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/6-1-3.md b/markdown/6-1-3.md index a0048d8..7d6e052 100644 --- a/markdown/6-1-3.md +++ b/markdown/6-1-3.md @@ -13,7 +13,7 @@ COBOL’85標準では、データ項目の一部のみへの参照を容易に ここでいくつか例を挙げる。 -| | | +| 例 | 説明 | | --- | --- | | CUSTOMER-LAST-NAME (1:3) | CUSTOMER-LAST-NAMEの最初の3文字を参照する。 | | CUSTOMER-LAST-NAME (4:) | CUSTOMER-LAST-NAMEの4番目以降のすべての文字位置を参照する。 | From 28ff1b06f8a2f11d780774393fd939a535686768 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:15:26 +0900 Subject: [PATCH 24/40] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB1?= =?UTF-8?q?=E8=A1=8C=E7=9B=AE=E3=81=AE=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-3-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/8-3-1.md b/markdown/8-3-1.md index 985fe6d..1d98640 100644 --- a/markdown/8-3-1.md +++ b/markdown/8-3-1.md @@ -37,7 +37,7 @@ opensource COBOLには多数の組み込みサブルーチンが含まれてお statusは次のいずれかの値を受け取る。 -| | | +| 値 | 説明 | | --- | --- | | 1 | ルーチンは他のCOBOLプログラムによって呼出された。 | | 0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 | From 72c0ccb7b937636aba1509dfca55171c91b1d26b Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:19:48 +0900 Subject: [PATCH 25/40] =?UTF-8?q?=E5=8F=82=E7=85=A7=E3=81=AE=E6=94=B9?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/8-2-4.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/markdown/8-2-4.md b/markdown/8-2-4.md index 835d6ae..392227b 100644 --- a/markdown/8-2-4.md +++ b/markdown/8-2-4.md @@ -22,7 +22,9 @@ --- `35` ORGANIZATION INDEXEDファイルでは、DB_HOMEが存在する場合、データファイルもDB_HOMEフォルダに割り当てられる。 + `36` DB_HOMEを使用しても、Windows/MinGW用に作成されたopensource COBOLビルドのORGANIZATION SEQUENTIAL (いずれかのタイプ)またはORGANIZATION RELATIVEファイルにおいてロックは機能しない。ORGANIZATION INDEXEDロックはWindows/MinGWで機能し、UNIX opensource COBOLビルドを使ったファイル編成ではすべてのロックが機能する。 + `37` C$DELETEおよびCBL_DELETE_FILEの組み込みサブルーチンを参照すること。 From fd761953400d979207e4e896d0bd7002fd15ee31 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:20:39 +0900 Subject: [PATCH 26/40] =?UTF-8?q?=E8=AA=A4=E5=AD=97=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-44-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/6-44-3.md b/markdown/6-44-3.md index 2fc13d9..39063f3 100644 --- a/markdown/6-44-3.md +++ b/markdown/6-44-3.md @@ -7,7 +7,7 @@ ![alt text](Image/6-101-Subtract.png) -二つの一意名に従属して見つかったデータ項目の一致と対応すする、個々のSUBTRACT FROM文と同等のコードを生成する。 +二つの一意名に従属して見つかったデータ項目の一致と対応する、個々のSUBTRACT FROM文と同等のコードを生成する。 1. 対応する一致を識別するためのルールは、[6.28.2](6-28-2.md) ― MOVE CORRESPONDINGで説明している。 From a6fc62dd3d901816c391e60ca389c533f73f0c12 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:46:32 +0900 Subject: [PATCH 27/40] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3?= =?UTF-8?q?=E3=83=88=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-1-2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/markdown/6-1-2.md b/markdown/6-1-2.md index 3225ddb..1eed194 100644 --- a/markdown/6-1-2.md +++ b/markdown/6-1-2.md @@ -22,8 +22,8 @@ COBOLでは、データ名をプログラム内で複製することができ、 10 CITY PIC X(15). 10 STATE PIC X(2). 10 ZIP-CODE. - 15 ZIP-CODE-5 PIC 9(5). - 15 FILLER PIC X(4). + 15 ZIP-CODE-5 PIC 9(5). + 15 FILLER PIC X(4). ``` それでは、従業員の輸送先住所のCITYの部分を「Philadelphia」に設定してみる。明らかにコンパイラは、参照している2つのCITY項目のどちらかを判別できなくなるため、以下の例は機能しない: From e0d69cda4cf17bc30830143b0921f61a988543d7 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 10:50:32 +0900 Subject: [PATCH 28/40] =?UTF-8?q?=E6=96=9C=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/1-7-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/1-7-2.md b/markdown/1-7-2.md index ef9e233..24af8e8 100644 --- a/markdown/1-7-2.md +++ b/markdown/1-7-2.md @@ -7,7 +7,7 @@ 英数字定数は、次の形式のいずれかを取ることができる。 -- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、文字列定数を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 +- 一重引用符(')文字または二重引用符(")文字で囲まれた一連の文字は、*文字列定数*を構成する。二重引用符(")は定数内のデータ文字として使用することができる。データ文字として一重引用符文字を含める必要がある場合は、一重引用符を2つ続けて('')表現することで、一重引用符(')を定数内のデータ文字として使用することができる。二重引用符をデータ文字として含める必要がある場合は、二重引用符を2つ続けて("")表現する。 - X”4A4B4C”(4A4B4C16=ASCII文字列「JKL」)、x’20’(2016=空白)、X’30313233’(3031323316=ASCII文字列「0123」)などの16進数定数。「X」文字は大文字または小文字のいずれかで、一重引用符(')または二重引用符(")文字を使用できる。16進数の英数字定数は、各文字が8ビット分のデータ(2桁の16進数)で表されるため、常に偶数の16進数で構成する必要がある。16進英数字定数の長さはほぼ無制限である。 From dabc97357d97081faec32ae65ee2a325d7c2166c Mon Sep 17 00:00:00 2001 From: momo2584 Date: Wed, 5 Feb 2025 14:04:53 +0900 Subject: [PATCH 29/40] =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=82=BF=E3=82=B0?= =?UTF-8?q?=E3=81=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/1-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/1-4.md b/markdown/1-4.md index 105aac5..2cec357 100644 --- a/markdown/1-4.md +++ b/markdown/1-4.md @@ -21,7 +21,7 @@ opensource COBOLには、入力ファイルのソースコード形式を指定 | 7桁目の「*」 | ソース行がコメントであることを示し、固定形式モードの場合のみ有効である。 | | 7桁目の「D」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | | 7桁目の「$IF」 | ソース行が有効なopensource COBOLコードであり、opensource COBOLコンパイラに「–fdebugging-line」スイッチが指定されていない限り(その場合、行はコンパイルされる)コメントであることを示す。固定形式モードの場合のみ有効である。 | -| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | +| 7桁目の「$IF」 | ![alt text](Image/1-4-1.png)
定数名-1がコンパイルオプション「-constant」で指定されており、定数-1の値が定数名-1の値に等しい時、または定数名-1の値の範囲内にある時、$IF文以降に続くソース行の処理が実行される。

![alt text](Image/1-4-2.png)
定数名-2がコンパイルオプション「-constant」で指定されている時、DEFINED句は真となり、$IF文以降に続くソース行の処理が実行される。それ以外の場合はNOT DEFINED句が真となり、$IF文以降に続くソース行の処理が実行される。 | | 7桁目の「$ELSE」 | 直前の$IF文の条件式が偽である時、$ELSE文に制御が移り、$ELSE文以降に続くソース行の処理が実行される。直前の$IF文の条件式が真である時、$ELSE文は無視される。 | | 7桁目の「$END」 | $END文と同じレベルにある$IF文または$ELSE文に続くソース行の処理の実行が終了すると、$ENDに制御が移り、$IF文または$ELSE文の終了を示す。 | | 任意の桁の「*>」 | ソース行の残りの部分がコメントであることを示す。自由形式モードと固定形式モードのどちらでも使用できるが、固定形式モードで使用する場合は、「*」を7桁目以降に入力する必要がある。 | From f0eeb8a95f98d4883a545309b4dc8c18fa58a067 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Thu, 20 Feb 2025 13:25:23 +0900 Subject: [PATCH 30/40] =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=81=AE=E8=AA=BF?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-39-1.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/markdown/6-39-1.md b/markdown/6-39-1.md index b56f074..0a0f4e1 100644 --- a/markdown/6-39-1.md +++ b/markdown/6-39-1.md @@ -15,13 +15,14 @@ 2. 環境変数を設定する手段としては、DISPLAY文([6.14.3](6-14-3.md))を使うよりも、この方法は遥かに簡単で読みやすい。例えば、次の二つのコード順序は同じ結果を示す。 - DSIPLAY SET ENVIRONMENT “VARNAME” TO + DSIPLAY "VALUE" “VARNAME” UPON ENVIRONMENT-NAME END-DISPLAY DSIPLAY “VALUE” UPON ENVIRONMENT-VALUE END-DISPLAY + SET ENVIRONMENT “VARNAME” TO From 3ab5d389bc9bbb65240a1b83c8f2ef2fcfc99d3e Mon Sep 17 00:00:00 2001 From: momo2584 Date: Thu, 20 Feb 2025 13:26:27 +0900 Subject: [PATCH 31/40] =?UTF-8?q?=E8=84=B1=E5=AD=97=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/6-39-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/6-39-1.md b/markdown/6-39-1.md index 0a0f4e1..9cd5442 100644 --- a/markdown/6-39-1.md +++ b/markdown/6-39-1.md @@ -22,7 +22,7 @@ DSIPLAY “VALUE” UPON ENVIRONMENT-VALUE END-DISPLAY - SET ENVIRONMENT “VARNAME” TO + SET ENVIRONMENT “VARNAME” TO “VALUE” From 3a6ff0a7dd5d14ace44205ccbd03482807ee157a Mon Sep 17 00:00:00 2001 From: momo2584 Date: Thu, 20 Feb 2025 13:39:24 +0900 Subject: [PATCH 32/40] =?UTF-8?q?=E6=94=B9=E8=A8=82=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/TOC.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/markdown/TOC.md b/markdown/TOC.md index 8e89598..8202763 100644 --- a/markdown/TOC.md +++ b/markdown/TOC.md @@ -1,4 +1,6 @@ 目次 + +[改訂履歴](history.md) 1. [まえがき](1-1.md) - [1.1. opensource COBOLとは](1-1.md#11-opensource-cobolとは) - [1.2. COBOL/opensource COBOLの重要機能](1-2-1.md#12-cobolopensource-cobolの重要機能) From 8c77b74d4f43c58568a32b33af8c4608f6347348 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Thu, 20 Feb 2025 13:41:24 +0900 Subject: [PATCH 33/40] =?UTF-8?q?=E6=94=B9=E8=A8=82=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/README.md b/README.md index b99ba80..7b1f3e6 100644 --- a/README.md +++ b/README.md @@ -22,25 +22,6 @@ COBOL文法の完全日本語マニュアル『opensource COBOL Programmer's Gui ## 改訂履歴 - -|版|発行日|改訂詳細| -|---|---|---| -|初版 v1.0.0|2023/8/31|原文”OpenCOBOL 1.1 Programmer’s Guide”を参考に日本語翻訳マニュアルを作成。| -|v1.1.0|2023/9/21|誤字や翻訳漏れを修正。| -|v1.2.0|2023/10/16|条件名の訳語を一部修正。| -|v2.0.0|2024/2/29|通貨記号の既定値を「$」から「¥」に変更。| -|||「1.4. ソースコードの形式」に$IF、$ELSE、$ENDに関する記述を追加。| -|||「1.6. COPY文の使い方」にREPLACING句のLEADING/TRAILING指定、JOINING句のPREFIX/SUFFIX指定、PREFIXING/SUFFIXING句に関する記述を追加。| -|||「1.7. 定数の使い方 」に「1.7.3. 日本語定数」を追加。| -|||「4.2.1. ファイル管理段落 図4-10-ファイル管理段落構文」を一部修正。| -|||「4.2.1.3. 索引編成ファイル」に分割キーに関する記述を追加。| -|||「5.3 データ記述の形式」にASCENDING KEY/DESCENDING KEY句とINDEXED BY句の記述順の許容に関する記述を追加。| -|||「6.1.4.2.5. 比較条件 図6-12-比較条件構文」を一部修正。| -|||「6.8. CANCEL」に「6.8.2. CANCEL文の書き方2 ― CANCEL ALL」を追加。| -|||「6.13. DELETE」に「6.13.2. DELETE文の書き方2 ― DELETE FILE」を追加。| -|||新しい章として「7. 日本語対応」を追加。| -|||「8.1.2. コンパイルオプション」に「-assign_external」と「-free_1col_aster」の項目を追加。| -|||「8.1.7. 重要な環境変数 表8-4-環境変数コンパイラ」に環境変数「COB_DATE」「COB_IO_ASSUME_REWRITE」「COB_NIBBLE_C_UNSIGNED」「COB_VERBOSE」「OC_EXTEND_CREATES」「OC_IO_CREATES」「OC_USERFH」の項目を追加。| -|||「8.3.1. 「名前による呼び出し」ルーチン 」に「8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status」「8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3」「8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1」を追加。| +改訂履歴は[こちら](/markdown/history.md)です 以上 From 11f69226a0b687510bca9874e49000a073c7438b Mon Sep 17 00:00:00 2001 From: momo2584 Date: Thu, 20 Feb 2025 13:47:58 +0900 Subject: [PATCH 34/40] =?UTF-8?q?=E6=94=B9=E8=A8=82=E5=B1=A5=E6=AD=B4.md?= =?UTF-8?q?=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/history.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 markdown/history.md diff --git a/markdown/history.md b/markdown/history.md new file mode 100644 index 0000000..106be69 --- /dev/null +++ b/markdown/history.md @@ -0,0 +1,21 @@ +## 改訂履歴 + +|版|発行日|改訂詳細| +|---|---|---| +|初版 v1.0.0|2023/8/31|原文”OpenCOBOL 1.1 Programmer’s Guide”を参考に日本語翻訳マニュアルを作成。| +|v1.1.0|2023/9/21|誤字や翻訳漏れを修正。| +|v1.2.0|2023/10/16|条件名の訳語を一部修正。| +|v2.0.0|2024/2/29|通貨記号の既定値を「$」から「¥」に変更。| +|||「1.4. ソースコードの形式」に$IF、$ELSE、$ENDに関する記述を追加。| +|||「1.6. COPY文の使い方」にREPLACING句のLEADING/TRAILING指定、JOINING句のPREFIX/SUFFIX指定、PREFIXING/SUFFIXING句に関する記述を追加。| +|||「1.7. 定数の使い方 」に「1.7.3. 日本語定数」を追加。| +|||「4.2.1. ファイル管理段落 図4-10-ファイル管理段落構文」を一部修正。| +|||「4.2.1.3. 索引編成ファイル」に分割キーに関する記述を追加。| +|||「5.3 データ記述の形式」にASCENDING KEY/DESCENDING KEY句とINDEXED BY句の記述順の許容に関する記述を追加。| +|||「6.1.4.2.5. 比較条件 図6-12-比較条件構文」を一部修正。| +|||「6.8. CANCEL」に「6.8.2. CANCEL文の書き方2 ― CANCEL ALL」を追加。| +|||「6.13. DELETE」に「6.13.2. DELETE文の書き方2 ― DELETE FILE」を追加。| +|||新しい章として「7. 日本語対応」を追加。| +|||「8.1.2. コンパイルオプション」に「-assign_external」と「-free_1col_aster」の項目を追加。| +|||「8.1.7. 重要な環境変数 表8-4-環境変数コンパイラ」に環境変数「COB_DATE」「COB_IO_ASSUME_REWRITE」「COB_NIBBLE_C_UNSIGNED」「COB_VERBOSE」「OC_EXTEND_CREATES」「OC_IO_CREATES」「OC_USERFH」の項目を追加。| +|||「8.3.1. 「名前による呼び出し」ルーチン 」に「8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status」「8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3」「8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1」を追加。| \ No newline at end of file From c46aee17cb9bd80fea40a8527c2d7fbc6e1518a1 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Thu, 20 Feb 2025 13:51:18 +0900 Subject: [PATCH 35/40] =?UTF-8?q?=E6=94=B9=E8=A8=82=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 7b1f3e6..39cfa1c 100644 --- a/README.md +++ b/README.md @@ -23,5 +23,3 @@ COBOL文法の完全日本語マニュアル『opensource COBOL Programmer's Gui ## 改訂履歴 改訂履歴は[こちら](/markdown/history.md)です - -以上 From d3fabf2115b93169ee497e57d028f1a9180e0f3f Mon Sep 17 00:00:00 2001 From: momo2584 Date: Fri, 21 Feb 2025 09:46:27 +0900 Subject: [PATCH 36/40] v3.1.0 --- markdown/history.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/markdown/history.md b/markdown/history.md index 106be69..88156e5 100644 --- a/markdown/history.md +++ b/markdown/history.md @@ -18,4 +18,11 @@ |||新しい章として「7. 日本語対応」を追加。| |||「8.1.2. コンパイルオプション」に「-assign_external」と「-free_1col_aster」の項目を追加。| |||「8.1.7. 重要な環境変数 表8-4-環境変数コンパイラ」に環境変数「COB_DATE」「COB_IO_ASSUME_REWRITE」「COB_NIBBLE_C_UNSIGNED」「COB_VERBOSE」「OC_EXTEND_CREATES」「OC_IO_CREATES」「OC_USERFH」の項目を追加。| -|||「8.3.1. 「名前による呼び出し」ルーチン 」に「8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status」「8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3」「8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1」を追加。| \ No newline at end of file +|||「8.3.1. 「名前による呼び出し」ルーチン 」に「8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status」「8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3」「8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1」を追加。| +|v3.0.0|2024/9/18|日本語翻訳マニュアル HTML版を公開。| +|v3.1.0|2025/MM/DD|訳語を一部修正。| +|||「4.2. 入出力節 図4-9-入出力節構文」を一部修正。| +|||「5.3. データ記述の形式 表5-9-数字編集PICTURE記号」を一部修正。| +|||「6.1.4.2.5. 比較条件 図 6-12-比較条件構文」を一部修正。| + +以上 \ No newline at end of file From f0efb6fb52bfb00d33d75aa38ccdabe49f9f879f Mon Sep 17 00:00:00 2001 From: momo2584 Date: Fri, 21 Feb 2025 09:48:16 +0900 Subject: [PATCH 37/40] =?UTF-8?q?=E6=97=A5=E4=BB=98=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/history.md b/markdown/history.md index 88156e5..a8425a4 100644 --- a/markdown/history.md +++ b/markdown/history.md @@ -20,7 +20,7 @@ |||「8.1.7. 重要な環境変数 表8-4-環境変数コンパイラ」に環境変数「COB_DATE」「COB_IO_ASSUME_REWRITE」「COB_NIBBLE_C_UNSIGNED」「COB_VERBOSE」「OC_EXTEND_CREATES」「OC_IO_CREATES」「OC_USERFH」の項目を追加。| |||「8.3.1. 「名前による呼び出し」ルーチン 」に「8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status」「8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3」「8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1」を追加。| |v3.0.0|2024/9/18|日本語翻訳マニュアル HTML版を公開。| -|v3.1.0|2025/MM/DD|訳語を一部修正。| +|v3.1.0|2025/2/25|訳語を一部修正。| |||「4.2. 入出力節 図4-9-入出力節構文」を一部修正。| |||「5.3. データ記述の形式 表5-9-数字編集PICTURE記号」を一部修正。| |||「6.1.4.2.5. 比較条件 図 6-12-比較条件構文」を一部修正。| From 38c135e3914beec23947334e48e316aa0063cc11 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Fri, 21 Feb 2025 09:48:48 +0900 Subject: [PATCH 38/40] =?UTF-8?q?=E5=8F=A5=E8=AA=AD=E7=82=B9=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39cfa1c..93cc3a5 100644 --- a/README.md +++ b/README.md @@ -22,4 +22,4 @@ COBOL文法の完全日本語マニュアル『opensource COBOL Programmer's Gui ## 改訂履歴 -改訂履歴は[こちら](/markdown/history.md)です +改訂履歴は[こちら](/markdown/history.md)です。 From b4b2c63cf7b9d1b08cf321e32e75dd76543a5484 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Fri, 21 Feb 2025 10:06:54 +0900 Subject: [PATCH 39/40] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 93cc3a5..1652d46 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ COBOL文法の完全日本語マニュアル『opensource COBOL Programmer's Gui 2021年より始動した本プロジェクトは、OSSコンソーシアム オープンCOBOLソリューション部会が活動の一環として、マニュアルの翻訳・執筆を進めています(プロジェクトリーダー:東京システムハウス 島田桃花)。 初版は原著をそのまま翻訳した内容です。第二版では、opensource COBOL で追加実装した日本語機能や新機能の説明を追加しました。 -第三版以降で、新製品である opensource COBOL 4J についての説明を追加していく予定です。 +今後は、新製品である opensource COBOL 4J についての説明を追加していく予定です。 | PDF版 | HTML版 | | --- | --- | From cf983c128b63ad28707fb69e4f1a3f1862f0b182 Mon Sep 17 00:00:00 2001 From: momo2584 Date: Tue, 25 Feb 2025 09:21:47 +0900 Subject: [PATCH 40/40] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markdown/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown/history.md b/markdown/history.md index a8425a4..ae9a59f 100644 --- a/markdown/history.md +++ b/markdown/history.md @@ -11,7 +11,7 @@ |||「1.7. 定数の使い方 」に「1.7.3. 日本語定数」を追加。| |||「4.2.1. ファイル管理段落 図4-10-ファイル管理段落構文」を一部修正。| |||「4.2.1.3. 索引編成ファイル」に分割キーに関する記述を追加。| -|||「5.3 データ記述の形式」にASCENDING KEY/DESCENDING KEY句とINDEXED BY句の記述順の許容に関する記述を追加。| +|||「5.3. データ記述の形式」にASCENDING KEY/DESCENDING KEY句とINDEXED BY句の記述順の許容に関する記述を追加。| |||「6.1.4.2.5. 比較条件 図6-12-比較条件構文」を一部修正。| |||「6.8. CANCEL」に「6.8.2. CANCEL文の書き方2 ― CANCEL ALL」を追加。| |||「6.13. DELETE」に「6.13.2. DELETE文の書き方2 ― DELETE FILE」を追加。|