

AWS Mainframe Modernization Service （受管執行期環境體驗） 不再向新客戶開放。對於與 AWS Mainframe Modernization Service （受管執行期環境體驗） 類似的功能，探索 AWS Mainframe Modernization Service （自我管理體驗）。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[AWS 大型主機現代化可用性變更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 其他/其他公用程式
<a name="system-misc-utilities"></a>

本節涵蓋各種無法連接到現有類別的公用程式計劃，具有其他目的

在下列段落中， `PICTURE` 應理解為 COBOL `PICTURE`關鍵字，用於描述欄位資料類型和格式。

## CBL\_AND/CBL\_OR/CBL\_XOR/CBL\_EQ/CBL\_IMP/CBL\_NOT
<a name="cbl-bitwise"></a>

### 用途
<a name="cbl-bitwise-purpose"></a>

這與在某些 COBOL 方言 (Micro Focus) 中找到的資料項目支援位元邏輯操作相關。請注意，使用 AWS Transform 自動重構處理從 Cobol MF 方言到 Java 的位元運算子用量轉換 （請參閱下面的範例用量）。若要讓現代化程式碼正確執行，公用程式應用程式必須同時部署。

支援的運算子：
+ Unary 運算子：


| Unary 運算子 | 詳細資訊 | 
| --- | --- | 
| CBL\_NOT | 位元補數 (\~target) | 
+ 二進位運算子：


| 二進位運算子 | 詳細資訊 | 
| --- | --- | 
| CBL\_AND | 位元 AND （來源和目標） | 
| CBL\_OR | 位元 OR （來源 \| 目標） | 
| CBL\_XOR | 位元獨佔 OR （來源 ^ 目標） | 
| CBL\_EQ | 位元相等性 (\~（來源 ^ 目標）) | 
| CBL\_IMP | 位元隱含 (\~source \| target) | 

### 簽章
<a name="cbl-bitwise-signature"></a>

除了只有一個運算元 （目標） 的 CBL\_NOT 之外，所有其他操作至少有兩個運算元，也就是資料項目。第一個運算元是來源，第二個運算元是目標。額外的選用引數 （長度） 會提供要處理的位元組數 （從左到右）。如果省略長度，則會預設為來源和目標大小的最小值 （以位元組為單位）。操作的結果會存放在目標中。程式的傳回碼為 0 （除非發生例外狀況）。

### 檢查/錯誤處理
<a name="cbl-bitwise-error"></a>
+ 對於每個可用的運算子，會檢查所需的引數數目。如果不符合所需引數的最小數量，`IllegalArgumentException`則會擲出 。
+ 選用的長度整數引數會檢查是否為正數。如果提供的長度為負數，則日誌中會顯示訊息，而且不會套用運算子。

### 範例用量
<a name="cbl-bitwise-sample"></a>
+ Unary 運算子範例：

以下是 CBL\_NOT 的 Cobol 用量：

```
   * TARGET:       00000101
   * OPERATION:     NOT
   * EXPECTED:     11111010 = 64000 dec (2nd byte unchanged - all 0)
        MOVE X'0500' to TARGET
        CALL "CBL_NOT" USING TARGET BY VALUE 1.
```

和對應的 Java 現代化：

```
    /* 
    TARGET:       00000101
    OPERATION:     NOT
    EXPECTED:     11111010 = 64000 dec (2nd byte unchanged - all 0) */
    ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 });
    ctrl.callSubProgram("CBL_NOT", CallBuilder.newInstance()
        .byReference(ctx.getTarget().getTargetReference())
        .byValue(1)
        .getArguments(), ctx);
```
+ 二進位運算子範例：

如需使用 CBL\_AND 的執行個體，請參閱下列 COBOL 程式碼：

```
   * SOURCE:       00000011
   * OPERATION:     AND
   * TARGET:       00000101
   * EXPECTED:     00000001 = 256 dec (2nd byte unchanged - all 0)
        MOVE X'0300' to SRC
        MOVE X'0500' to TARGET
        CALL "CBL_AND" USING SRC TARGET BY VALUE 1.
```

及其 Java 現代化：

```
    /* 
    SOURCE:       00000011
    OPERATION:     AND
    TARGET:       00000101
    EXPECTED:     00000001 = 256 dec (2nd byte unchanged - all 0) */
    ctx.getSrc().getSrcReference().setBytes(new byte[]{ 3, 0 });
    ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 });
    ctrl.callSubProgram("CBL_AND", CallBuilder.newInstance()
        .byReference(ctx.getSrc().getSrcReference())
        .byReference(ctx.getTarget().getTargetReference())
        .byValue(1)
        .getArguments(), ctx);
```

## CEE3ABD
<a name="cee3abd"></a>

### 用途
<a name="cee3abd-purpose"></a>

此公用程式程式模擬具有相同名稱的舊版程式行為，其角色是終止具有異常 （異常結束） 程式碼和選用清除時間的程式。AWS 轉換引擎會處理 CEE3ABD 呼叫的自動現代化。若要讓現代化程式碼正確執行，公用程式應用程式必須同時部署。

程式會使用提供的抽象程式碼來停止目前的執行單位。系統會將資訊訊息列印至日誌，並指定已使用指定的程式碼呼叫使用者結束。目前，不會將計時參數納入考量，但基於現代化相容性原因， 會做為引數存在。

### 簽章
<a name="cee3abd-signature"></a>

程式接受 0 或 2 個引數。兩個引數為：
+ 中止程式碼 （必須解譯為正整數值的資料項目）
+ 清除時間 （必須解譯為正整數值的資料項目） -- 忽略

未提供引數時，會使用下列預設值：
+ 附加程式碼：0
+ 清除時間：0

### 檢查/錯誤處理
<a name="cee3abd-error"></a>
+ 檢查是否提供 0 或 2 個引數，否則`IllegalArgumentException`會擲回 。
+ 如果提供兩個引數，請檢查：抽象程式碼介於 0 和 4095 之間 （兩者皆包含）；計時介於 0 和 5 之間 （兩者皆包含）

這些測試的任何失敗都會觸發 `IllegalArgumentException`。

### 範例用量
<a name="cee3abd-sample"></a>

以下是 COBOL 程式中的範例用量，來自 Carddemo 應用程式：

```
   9999-ABEND-PROGRAM.
       DISPLAY 'ABENDING PROGRAM'
       MOVE 0 TO TIMING
       MOVE 999 TO ABCODE
       CALL 'CEE3ABD'.
```

和對應的現代化 Java 程式碼：

```
public void _9999AbendProgram(final Cbtrn03cContext ctx, final ExecutionController ctrl) {
    DisplayUtils.display(ctx, ctrl, LOGGER, "ABENDING PROGRAM");
    ctx.getTiming().setTiming(0);
    ctx.getAbcode().setAbcode(999);
    ctrl.callSubProgram("CEE3ABD", CallBuilder.newInstance()
        .getArguments(), ctx);
}
```

## CEEDATE
<a name="ceedate"></a>

### 用途
<a name="ceedate-purpose"></a>

CEEDATE 公用程式會使用提供的格式，將代表 Lilian 日期 （自 1582 年 10 月 15 日起的天數） 的數字轉換為以字元為基礎的日期表示。

它會以相同名稱模擬舊版系統公用程式的行為。

### 簽章
<a name="ceedate-signature"></a>

基於其本質，CEEDATE 公用程式更適合從程式呼叫。

它需要三或四個引數 （最後一個引數是選用的）：
+ 強制第一個引數是數值資料項目，其值將做為 Lilian 日期來解釋
+ 強制第二個引數是英數資料項目，其中包含用於日期轉換為字元的`PICTURE`字串
+ 強制第三個引數是目標英數字元資料項目，保留使用第二個引數做為 轉換第一個引數的結果 `PICTURE`
+ 第四個選用引數是用來存放來自 公用程式之意見回饋碼的資料項目

### 檢查/錯誤處理
<a name="ceedate-error"></a>
+ 如果傳遞給公用程式的引數數目不是三或四個，`BluageWrapperException`則會擲出
+ 如果提供的第一個數字引數無法正確評估為 Lilian 日期 （超出邊界），則會記錄錯誤訊息。如果有選用的意見回饋代碼持有者，將會提供嚴重性為 3 的意見回饋代碼和訊息編號 2512
+ 如果因為提供的無效 而在日期轉換期間發生例外狀況`PICTURE`，則會記錄錯誤訊息。如果有選用的意見回饋代碼持有者，將會提供嚴重性為 3 的意見回饋代碼和訊息編號 2518
+ 如果因任何原因無法正常進行轉換，輸出資料項目會填入空白
+ 如果轉換成功，選用的意見回饋代碼持有者將收到嚴重性為 0 的意見回饋代碼 （且沒有訊息）

### 範例用量
<a name="ceedate-sample"></a>

以下是來自 COBOL 程式的範例呼叫 （意見回饋程式碼持有者 FC 的結構包含省略符號，如同包含數百個此處未顯示的條件 （層級 88) 項目）：

