Python

5. 5250アプリケーションをPythonで書くと

先に「RPG から Pythonへの進化」で示したように
PythonとはILE-RPGのフリー・フォーマットをさらに
簡略化したようなイメージであり、簡単そうであることを
漢字てもらえたと思う。
しかし実際のPython となるとからり難しいのではないかと
身構えてしまう人もいるかもしれない。
_

5250アプリケーションのサンプルの実行画面を
ここで紹介する。

商品マスター登録                               モード  . . :    変更       
様式  . . . . :   DSPDTA01                     ファイル  . :   @SHOHIN     
                                                                           
商品コード : NV-CF1                                                        
商品名 :      Cカセット編集ビデオ                                         
単価 :          58,000                                                     
品種コード : 0002  ビデオデッキ                                            
                                                                           

F3= 終了                F5= 最新表示             F9= 挿入             F10= 入力
F11= 変更               F23= 削除                F12= 前画面                   

[解説]

DFUのように1レコードを保守するプログラムであるが
機能キーを見てもわかるようにDFUと同じようにモードを
切り替えることもできるようになっている。
このプログラムは Pythonで動作している。

[@SHOHIN: Pythonソース]

#*********************************************************#             
#*                                                                      
#*  プログラム名   : @SHOHIN.PY                                         
#*  タイプ         : PYTHON                                             
#*  APP タイプ     : 単票入力 (*SGLCOL)                                 
#*  作成日         : 2024/11/11               14:28:01                  
#*  作成者         : QTR                                                
#*  ディレクトリー :  /PYTHON/PROJECT                                   
#*  使用ファイル   : QTRFIL/SHOHIN                                      
#*                   QTRFIL/HINSHU                                      
#*                                                                      
#*********************************************************              
import sys                                                              
from as400 import *                                                     
                                                                        
CALLTYPE(sys.argv[1])                                                   
OPEN("QTROBJ/@SHOHIN")                  #  表示装置ファイルをオープン   
OPEN("QTRFIL/SHOHIN")                       #  商品マスターファイル     
OPEN("QTRFIL/SHOHIN")                       #  商品マスターファイル       
OPEN("QTRFIL/HINSHU")                       #  品種マスターファイル       
                                                                          
while True:                                                               
    EXFMT("DSPHEAD")                        #  初期画面を表示             
    CHAIN("SHCODE", "SHOHIN")               #  商品マスター登録を CHAIN   
    while True:                                                           
      CHAIN("SHSCOD", "HINSHU")             #  品種マスターファイル       
      EXFMT("DSPDTA01")                     #  明細レコード画面を表示     

[解説]

_

これがPythonソースのすべてであり驚くほど簡単である。
参考までにこの処理をRPGで記述したソースを後で示す。
さて

OPEN("QTROBJ/@SHOHIN")                      #  表示装置ファイルをオープン   
OPEN("QTRFIL/SHOHIN")                       #  商品マスターファイル     
OPEN("QTRFIL/SHOHIN")                       #  商品マスターファイル       
OPEN("QTRFIL/HINSHU")                       #  品種マスターファイル

であるが DSPF: @SHOHIN のオープンも
データ・ベース: QTRFIL/SHOHIN, …などのオープンも同じ openという命令だけである。
これは

from as400 import *

で示されているように㈱オフィスクアトロが開発したAS400エンジンというPythonに提供するための
サービス・プログラムで提供されているメソッド(=関数)である。
DSPFなのかPFなのか LFなのかはオープンすればわかることだから
いちいち装置タイプ(WORKSTN, DISK)を宣言する必要はないというのが
弊社のPythonに対する考え方である。
できるだけコーディングを簡素化するために無駄なコーディグは避けて
多くをAS400エンジンに任せればよいという考え方である。
_

同じようにして

  EXFMT("DSPHEAD")                        #  初期画面を表示

には F3=終了やF10=入力, …などの記述も必要ない。
EXFMT メソッド(=プロシージャー)の内部で F3=終了の処理を行っているからである。
読者はRPGプログラムで EXFMT DSPRCD のような記述の直後には必ず F3=終了の処理を
毎回記述していることだと思う。
毎回、書かねばならないのであれば内部でやらせてしまえばよいことである。

     CHAIN("SHCODE", "SHOHIN")               #  商品マスター登録を CHAIN