```
   WORKING-STORAGE SECTION.
   01  LILIANS              PIC S9(9) BINARY.
   01  TIMESTAMP-OUT               PIC X(80).
   01  MASK.
       05  MASK-LEN         PIC S9(4) BINARY.
       05  MASK-STR.
           10  MASK-CHR     PIC X OCCURS 0 TO 256
                               DEPENDING ON MASK-LEN.
   01  ROUTINE-NAMES.
       05 CEESECS-ROUTINE    PIC X(08) VALUE 'CEESECS '.
       05 CEELOCT-ROUTINE    PIC X(08) VALUE 'CEELOCT '.
       05 CEEDATE-ROUTINE    PIC X(08) VALUE 'CEEDATE '.
   01  FC.
   ...
   * lilian date for 4 June 1990
       MOVE SPACES TO MASK-STR
       MOVE 148887 TO LILIANS.
       MOVE 23                  TO MASK-LEN
       MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR
       CALL CEEDATE-ROUTINE USING LILIANS
                                  MASK
                                  TIMESTAMP-OUT
                                  FC.
```

## CEELOCT
<a name="ceeloct"></a>

### 用途
<a name="ceeloct-purpose"></a>

CEELOCT 公用程式用於以三種格式傳回本機日期/時間：
+ Lilian 日期 （自 1582 年 10 月 14 日起的天數）
+ Lilian 秒 （自 1582 年 10 月 14 日 00：00：00 起的秒數）
+ Gregorian 字元字串 （格式為 `YYYYMMDDHHMISS999`)