などの処理にしてもCHAINが失敗したときのエラー処理なども毎度のように
書かなくてもよい。AS400エンジンにやらせればよいのである。

こうしていくとSFLレコードの表示やロール・アップ/ダウンの処理も毎回同じような
記述をしてはバグを発生させてバグつぶしに追われていたのである。
必要な基本動作はAS400エンジンに任せておけばバグも発生しないし
短時間で必要な処理だけを記述すればよいのである。
実はこの短い16ステップばかりのPythonソースも人手によってコーディングしたものではなく
Wizardによって自動生成したものである。
Wizardの利用によってとにもかくにも正確に動作するPythonが生成されるわけであるから
慣れないうちはそこから少しずつ修正を加えていけば短期間でPythonの動作を
学習することができる。
_

最後に参考までに上記のプログラムのILE-RPGソースを以下に紹介する。

[@SHOHIN: ILE-RPGソース]

0001.00 H DFTNAME(@SHOHIN) DATEDIT(*YMD/)BNDDIR('QC2LE')                                         
0002.00 H COPYRIGHT('*DFUATR=YYYYNYYY80 241321 ')                                                
0003.00 F********  商品マスター登録 **************************************                       
0004.00 F@SHOHIN   CF   E             WORKSTN                                                    
0005.00 F                                     INFDS(INFDS)                                       
0006.00 FSHOHIN    UF A E           K DISK                                                       
0007.00 F                                     INFDS(INFDSF)                                      
0008.00 F                                     EXTFILE(SHOHIN_LIB)                                
0009.00 FQPDFULOG  O    E             DISK    USROPN                                             
0010.00 F                                     EXTFILE(DFULOG_LIB)                                
0011.00 FHINSHU    IF   E           K DISK                                                       
0012.00 F*****************************************************************                       
0013.00  *    ラSRCINFOン                                                                          
0014.00  *     使用目的    :   単票入力 (*SGLCOL)                                                
0015.00  *     作成日      :   2024/09/19               14:24:41                                 
0016.00  *     作成者      :   QTR                                                               
0017.00                                                                                          
0018.00  *    ラ コンパイル ン                                                                     
0019.00  *    CRTBNDRPG OBJLIB/@SHOHIN    SRCFILE(QTRSRC/QRPGLESRC )                             
0020.00  *      DFTACTGRP(*NO) ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)                           
0021.00                                                                                          
0022.00 D INFDS           DS                                                                     
0023.00 D  NUM_ROWS             152    153B 0                                       DSPF の行数  
0024.00 D  NUM_COLS             154    155B 0                                       DSPF の桁数        
0025.00 D  NUM_RCDS             156    159I 0                                        レコード数        
0026.00 D  RECNAM               261    270                                          現在のレコード名   
0027.00 D  LINE                 370    371B 0                                       カーソル行と桁     
0028.00 D  TOPRRN_              378    379B 0                                       SFL 先頭の RRN     
0029.00 D  BRRN                 376    377B 0                                       入出力レコード RRN 
0030.00                                                                                                
0031.00 D INFDSF          DS                  QUALIFIED                                                
0032.00  * オープン・フィードバック域   160 BYTES 81-240                                               
0033.00 D  OPNFBK                81    240                                          ファイル名         
0034.00 D   ODP_TYPE             81     82                                         ODP タイプ          
0035.00 D   FILE_NAME            83     92                                         ODP タイプ          
0036.00 D   LIBRARY              93    102                                         ODP タイプ          
0037.00 D   MEMBER              129    138                                          メンバー名         
0038.00 D   FILRCDS             156    159I 0                                      OPEN 時レコード数   
0039.00                                                                                                
0040.00  *( 一般標識の再定義 )                                                                         
0041.00 D INDPTR          S               *   INZ(%ADDR(*IN))                                          
0042.00 D INDICATORS      DS                  BASED(INDPTR)                                            
0043.00 D  FGR                   31     40    DIM(10)                                                  
0044.00                                                                                                
0045.00  *( 作業変数 )                                                                                 
0046.00 D SHOHIN_LIB      S             13    INZ('QTRFIL/SHOHIN')                                     
0047.00 D DFULOG_LIB      S             16    INZ('QTEMP/QPDFULOG')                                    
0048.00 D FILE            S             10A   INZ('SHOHIN    ')                                      
0049.00 D RECORD          S             10A   INZ('SHOHINR   ')                                      
0050.00 D AR              S              1A   DIM(256)                                               
0051.00 D N               S              4S 0                                                        
0052.00 D TRUE            S              1A   DIM(256)                                               
0053.00 D TRUE#           S              4B 0 INZ(0)                                                 
0054.00 D FALSE#          S              4B 0 INZ(-1)                                                
0055.00 D QUOT            C                   CONST(X'7D')                                           
0056.00 D OE              C                   CONST(X'0E')                                           
0057.00 D OF              C                   CONST(X'0F')                                           
0058.00 D NULL            C                   CONST(X'00')                                           
0059.00 D MSGKEY          S              4A                                                          
0060.00 D MSGFILLIB       S             20A   INZ('QCDFUSG   QSYS      ')                            
0061.00 D ERRN            S              4S 0                                                        
0062.00 D CUR             S              2S 0 INZ(1)                                現在の画面標識   
0063.00 D LST             S              2S 0 INZ(1)                                最後の画面標識   
0064.00                                                                                              
0065.00  *( QMHSNDPM : プログラム・メッセージの送信 )                                                
0066.00 D QMHSNDPM        PR                  EXTPGM('QMHSNDPM')                                     
0067.00 D  MSGID                         7A   CONST                                                  
0068.00 D  MSGFILE                      20A   CONST                                                  
0069.00 D  MSGDATA                    6000A   CONST OPTIONS(*VARSIZE)                                
0070.00 D  MSGDATALEN                   10I 0 CONST                                                  
0071.00 D  MSGTYPE                      10A   CONST                                                  
0072.00 D  CALLSTACKE                   10A   CONST                       
0073.00 D  CALLSTACKC                   10I 0 CONST                       
0074.00 D  RTNMSGKEY                     4A                               
0075.00 D  APIERR                             LIKEDS(QUSEC)               
0076.00 D                                     OPTIONS(*VARSIZE)           
0077.00  *                                                                
0078.00 D*( プログラム状況データ構造 )                                    
0079.00 D INFDS_THIS     SDS                                              
0080.00 D  PROC_NAM         *PROC                                         
0081.00 D  ROUTINE          *ROUTINE                                      
0082.00 D                              512A                               
0083.00 D  PGMINFO                1    512                                
0084.00 D  LINE_NUM              21     28                                
0085.00 D  CPFID                 40     46                                
0086.00 D  CPFDTA                91    170                                
0087.00 D  ERRMSGID              46     51                                
0088.00 D  JOB                  244    253                                
0089.00 D  USER                 254    263                                
0090.00 D  JOBNBR               264    269  0                             
0091.00 D  CURUSR               358    367                                
0092.00                                                                   
0093.00 D*( WORK 日付 YYMMDD ゴーn 構造  )                                 
0094.00 D DATEDS          DS                                              
0095.00 D  SRY                    1      2  0                             
0096.00 D  SRYMD                  1      8  0                                   
0097.00 D  YYMMDD                 3      8  0                                   
0098.00 D  YYMM                   3      6  0                                   
0099.00 D  MMDD                   5      8  0                                   
0100.00 D  YY                     3      4  0                                   
0101.00 D  MM                     5      6  0                                   
0102.00 D  DD                     7      8  0                                   
0103.00                                                                         
0104.00 D SAVEDS        E DS                  EXTNAME(SHOHIN)                   
0105.00 D  FILDTA                 1   1024                                      
0106.00                                                                         
0107.00  *( DFU 属性 )                                                          
0108.00 D DFUATR          DS                                                    
0109.00 D  ATTR_BUF               1     18                                      
0110.00 D  PRINT                  1      1    INZ('Y')                          
0111.00 D  ADDPRT                 2      2    INZ('Y')                          
0112.00 D  CHGPRT                 3      3    INZ('Y')                          
0113.00 D  DLTPRT                 4      4    INZ('Y')                          
0114.00 D  IGCERR                 5      5    INZ('N')                          
0115.00 D  EDTDEC                 6      6    INZ('Y')                          
0116.00 D  UPDADV                 7      7    INZ('Y')                          
0117.00 D  CHGKEY                 8      8    INZ('Y')                          
0118.00 D  DSPWID                 9     11    INZ('80 ')                        
0119.00 D  DSPDEP                12     13    INZ('24')                         
0120.00 D  PRTWID                14     16    INZ('132')                                    
0121.00 D  PRTSEP                17     18    INZ('1 ')                                     
0122.00                                                                                     
0123.00 D APIERR          DS                                                                
0124.00 D  GETBYT                 1      4B 0 INZ(160)                                      
0125.00 D  AVLBYT                 5      8B 0 INZ(0)                                        
0126.00 D  MSGID                  9     15                                                  
0127.00 D  MSGDTA                17    160                                                  
0128.00                                                                                     
0129.00 D APIDS           DS                                                                
0130.00 D  INZSIZE                1      4B 0 INZ(1000)                                     
0131.00 D  MSGDTALEN              5      8B 0 INZ(100)                              小数    
0132.00 D  PGMSTKCNT              9     12B 0 INZ(1)                                小数    
0133.00                                                                                     
0134.00 DQUSEC            DS                                                                
0135.00 D QUSBPRV                 1      4B 0 INZ(8)                                        
0136.00 D QUSBAVL                 5      8B 0 INZ(0)                                        
0137.00                                                                                     
0138.00 D DSPMSG          S              6A                                                 
0139.00 C*-------------------------------------------------------------------------+        
0140.00 C     *ENTRY        PLIST                                                  |        
0141.00 C                   PARM                    CMD              10            |        
0142.00 C                   PARM                    ERR               1            |        
0143.00 C                   PARM                    MSG             132            |        
0144.00 C*-------------------------------------------------------------------------+     
0145.00 C*-------------------------------------------------------------------------+     
0146.00 C     RECKEY        KLIST                                                  |     
0147.00 C                   KFLD                    SHCODE                         |     
0148.00 C*-------------------------------------------------------------------------+     
0149.00                                                                                  
0150.00 C*( 初期画面 )                                                                   
0151.00 C*-------------------------------------------------------------------------+     
0152.00 C     START         TAG                                                    |     
0153.00 C                   EXFMT     DSPHEAD                                      |     
0154.00 C*-------------------------------------------------------------------------+     
0155.00 C                   SETOFF                                       99              
0156.00 C*( CF03 )- 終了                                                                 
0157.00 C     *IN03         IFEQ      *ON                                          CF03  
0158.00 C                   SETON                                        LR              
0159.00 C                   RETURN                                                       
0160.00 C                   ENDIF                                                        
0161.00 C*( ROLLUP )                                                                     
0162.00 C     *IN07         IFEQ      *ON                                          CF03  
0163.00 C                   EXSR      ROLLUP                                             
0164.00 C                   GOTO      DSPLY                                              
0165.00 C                   ENDIF                                                        
0166.00 C*( ROLLDWN )                                                                    
0167.00 C     *IN08         IFEQ      *ON                                          CF03  
0168.00 C                   EXSR      ROLLDWN                                                
0169.00 C                   GOTO      DSPLY                                                  
0170.00 C                   ENDIF                                                            
0171.00 C*( CF09 )- 入力                                                                     
0172.00 C     *IN09         IFEQ      *ON                                          CF09      
0173.00 C                   MOVEL     ' 入力 '      DSPMSG                                   
0174.00 C                   GOTO      DSPLY                                                  
0175.00 C                   ENDIF                                                            
0176.00 C*( 実行キー )                                                                       
0177.00 C     *NOKEY        CLEAR                   SHOHINR                                  
0178.00 C                   SETOFF                                       90                  
0179.00 C     RECKEY        CHAIN     SHOHIN                             90                  
0180.00 C  N90              MOVEL     ' 照会 '      DSPMSG                                   
0181.00 C     *IN90         IFEQ      *ON                                                    
0182.00 C                   SETON                                        6299                
0183.00 C                   GOTO      START                                                  
0184.00 C                   ENDIF                                                            
0185.00 C                   EXSR      CHECK                                                  
0186.00 C   99              GOTO      START                                                  
0187.00 C*( 明細画面 )                                                                       
0188.00 C*-------------------------------------------------------------------------+         
0189.00 C     DSPLY         TAG                                                    |         
0190.00 C   31              EXFMT     DSPDTA01                                     |         
0191.00 C*-------------------------------------------------------------------------+         
0192.00 C                   SETOFF                                       99                     
0193.00 C*( CF03 )- 終了                                                                        
0194.00 C     *IN03         IFEQ      *ON                                          CF03         
0195.00 C                   SETON                                        LR                     
0196.00 C                   EXSR      LRRTN                                                     
0197.00 C   LR              RETURN                                                              
0198.00 C                   GOTO      DSPLY                                                     
0199.00 C                   ENDIF                                                  CF03         
0200.00 C*( CF12 )- 前画面                                                                      
0201.00 C     *IN12         IFEQ      *ON                                          CF12         
0202.00 C                   SETOFF                                       12                     
0203.00 C                   GOTO      START                                                     
0204.00 C                   ENDIF                                                  CF12         
0205.00 C*( CF23 )- 削除                                                                        
0206.00 C     *IN23         IFEQ      *ON                                          CF23         
0207.00 C                   SETOFF                                       23                     
0208.00 C     *IN43         IFEQ      *OFF                                         NOT 43       
0209.00 C                   SETON                                        43                     
0210.00 C                   EVAL      MSGID = 'DFU0736'                                         
0211.00 C                   EXSR      SNDPGMMSG                                                 
0212.00 C                   GOTO      DSPLY                                                     
0213.00 C                   ENDIF                                                  NOT 43       
0214.00 C                   ENDIF                                                  CF23         
0215.00 C*( ROLLUP )                                                                            
0216.00 C     *IN07         IFEQ      *ON                                          CF03         
0217.00 C                   EXSR      ROLLUP                                                    
0218.00 C                   GOTO      DSPLY                                                     
0219.00 C                   ENDIF                                                  CF12         
0220.00 C*( ROLLDWN )                                                                           
0221.00 C     *IN08         IFEQ      *ON                                          CF03         
0222.00 C                   EXSR      ROLLDWN                                                   
0223.00 C                   GOTO      DSPLY                                                     
0224.00 C                   ENDIF                                                               
0225.00 C*( 実行キー )                                                                          
0226.00  *   ( 何も修正がなければ ROLLUP と見なします )                                         
0227.00 C     *IN01         IFEQ      *OFF                                         NOT CHANGED  
0228.00 C                   EXSR      ROLLUP                                                    
0229.00 C                   GOTO      DSPLY                                                     
0230.00 C                   ENDIF                                                  NOT CHANGED  
0231.00  *   ( 修正があったときのみレコードを更新する )                                         
0232.00 C                   EXSR      CHECK                                                     
0233.00 C   99              GOTO      DSPLY                                                     
0234.00 C                   MOVE      FILDTA        SAVDTA                                      
0235.00 C     *LIKE         DEFINE    FILDTA        SAVDTA                                      
0236.00 C                   SETOFF                                       90                     
0237.00 C     RECKEY        CHAIN     SHOHIN                             90                     
0238.00 C   30              UNLOCK    SHOHIN                                                    
0239.00 C   30              GOTO      DSPLY                                                     
0240.00 C                   MOVE      SAVDTA        FILDTA                                    
0241.00 C*-------------------------------------------------------------------------+          
0242.00 C   90              WRITE     SHOHINR                                      |          
0243.00 C  N23                                                                     |          
0244.00 CANN90              UPDATE    SHOHINR                                      |          
0245.00 C   23                                                                     |          
0246.00 CANN90              DELETE    SHOHINR                                      |          
0247.00 C*-------------------------------------------------------------------------+          
0248.00 C   90              ADD       1             ADDRCD                                    
0249.00 C  N23                                                                                
0250.00 CANN90              ADD       1             CHGRCD            5 0                     
0251.00 C   23                                                                                
0252.00 CANN90              ADD       1             DLTRCD            5 0                     
0253.00 C                   SETOFF                                       2343                 
0254.00 C                   EXSR      WRTLOG                                                  
0255.00 C                   GOTO      DSPLY                                                   
0256.00 C     END           TAG                                                               
0257.00 C******************************************************                               
0258.00 C     *INZSR        BEGSR                                                             
0259.00 C******************************************************                               
0260.00 C*  初期サイクルのみの実行                                                            
0261.00 C                   CLEAR                   SHOHINR                                   
0262.00 C     CMD           COMP      'DSPDTA    '                           30     表示のみ  
0263.00 C   30              MOVE      ' 表示 '      DSPMOD                                    
0264.00 C  N30              EVAL      DSPMOD = ' 変更 '                                              
0265.00 C  N30              OPEN      QPDFULOG                             91                        
0266.00  /FREE                                                                                       
0267.00    MSGDTA =  INFDSF.MEMBER +  INFDSF.FILE_NAME +  INFDSF.LIBRARY;                            
0268.00  /END-FREE                                                                                   
0269.00 C                   SETON                                        31        DSPDTA 最初       
0270.00 C                   SETOFF                                       32                          
0271.00 C                   ENDSR                                                                    
0272.00 C******************************************************                                      
0273.00 C     CHECK         BEGSR                                                                    
0274.00 C******************************************************                                      
0275.00 C*( 明細チエック )                                                                           
0276.00 C*-------------------------------------------------------------------------+                 
0277.00 C     HINSHUKEY     KLIST                                                  |                 
0278.00 C                   KFLD                    HNSCOD                         |                 
0279.00 C*-------------------------------------------------------------------------+                 
0280.00 C                   EVAL      HNSCOD = SHSCOD                                                
0281.00 C                   SETOFF                                       99                          
0282.00 C     HINSHUKEY     CHAIN     HINSHU                             99                          
0283.00  /FREE                                                                                       
0284.00    IF *IN99 = *ON;                                                                           
0285.00       *IN71 = *ON;                                                                           
0286.00      ERRMSG = ' 品種コード  の誤りです。 ';                                                  
0287.00      LEAVESR;                                                                                
0288.00    ENDIF;                                                                               
0289.00  /END-FREE                                                                              
0290.00  /END-FREE                                                                              
0291.00 C     CHKEND        ENDSR                                                               
0292.00 C******************************************************                                 
0293.00 C     ROLLUP        BEGSR                                                               
0294.00 C******************************************************                                 
0295.00 C                   SETOFF                                       07                     
0296.00 C     CUR           IFLT      LST                                          =LSTFLG     
0304.00  /FREE                                                                                  
0305.00    FGR(CUR) = *OFF;                                                                     
0306.00    CUR      = 1;                                                                        
0307.00    FGR(CUR) = *ON;  // 標識 31 を ON にセットして戻す                                   
0308.00    IF *IN30 = *OFF AND *IN01 = *ON AND UPDADV = 'Y';                                    
0309.00      UPDATE SHOHINR   ;      // レコード前進で更新                                      
0310.00      UPDATE SHOHINR   ;      // レコード前進で更新                                      
0311.00      CHGRCD = CHGRCD + 1;                                                               
0312.00      EXSR   WRTLOG;                                                                    
0313.00    ENDIF;                                                                              
0314.00  /END-FREE                                                                             
0315.00 C                   SETOFF                                       07                    
0316.00 C     RECKEY        SETGT     SHOHIN                                                   
0317.00 C                   READ      SHOHIN                                 61                
0318.00 C     *IN61         IFEQ      *ON                                                      
0319.00 C                   SETON                                        99                    
0320.00 C                   ELSE                                                               
0321.00 C   30              UNLOCK    SHOHIN                                                   
0322.00 C                   EXSR      CHECK                                                    
0323.00 C                   ENDIF                                                              
0324.00 C                   ENDIF                                                  >=LSTFLG    
0325.00 C                   ENDSR                                                              
0326.00 C******************************************************                                
0327.00 C     ROLLDWN       BEGSR                                                              
0328.00 C******************************************************                                
0329.00 C                   SETOFF                                       08                    
0330.00 C                   IF        CUR > 1                                      CUR>1       
0331.00  /FREE                                                                                 
0332.00     FGR(CUR) = *OFF;                                                                   
0333.00     CUR = CUR - 1;                                                                     
0334.00     FGR(CUR) = *ON;  // 前の標識を ON にセット                                         
0335.00  /END-FREE                                                                             
0336.00 C                   ELSE                                                   CUR>1     
0337.00 C     RECKEY        SETLL     SHOHIN                                                 
0338.00 C                   READP     SHOHIN                               61                
0339.00 C     *IN61         IFEQ      *ON                                                    
0340.00 C                   SETON                                        99                  
0341.00 C                   ELSE                                                             
0342.00 C   30              UNLOCK    SHOHIN                                                 
0343.00 C                   EXSR      CHECK                                                  
0344.00 C                   ENDIF                                                            
0345.00 C                   ENDIF                                                  CUR>1     
0346.00 C                   ENDSR                                                            
0347.00 C******************************************************                              
0348.00 C     WRTLOG        BEGSR                                                            
0349.00 C******************************************************                              
0350.00 C                   IF        PRINT = 'Y' AND *IN91 = *OFF AND                       
0351.00 C                             CMD    = 'CHGDTA    '                                  
0352.00  /FREE                                                                               
0353.00    IF ADDPRT = 'Y' AND *IN90 = *ON;                                                  
0354.00       LOGMSG = ' 追加   ';                                                         
0355.00       WRITE QPDFULOGR;                                                               
0356.00    ENDIF;                                                                            
0357.00    IF CHGPRT = 'Y' AND *IN90 = *OFF AND *IN23 = *OFF;                                
0358.00       LOGMSG = ' 変更後  ';                                                         
0359.00       WRITE QPDFULOGR;                                                               
0360.00    ENDIF;                                                                             
0361.00    IF DLTPRT = 'Y' AND *IN90 = *OFF AND *IN23 = *ON;                                  
0362.00       LOGMSG = ' 削除済み ';                                                          
0363.00       WRITE QPDFULOGR;                                                                
0364.00    ENDIF;                                                                             
0365.00  /END-FREE                                                                            
0366.00 C                   ENDIF                                                  CHKLIST    
0367.00 C                   ENDSR                                                             
0368.00 C******************************************************                               
0369.00 C     SNDPGMMSG     BEGSR                                                             
0370.00 C******************************************************                               
0371.00  /FREE                                                                                
0372.00      QMHSNDPM(MSGID: MSGFILLIB: MSGDTA : MSGDTALEN: '*COMP':                          
0373.00                '*PGMBDY': PGMSTKCNT:MSGKEY:APIERR);                                   
0374.00  /END-FREE                                                                            
0375.00 C                   ENDSR                                                             
0376.00 C******************************************************                               
0377.00 C     LRRTN         BEGSR                                                             
0378.00 C******************************************************                               
0379.00 C                   EVAL      ANS = 'Y'                                               
0380.00 C*-------------------------------------------------------------------------+          
0381.00 C     ENDDSP        TAG                                                    |          
0382.00 C                   EXFMT     ENDOPT                                       |          
0383.00 C*-------------------------------------------------------------------------+          
0384.00 C                   IF        ANS = 'Y'                               
0385.00 C  N30              CLOSE     QPDFULOG                                
0386.00 C                   ELSE                                              
0387.00 C                   SETOFF                                       LR   
0388.00 C                   ENDIF                                             
0389.00 C                   ENDSR                                             

[解説]

ILE-RPG で約390ステップ数のプログラムが Pythonで書くと1/10以下の20ステップ弱で
書けてしまう。
これはPythonという開発言語だから簡単になったというのではなく
Python自体には5250アプリケーションを作る機能はないのだが
次期製品: Python.400 のAS00エンジンというサービス・プログラムが
5250アプリケーションの開発を可能にするだけでなく多くの機能を代替しているので
これほどに簡単になってしまうのである。
_