它會以相同名稱模擬舊版系統公用程式的行為。

### 簽章
<a name="ceeloct-signature"></a>

基於其本質，CEELOCT 公用程式更適合從程式呼叫。

它需要三或四個引數 （最後一個引數是選用的）：
+ 強制第一個引數是資料項目，用於存放 Lilian 日期
+ 強制第二個引數是資料項目，用於存放 Lilian 秒
+ 必要第三個引數是資料項目，用於使用上述格式存放 Gregorian 日期
+ 選用的第四個引數是用來存放來自 公用程式之意見回饋碼的資料項目

### 檢查/錯誤處理
<a name="ceeloct-error"></a>
+ 如果傳遞給公用程式的引數數目不是三或四個，`BluageWrapperException`則會擲出
+ 如果在處理從本機日期/時間轉換到任何輸出格式期間發生任何例外狀況：第一個和第二個引數將設定為 0，第三個引數將保持不變；將記錄錯誤訊息；或者，將使用嚴重性為 3 的意見回饋代碼和訊息編號 2531 來饋送意見回饋代碼持有者
+ 成功時，所有三個引數都會填入適當的內容，而選用的意見回饋代碼將以嚴重性 0 的代碼提供

### 範例用量
<a name="ceeloct-sample"></a>

以下是 COBOL 程式碼片段範例，顯示 CEELOCT 公用程式的使用情況。意見回饋程式碼持有者結構 FC 並未完整提供，因為它包含數百個條件 （層級 88) 項目。

```
   WORKING-STORAGE SECTION.
   01  LILIANS              PIC S9(9) BINARY.
   01  GREGORN              PIC X(80).
   01  SECONDS              COMP-2.
   01  FC.
   ...
   01  ROUTINE-NAMES.
       05 CEESECS-ROUTINE    PIC X(08) VALUE 'CEESECS '.
       05 CEELOCT-ROUTINE    PIC X(08) VALUE 'CEELOCT '.
       05 CEEDATE-ROUTINE    PIC X(08) VALUE 'CEEDATE '.
   ...

       CALL CEELOCT-ROUTINE USING LILIANS
                                  SECONDS
                                  GREGORN
                                  FC.
```

## CEERAN0
<a name="ceeran0"></a>

### 用途
<a name="ceeran0-purpose"></a>

呼叫 CEERAN0 程式，使用指定的種子產生介於 0.0 和 1.0 之間的虛擬隨機數字。它以需要使用者指定種子的乘法並行方法演算法為基礎。使用 0 作為種子會觸發特定模式，其中種子實際上是從 Greenwich 平均時間 （在執行程式時） 計算。否則，種子會依原狀使用。虛擬隨機序列是可預測的。

### 簽章
<a name="ceeran0-signature"></a>

CEERAN0 程式需要三個參數：
+ seed （輸入參數），可解譯為正整數的資料項目 （包含 0)
+ 隨機數字 （輸出參數），可解譯為雙精確度浮點數的資料項目 （其值介於 0.0 和 1.0 之間，獨佔）；這是程式的結果
+ 選用的意見回饋碼 （輸出參數），為 12 個位元組的資料項目，用於存放程式有關隨機數字運算的意見回饋

### 檢查/錯誤處理
<a name="ceeran0-error"></a>
+ 如果引數數目不是 2 或 3，`IllegalArgumentException`則會擲出
+ 種子值必須介於 0 和 2147483646 之間，包括在內。如果種子值超出這些範圍，則會記錄錯誤訊息，且回饋代碼會設為嚴重性 3，而訊息號碼會設為 2524。產生的隨機數字將設定為 -1.0 （類比為舊版行為）
+ 如果種子值設為 0，但系統無法擷取 Greewich 平均時間 （基於任何原因），則會使用值 1 進行計算做為備用，且回饋碼會設為嚴重性 1，而訊息號碼設為 2523。隨機數字運算將繼續使用遞迴種子值 （類比傳統行為）

### 範例用量
<a name="ceeran0-sample"></a>

這是示範如何使用 CEERAN0 程式的 Java 範例，使用包括意見回饋碼的所有參數，以及來自多個層 （實體、服務） 的位元：

```
//Entity layer
public class Randomin extends RecordEntity {
    private final Group root = new Group(getData()).named("RANDOMIN"); 
    private final Elementary randomin = new Elementary(root,new BinaryIntegerType(4, true),new BigDecimal("0")).named("RANDOMIN");
    ...

public class Randomout extends RecordEntity {
    private final Group root = new Group(getData()).named("RANDOMOUT"); 
    private final Elementary randomout = new Elementary(root,new DoubleFloatingPointType(),new BigDecimal("0")).named("RANDOMOUT");
    ...
public class Returncode1 extends RecordEntity {
    private final Group root = new Group(getData()).named("RETURNCODE"); 
    private final Elementary returncode1 = new Elementary(root,new AlphanumericType(12)," ").named("RETURNCODE");
    ...

// Service layer
    CallHandler.newInstance(ctrl, ctx, ctx.getErrorContext())
        .byReference(ctx.getRandomin().getRandominReference(),
        ctx.getRandomout().getRandomoutReference(),
        ctx.getReturncode1().getReturncode1Reference())
        .call("CEERAN0");
```

## CEESECS
<a name="ceesecs"></a>

### 用途
<a name="ceesecs-purpose"></a>

CEESECS 公用程式會將時間戳記字串表示法轉換為 Lilian 秒 （自 1582 年 10 月 14 日 00：00：00 起的秒數）。

### 簽章
<a name="ceesecs-signature"></a>

基於其本質，CEESECS 公用程式更適合從程式呼叫。

它需要三或四個引數 （最後一個引數是選用的）：
+ 強制第一個引數是資料項目，其值將做為時間戳記來解釋
+ 強制第二個引數是英數資料項目，其中包含用來指定如何解譯第一個引數的`PICTURE`字串
+ 必要第三個引數是資料項目，保留使用第二個引數做為 轉換第一個引數的結果 `PICTURE`
+ 第四個選用引數是用來存放來自 公用程式之意見回饋碼的資料項目

### 檢查/錯誤處理
<a name="ceesecs-error"></a>
+ 如果傳遞給公用程式的引數數目不是三或四個，`BluageWrapperException`則會擲出
+ 如果作為引數傳遞給公用程式的時間戳記無效，則會記錄錯誤訊息，並選擇性地使用嚴重性為 3 的意見回饋代碼和訊息編號 2513 來饋送意見回饋代碼持有者
+ 如果作為引數傳遞給公用程式的圖片無效，則會記錄錯誤訊息，並選擇性地使用嚴重性為 3 的意見回饋代碼和訊息編號 2518 來饋送意見回饋代碼持有者
+ 如果出於任何原因，無法計算百合秒輸出，則第三個引數 （輸出） 將設定為 0

### 範例用量
<a name="ceesecs-sample"></a>

以下是 COBOL 程式中 CEESECS 公用程式的範例呼叫：

```
   WORKING-STORAGE SECTION.
   01  SECONDS              COMP-2.
   01  TIMESTAMP-IN.
       05  TIMESTAMP-IN-LEN        PIC S9(4) BINARY.
       05  TIMESTAMP-IN-STR.
           10  TIMESTAMP-IN-CHAR   PIC X OCCURS 0 TO 256
                               DEPENDING ON TIMESTAMP-IN-LEN.
   01  MASK.
       05  MASK-LEN         PIC S9(4) BINARY.
       05  MASK-STR.
           10  MASK-CHR     PIC X OCCURS 0 TO 256
                               DEPENDING ON MASK-LEN.
   01  FC.
   ...
   01  ROUTINE-NAMES.
       05 CEESECS-ROUTINE    PIC X(08) VALUE 'CEESECS '.
       05 CEELOCT-ROUTINE    PIC X(08) VALUE 'CEELOCT '.
       05 CEEDATE-ROUTINE    PIC X(08) VALUE 'CEEDATE '.
   ...
   ...
   * date for lilian second 12,799,191,601.123
       MOVE '1988-5-16-19:00:01.123' TO TIMESTAMP-IN-STR
       MOVE 23                  TO MASK-LEN
       MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR
       CALL CEESECS-ROUTINE USING TIMESTAMP-IN
                                  MASK
                                  SECONDS
                                  FC.
```

## ILBOABN0
<a name="ilboabn0"></a>

### 用途
<a name="ilboabn0-purpose"></a>

ILBOABN0 程式的目的是使用使用者提供的 abend （異常結束） 程式碼，以控制的方式中斷目前的執行單位。常用於處理專用程式的錯誤。

擲回 會中斷目前的執行單位`StopRunUnitException`。

### 簽章
<a name="ilboabn0-signature"></a>

ILBOABN0 程式採用單一強制引數，這是包含抽象程式碼的資料項目 （必須可解譯為整數）。

### 檢查/錯誤處理
<a name="ilboabn0-error"></a>

擲回 `StopRunUnitException` 以中斷目前的執行單位執行時，程式會將傳回程式碼設定為第一個引數提供的值。此外，也會記錄資訊訊息。

### 範例用量
<a name="ilboabn0-sample"></a>

以下是透過 AWS 轉換進行 COBOL 現代化所產生的 ILBOABN0 程式的 Java 範例用量：

```
   77  WS-ABND-CODE          COMP   PIC S9(4)      VALUE +1234.
...
...

   1970-ABNDIT.
       CALL 'ILBOABN0' USING WS-ABND-CODE.
```

和相符的 Java 現代化：

```
//Entity layer
private final Group root = new Group(getData()); 
private final Elementary wsAbndCode = new Elementary(root,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("1234"));
...

//Service layer
@Override
public void _1970Abndit(final MyPgmContext ctx, final ExecutionController ctrl) {
   ctrl.callSubProgram("ILBOABN0", CallBuilder.newInstance()
       .byReference(ctx.getWsAbndCode().getWsAbndCodeReference())
       .getArguments(), ctx);
```