PANEL グループ

26. 拡張的メニューの開発方法(2)

前回はパネル・グループで操作指示を表示する簡単な方法を紹介した。
今回はまさにテクニックといえる裏ワザを紹介する。
こんな方法もあるのだと驚いて頂ければ幸いである。

パネル・グループでメニューを開発していると現在の状況などを
情報表示したい場合がある。
CLPなどプログラム・メニューであればことは簡単で
UIMメニューでも情報を表示する変数を定義して
UIMメニューを表示すればよいことになるので
早速、VAR変数やCLASS定義をパネル・グループに定義して
CRTMNU でコンパイルしてみるとVAR変数やCLASS定義も
すべてコンパイル・エラーになってしまう。
*MENUを作成するCRTMNU では VAR変数やCLASS定義は定義することが
できない
文法エラーとなってしまうのである。
さあ、ここでどうする?
読者諸氏の中には「やっぱりパネル・グループでメニューを
作成するには限界があるのでは…?」と思われる方もいるかもしれないが
実はそうではない。

ここからがテクニックであるが解決方法は

1. CRTMENUではなくCRTPNLGRPでパネル・グループを作成する。

2. CLPでパネル・グループをオープンするプログラムを作成する

3. CRTMNUコマンドで *PGMタイプのメニューとして作成する

MENUタグを含むパネル・グループもCRTMNUではなくCRTPNLGRPで
パネル・グループとして作成することもできる。
さらにはそのパネル・グループを表示するだけで
MENUタグはメニュー項目として機能する。
これがパネル・グループの非常に柔軟なところである。

参考とし製品the WINDOWSライターのメイン・メニューを紹介する。

[メニュー GO WINDOWS ]

                        the WINDOWS ライター・メニュー                          
                                                          システム :   S652EA92 
                                                          状況 :   ログ開始中   
 次の中から1つを選んでください。                                               
                                                                                
   ライターの開始と終了                                                         
      1. サブ・システム WINDOWS の開始      STRSBS WINDOWS                      
      2. WINDOWS ライターの開始       STRWINWTR( かんたんウィザード )     
      3.          終了             ENDWINWTR                           
      4. プリンタ定義ファイル (PDF) の保守  EDTF  /WONDOWS/PDF                  
                                                                                
   組織と部門を登録する                                                         
     11. 部門組織の登録                     WRKDEPMENT                          
                                                                                
   装置記述の構成を登録と運用                                                   
     21. WINDOWS ライターの構成             WRKWINWTR                           
     22. かんたんウィザード                 CRTDEVAUT                           
                                                                       続く ... 
 選択項目またはコマンド                                                         
 ===>                                                                           
                                                                                
 F3= 終了   F4= プロンプト   F5= 活動状況      F6= メッセージ                   
 F7= ジョブ・ログの表示   F9= コマンドの複写   F12= 取消し   F24= キーの続き    
                       F5 キーを押して WINDOWS ライターを確認してください。     

[解説]

メニューの右上部には状況として「ログ開始中」と表示されているのが情報表示の変数である。
オプションを選択してジョブ・ログを開始/終了すると現在の状況が表示されるように
なっている。

[パネル・グループ WINDOWS ]

ソースはこちらから

0001.00 .*******************************************************************     
0002.00 .*                                                                       
0003.00 .*  PANEL GRP NAME:   WINDOWS                                            
0004.00 .*                                                                       
0005.00 .*  TEXT          :   WINDOWS ライター・メニュー                         
0006.00 .*                                                                       
0007.00 .*  TYPE          :    単一メニュー・パネル                              
0008.00 .*                                                                       
0009.00 .*  SRCF          :   R610SRC/QMNUSRC(WINDOWS)                           
0010.00 .*                                                                       
0011.00 .*   作成日       :   2019/04/29        7:10:51                          
0012.00 .*                                                                       
0013.00 .*   作成ユーザー :   QTR              QPADEV0035                        
0014.00 .*                                                                       
0015.00 .*   変更日       :   2019/04/29        7:10:51                          
0016.00 .*                                                                       
0017.00 .*   変更ユーザー :   QTR              QPADEV0035                        
0018.00 .*                                                                       
0019.00 .*******************************************************************     
0020.00                                                                          
0021.00 :PNLGRP.                                                                 
0022.00 :COPYR.                                                                  
0023.00                       F5 キーを押して WINDOWS ライターを確認してください 
0024.00 :IMPORT  NAME='*' PNLGRP=CMDMNU.                    
0025.00 .*            -------------------------             
0026.00 .*                 クラスの定義                     
0027.00 .*            -------------------------             
0028.00 :CLASS   NAME=MODECL                                
0029.00          BASETYPE='CHAR 7'.                         
0030.00 :TL.                                                
0031.00 :TI      VALUE='"       "'. 状況 :                  
0032.00 :ETL.                                               
0033.00 :ECLASS.                                            
0034.00 :CLASS   NAME=CHA0006                               
0035.00          BASETYPE='CHAR  6'.                        
0036.00 :ECLASS.                                            
0037.00 :CLASS   NAME=CHA0012                               
0038.00          BASETYPE='CHAR 12'.                        
0039.00 :ECLASS.                                            
0040.00 :CLASS   NAME=CHA0020                               
0041.00          BASETYPE='CHAR 20'.                        
0042.00 :ECLASS.                                            
0043.00 .*            -------------------------             
0044.00 .*                 変数の定義                       
0045.00 .*            -------------------------             
0046.00 :VAR     NAME=ZMENU.                                
0047.00 :VAR     NAME=MODE        CLASS=MODECL.             
0048.00 :VAR     NAME=DSPMOD      CLASS=CHA0012.             
0049.00 :VAR     NAME=UPDWINMOD   CLASS=CHA0020.             
0050.00 .*            -------------------------              
0051.00 .*                 レコードの定義                    
0052.00 .*            -------------------------              
0053.00 :VARRCD  NAME=UPDMODRCD   VARS='UPDWINMOD'.          
0054.00 :VARRCD  NAME=DSPMODRCD   VARS='DSPMOD'.             
0055.00 .*            -------------------------              
0056.00 .*                 条件の定義                        
0057.00 .*            -------------------------              
0058.00 :COND    NAME=STRLOG                                 
0059.00          EXPR='CHKOBJ("QTEMP/LOG", "*DTAARA")'.      
0060.00 :COND    NAME=ENDLOG                                 
0061.00          EXPR='*NOT(CHKOBJ("QTEMP/LOG","*DTAARA"))'. 
0062.00 .*            -------------------------              
0063.00 .*                 機能キーの定義                    
0064.00 .*            -------------------------              
0065.00 :KEYL    NAME=MNUKEYL.                               
0066.00 :KEYI    KEY=ENTER                                   
0067.00          HELP=ENTER                                  
0068.00          ACTION=ENTER.                               
0069.00 :KEYI    KEY=HELP                                    
0070.00          HELP=HELP                                   
0071.00          ACTION=HELP.                                
0072.00 :KEYI    KEY=F3                                     
0073.00          HELP=F3                                    
0074.00          ACTION='EXIT SET'                          
0075.00          VARUPD=NO.                                 
0076.00 F3= 終了                                            
0077.00 :KEYI    KEY=F4                                     
0078.00          HELP=F4                                    
0079.00          ACTION='PROMPT'                            
0080.00          VARUPD=NO.                                 
0081.00 F4= プロンプト                                      
0082.00 :KEYI    KEY=F5                                     
0083.00          HELP=F5                                    
0084.00          ACTION='CMD WINDOWS/WRKWTRJOB'             
0085.00          VARUPD=NO.                                 
0086.00 F5= 活動状況                                        
0087.00 :KEYI    KEY=F6                                     
0088.00          HELP=F6                                    
0089.00          ACTION='CMD DSPMSG'                        
0090.00          VARUPD=NO.                                 
0091.00 F6= メッセージ                                      
0092.00 :KEYI    KEY=F7                                     
0093.00          HELP=F7                                    
0094.00          ACTION='CMD WRKOUTQ WINUSRSYS/QEZJOBLOG'   
0095.00          VARUPD=NO.                                 
0096.00 F7= ジョブ・ログの表示                                 
0097.00 :KEYI    KEY=F9                                        
0098.00          HELP=F9                                       
0099.00          ACTION='RETRIEVE'                             
0100.00          VARUPD=NO.                                    
0101.00 F9= コマンドの複写                                     
0102.00 :KEYI    KEY=F10                                       
0103.00          HELP=F10                                      
0104.00          ACTION='CMD CALL QCMD'                        
0105.00          VARUPD=NO.                                    
0106.00 F10= コマンド入力                                      
0107.00 :KEYI    KEY=F12                                       
0108.00          HELP=F12                                      
0109.00          ACTION='CANCEL SET'                           
0110.00          VARUPD=NO.                                    
0111.00 F12= 取消し                                            
0112.00 :KEYI    KEY=F13                                       
0113.00          HELP=F13                                      
0114.00          ACTION='CMD WINDOWS/WRKOUTQ OUTQ(*LIBL/*ALL)' 
0115.00          VARUPD=NO.                                    
0116.00 F13= 印刷待ち行列                                      
0117.00 :KEYI    KEY=F24                                       
0118.00          HELP=F24                                      
0119.00          ACTION=MOREKEYS                               
0120.00          VARUPD=NO.                                  
0121.00 F24= キーの続き                                      
0122.00 :KEYI    KEY=PAGEUP                                  
0123.00          HELP=PAGEUP                                 
0124.00          ACTION=PAGEUP.                              
0125.00 :KEYI    KEY=PAGEDOWN                                
0126.00          HELP=PAGEDOWN                               
0127.00          ACTION=PAGEDOWN.                            
0128.00 :EKEYL.                                              
0129.00 .*            -------------------------              
0130.00 .*                 ヘルプの定義                      
0131.00 .*            -------------------------              
0132.00 .* STRHLPDFN      :  DO NOT REMOVE THIS LINE         
0133.00 :HELP    NAME=OPTION01. サブ・システム WINDOWS の開始
0134.00 :XH3.                                                
0135.00  サブ・システム WINDOWS の開始                       
0136.00 :P.                                                  
0137.00 :PC.                                                 
0138.00 :EHELP.                                              
0139.00 :HELP    NAME=OPTION02.WINDOWS ライターの開始        
0140.00 :XH3.                                                
0141.00 WINDOWS ライターの開始                               
0142.00 :P.                                                  
0143.00 :PC.                                                 
0144.00 :EHELP.                                         
0145.00 .* ENDHLPDFN      :  DO NOT REMOVE THIS LINE    
0146.00 .* STRHLPDFN      :  DO NOT REMOVE THIS LINE    
0147.00 :HELP    NAME=OPTION03.WINDOWS ライター終了     
0148.00 :XH3.                                           
0149.00 WINDOWS ライター終了                            
0150.00 :P.                                             
0151.00 :PC.                                            
0152.00 :EHELP.                                         
0153.00 .* ENDHLPDFN      :  DO NOT REMOVE THIS LINE    
0154.00 .*            -------------------------         
0155.00 .*               表 示 パ ネ ル             
0156.00 .*            -------------------------         
0157.00 :PANEL   NAME=DSPMNU   HELP='MENU'              
0158.00          KEYL=MNUKEYL                           
0159.00          PANELID=ZMENU                          
0160.00          ENTER='MSG CPD9817 QCPFMSG'            
0161.00          USREXIT='CALL UPDWINMOD'               
0162.00          TOPSEP=SYSNAM.                         
0163.00 the WINDOWS ライター・メニュー                  
0164.00 :DATA    DEPTH=1                                
0165.00          HELP='DSPTOPH'                         
0166.00          BOTSEP=NONE.                           
0167.00 :DATACOL WIDTH=53.                              
0168.00 :DATACOL WIDTH='*'.                                                
0169.00 :DATAI   VAR=MODE                                                  
0170.00          USAGE=OUT.                                                
0171.00 :DATAIX  VAR=DSPMOD                                                
0172.00          ALIGN=RIGHT                                               
0173.00          NEWLINE=NO                                                
0174.00          USAGE=OUT.                                                
0175.00 :EDATA.                                                            
0176.00 :MENU    DEPTH='*'                                                 
0177.00          SCROLL=YES                                                
0178.00          BOTSEP=SPACE.                                             
0179.00 :TOPINST. 次の中から1つを選んでください。                         
0180.00 .* STRMNUDFN      :  DO NOT REMOVE THIS LINE                       
0181.00 :MENUGRP. ライターの開始と終了                                     
0182.00 :MENUI   OPTION=01                                                 
0183.00          ACTION='CMD ?STRSBS WINDOWS/WINDOWS'                      
0184.00          HELP='OPTION01'.                                          
0185.00  サブ・システム WINDOWS の開始       STRSBS WINDOWS                
0186.00 :MENUI   OPTION=02                                                 
0187.00          ACTION='CMD CALL WINDOWS/STRWINSTR'                       
0188.00          HELP='OPTION02'.                                          
0189.00 WINDOWS ライターの開始        STRWINWTR( かんたんウィザード )
0190.00 .* ENDMNUDFN      :  DO NOT REMOVE THIS LINE                       
0191.00 .* STRMNUDFN      :  DO NOT REMOVE THIS LINE                       
0192.00 :MENUI   OPTION=03                                      
0193.00          ACTION='CMD ?WINDOWS/ENDWINWTR'                
0194.00          HELP='OPTION03'.                               
0195.00           終了              ENDWINWTR          
0196.00 .* ENDMNUDFN      :  DO NOT REMOVE THIS LINE            
0197.00 :MENUI   OPTION=04                                      
0198.00          ACTION='CMD ?EDTF  STMF(''/WINDOWS/PDF'')'     
0199.00          HELP='OPTION03'.                               
0200.00  プリンタ定義ファイル (PDF) の保守   EDTF  /WONDOWS/PDF 
0201.00 :EMENUGRP.                                              
0202.00 :MENUGRP. 組織と部門を登録する                          
0203.00 :MENUI   OPTION=11                                      
0204.00          ACTION='CMD  WINDOWS/WRKDEPMENT'               
0205.00          HELP='OPTION11'.                               
0206.00  部門組織の登録                      WRKDEPMENT         
0207.00 :EMENUGRP.                                              
0208.00 :MENUGRP. 装置記述の構成を登録と運用                    
0209.00 :MENUI   OPTION=21                                      
0210.00          ACTION='CMD ?WINDOWS/WRKWINWTR'                
0211.00          HELP='OPTION11'.                               
0212.00 WINDOWS ライターの構成              WRKWINWTR           
0213.00 :MENUI   OPTION=22                                      
0214.00          ACTION='CMD ?WINDOWS/CRTDEVAUT'                
0215.00          HELP='OPTION11'.                               
0216.00  かんたんウィザード                  CRTDEVAUT        
0217.00 :EMENUGRP.                                            
0218.00 :MENUGRP. 作成                                        
0219.00 :MENUI   OPTION=23                                    
0220.00          ACTION='CMD ?WINDOWS/CRTDEVGDI'              
0221.00          HELP='OPTION11'.                             
0222.00 GDi 印刷装置の作成                  CRTDEVGDI         
0223.00 :MENUI   OPTION=24                                    
0224.00          ACTION='CMD ?WINDOWS/CRTDEVPDT'              
0225.00          HELP='OPTION11'.                             
0226.00 PDT 印刷装置の作成                  CRTDEVPDT         
0227.00 :MENUI   OPTION=25                                    
0228.00          ACTION='CMD ?WINDOWS/CRTDEVLPD'              
0229.00          HELP='OPTION11'.                             
0230.00 LPD 印刷装置の作成                  CRTDEVLPD         
0231.00 :EMENUGRP.                                            
0232.00 :MENUGRP. 変更                                        
0233.00 :MENUI   OPTION=26                                    
0234.00          ACTION='CMD ?WINDOWS/CHGDEVGDI'              
0235.00          HELP='OPTION11'.                             
0236.00 GDi 印刷装置の変更                  CHGDEVGDI         
0237.00 :MENUI   OPTION=27                                    
0238.00          ACTION='CMD ?WINDOWS/CHGDEVPDT'              
0239.00          HELP='OPTION11'.                             
0240.00 PDT 印刷装置の変更                  CHGDEVPDT    
0241.00 :MENUI   OPTION=28                               
0242.00          ACTION='CMD ?WINDOWS/CHGDEVLPD'         
0243.00          HELP='OPTION11'.                        
0244.00 LPD 印刷装置の変更                  CHGDEVLPD    
0245.00 :EMENUGRP.                                       
0246.00 :MENUGRP. 削除                                   
0247.00 :MENUI   OPTION=29                               
0248.00          ACTION='CMD ?WINDOWS/DLTDEVGDI'         
0249.00          HELP='OPTION11'.                        
0250.00 GDi 印刷装置の削除                  DLTDEVGDI    
0251.00 :MENUI   OPTION=30                               
0252.00          ACTION='CMD ?WINDOWS/DLTDEVPDT'         
0253.00          HELP='OPTION11'.                        
0254.00 PDT 印刷装置の削除                  DLTDEVPDT    
0255.00 :MENUI   OPTION=31                               
0256.00          ACTION='CMD ?WINDOWS/DLTDEVLPD'         
0257.00          HELP='OPTION11'.                        
0258.00 LPD 印刷装置の削除                  DLTDEVLPD    
0259.00 :EMENUGRP.                                       
0260.00 :MENUGRP. 表示                                   
0261.00 :MENUI   OPTION=32                               
0262.00          ACTION='CMD ?WINDOWS/DSPDEVGDI'         
0263.00          HELP='OPTION11'.                        
0264.00 GDi 印刷装置の表示                  DSPDEVGDI      
0265.00 :MENUI   OPTION=33                                 
0266.00          ACTION='CMD ?WINDOWS/DSPDEVPDT'           
0267.00          HELP='OPTION11'.                          
0268.00 PDT 印刷装置の表示                  DSPDEVPDT      
0269.00 :MENUI   OPTION=34                                 
0270.00          ACTION='CMD ?WINDOWS/DSPDEVLPD'           
0271.00          HELP='OPTION11'.                          
0272.00 LPD 印刷装置の表示                  DSPDEVLPD      
0273.00 :EMENUGRP.                                         
0274.00 :MENUGRP. 活動プリンターの開始と終了               
0275.00 :MENUI   OPTION=35                                 
0276.00          ACTION='CMD WINDOWS/WRKPRTWTR'            
0277.00          HELP='OPTION11'.                          
0278.00  活動プリンター処理                  WRKPRTWTR     
0279.00 :EMENUGRP.                                         
0280.00 :MENUGRP. 問題解決の手引き                         
0281.00 :MENUI   OPTION=41                                 
0282.00          ACTION='CMD ?STRWINLOG'                   
0283.00          HELP='OPTION01'.                          
0284.00 WINDOWS ライター・ログ開始          STRWINLOG      
0285.00 :MENUI   OPTION=42                                 
0286.00          ACTION='CMD ?ENDWINLOG'                   
0287.00          HELP='OPTION01'.                          
0288.00             終了          ENDWINLOG                   
0289.00 :MENUI   OPTION=43                                               
0290.00          ACTION='CMD WRKOUTQ WINUSRSYS/QEZJOBLOG'                
0291.00          HELP='OPTION01'.                                        
0292.00  ジョブ・ログの表示                  QEZJOBLOG                   
0293.00 :MENUI   OPTION=44                                               
0294.00          ACTION='CMD ?WINDOWS/CLRLOG CLRLOG(WINUSRSYS/QEZJOBLOG)'
0295.00          HELP='OPTION01'.                                        
0296.00         クリヤー              CLRLOG                      
0297.00 :MENUI   OPTION=45                                               
0298.00          ACTION='CMD ?WRKCFGSTS CFGTYPE(*DEV) CFGD(*PRT)'        
0299.00          HELP='OPTION01'.                                        
0300.00  構成状況処理                        WRKCFGSTS                   
0301.00 :EMENUGRP.                                                       
0302.00 :MENUGRP. 外字の登録                                             
0303.00 :MENUI   OPTION=51                                               
0304.00          ACTION='CMD ?WINDOWS/CRTIGCTBL'                         
0305.00          HELP='OPTION01'.                                        
0306.00  外字テーブルの作成                 CRTIGCTBL                    
0307.00 :EMENUGRP.                                                       
0308.00 :MENUGRP. ライセンス                                             
0309.00 :MENUI   OPTION=61                                               
0310.00          ACTION='CMD WINDOWS/DSPLIC OBJLIB(WINDOWS)'             
0311.00          HELP='OPTION01'.                                        
0312.00  ライセンスの確認                   DSPLIC            
0313.00 :EMENUGRP.                                            
0314.00 :MENUGRP. マニュアルの参照                            
0315.00 :MENUI   OPTION=71                                    
0316.00          ACTION='CMD  WINDOWS/WINUSERS'               
0317.00          HELP='OPTION01'.                             
0318.00  ユーザーズ・ガイド                 WINUSERS          
0319.00 :EMENUGRP.                                            
0320.00 :MENUGRP. 導入後のセットアップ                        
0321.00 :MENUI   OPTION=81                                    
0322.00          ACTION='CMD WINDOWS/SETUP '                  
0323.00          HELP='SETUPH'.                               
0324.00  導入後のセットアップ              SETUP              
0325.00 :EMENUGRP.                                            
0326.00 :EMENU.                                               
0327.00 .* STRCMDDFN      :  DO NOT REMOVE THIS LINE          
0328.00 :CMDLINE SIZE=LONG.                                   
0329.00  選択項目またはコマンド                               
0330.00 .* ENDCMDDFN      :  DO NOT REMOVE THIS LINE          
0331.00 :EPANEL.                                              
0332.00                                                       
0333.00 :EPNLGRP.                                             
0334.00 .*      * * *    END   OF   PANEL GROUP     * * *    


   

[コンパイル]

CRTPNLGRP OBJLIB/WINDOWS SRCFILE(MYSRCLIB/QMNUSRC) AUT(*ALL)

[解説]

このパネル・グループをCRTMNUコマンドで試しにコンパイルてみて欲しい。
CRTMNUでのコンパイルではCLASS定義やVAR定義、VARRCD定義などはことごとく
コンパイル・エラーとなるはずである。
*MENUをいきなり作成するCRTMNUではこれらのタグの使用は許されていない。
しかし今回はCRTPNLGRPでコンパイルするので正常にコンパイルできるはずである。

PANELを表示する

0157.00 :PANEL   NAME=DSPMNU   HELP='MENU'              
0158.00          KEYL=MNUKEYL                           
0159.00          PANELID=ZMENU                          
0160.00          ENTER='MSG CPD9817 QCPFMSG'            
0161.00          USREXIT='CALL UPDWINMOD'               
0162.00          TOPSEP=SYSNAM. 

でユーザー出口プログラムとして UPDWINMOD を定義していて
このプログラムが操作の都度パネル・グループの変数を更新する。
この出口プログラムのソースも紹介しておく。

[出口プログラムCLP:UPDWINMOD]

ソースはこちらから

0001.00              PGM        PARM(&RCVPRM)                                    
0002.00 /*-------------------------------------------------------------------*/  
0003.00 /*   UPDWINMOD:  WINDOWS メニューのモード更新                        */  
0004.00 /*                                                                   */  
0005.00 /*   2021/05/07  作成                                                */  
0006.00 /*-------------------------------------------------------------------*/  
0007.00              DCL        VAR(&RCVPRM)    TYPE(*CHAR) LEN(70)              
0008.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)                    
0009.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                   
0010.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                   
0011.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)                
0012.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)                
0013.00              DCL        VAR(&HANDLE) TYPE(*CHAR) LEN(8) /* +             
0014.00                            摘要業務ハンドル  */                          
0015.00              DCL        VAR(&LHANDL) TYPE(*CHAR) LEN(4) /* +             
0016.00                            リストハンドル  */                            
0017.00              DCL        VAR(&LSTHND) TYPE(*CHAR) LEN(4) /* +             
0018.00                            リストハンドル  */                            
0019.00              DCL        VAR(&LSTNAM) TYPE(*CHAR) LEN(10)                 
0020.00              DCL        VAR(&SFLLEN) TYPE(*CHAR) LEN(4) +                
0021.00                           VALUE(X'00000400') /* 2 進数  */               
0022.00              DCL        VAR(&LSTOPT) TYPE(*CHAR) LEN(4)                  
0023.00              DCL        VAR(&SLCHND) TYPE(*CHAR) LEN(4)                  
0024.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +         
0025.00                           VALUE(X'000074') /* 2 進数  */            
0026.00              DCL        VAR(&SFLDTA) TYPE(*CHAR) LEN(1024)          
0027.00              DCL        VAR(&ERR) TYPE(*CHAR) LEN(1)                
0028.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +         
0029.00                           VALUE('*ESCAPE   ')                       
0030.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +         
0031.00                           VALUE(X'000074') /* 2 進数  */            
0032.00              DCL        VAR(&DTALEN) TYPE(*CHAR) LEN(4) +           
0033.00                           VALUE(X'0000000E') /* 2 進数  */          
0034.00              DCL        VAR(&CURLOG) TYPE(*CHAR) LEN(4)             
0035.00              DCL        VAR(&DSPMODRCD) TYPE(*CHAR) LEN(14)         
0036.00              DCL        VAR(&DSPMOD) TYPE(*CHAR) LEN(12)            
0037.00              DCL        VAR(&WHTCLR) TYPE(*CHAR) LEN(1) VALUE(X'22')
0038.00              DCL        VAR(&ENDCLR) TYPE(*CHAR) LEN(1) VALUE(X'20')
0039.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))     
0040.00                                                                     
0041.00              CHGVAR     VAR(&HANDLE) VALUE(%SST(&RCVPRM 17 8))      
0042.00              CHGVAR     VAR(&LSTNAM) VALUE(%SST(&RCVPRM 35 10))     
0043.00              CHGVAR     VAR(&LHANDL) VALUE(%SST(&RCVPRM 45 4))      
0044.00                                                                     
0045.00       /*( オプション機能の実行 )*/                                  
0046.00 /*-------------------------------------------------------------*/   
0047.00 /* QUIPUTV  :  パネル・グループの変数を更新する                */   
0048.00 /*-------------------------------------------------------------*/     
0049.00              RTVDTAARA  DTAARA(WINDOWS/CLIENT (401 4)) RTNVAR(&CURLOG)
0050.00              IF         COND(&CURLOG *EQ '*ON ') THEN(DO)             
0051.00              CHGVAR     VAR(&DSPMO) VALUE(' ログ開始中 ')             
0052.00              ENDDO                                                    
0053.00              ELSE       CMD(DO)                                       
0054.00              CHGVAR     VAR(&DSPMOD) VALUE(' ログ停止  ')            
0055.00              ENDDO                                                    
0056.00              CHGVAR     VAR(%SST(&DSPMODRCD 1 1)) VALUE(&WHTCLR)      
0057.00              CALL       PGM(QUIPUTV) PARM(&HANDLE &DSPMODRCD &DTALEN +
0058.00                           'DSPMODRCD ' &APIERR)                       
0059.00              RETURN                                                   
0060.00                                                                       
0061.00  APIERR:                                                              
0062.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))          
0063.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))      
0064.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                
0065.00              CHGVAR     VAR(&MSGFLIB) VALUE('QSYS      ')             
0066.00              GOTO       SNDMSG                                        
0067.00                                                                       
0068.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +           
0069.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 
0070.00                           SNDMSGFLIB(&MSGFLIB)                        
0071.00  SNDMSG:                                                              
0072.00              IF         COND(&MSGID *EQ ' ') THEN(DO)               
0073.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 
0074.00                           TOMSGQ(*TOPGMQ) MSGTYPE(*ESCAPE)          
0075.00              ENDDO                                                  
0076.00              ELSE       CMD(DO)                                     
0077.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +        
0078.00                           MSGDTA(&MSGDTA) TOMSGQ(*TOPGMQ) +         
0079.00                           MSGTYPE(*ESCAPE)                          
0080.00              ENDDO                                                  
0081.00              ENDPGM  


                                                

[メニューを表示するCLP: WINDOWS ]

ソースはこちらから

0001.00              PGM        PARM(&MENU &MNULIB &RTNCOD)                     
0002.00 /*-------------------------------------------------------------------*/ 
0003.00 /*   WINDOWS     :  THE WINDOWS ライター・メニュー                   */ 
0004.00 /*                                                                   */ 
0005.00 /*   2021/05/06  作成                                                */ 
0006.00 /*-------------------------------------------------------------------*/ 
0007.00              DCL        VAR(&PNLGRP) TYPE(*CHAR) LEN(10)                
0008.00              DCL        VAR(&PNLPNLLIB) TYPE(*CHAR) LEN(10)             
0009.00              DCL        VAR(&PNLGRPLIB) TYPE(*CHAR) LEN(20) +           
0010.00                           VALUE('WINDOWS   WINDOWS   ')                 
0011.00              DCL        VAR(&MENU) TYPE(*CHAR) LEN(10)                  
0012.00              DCL        VAR(&MNULIB) TYPE(*CHAR) LEN(10)                
0013.00              DCL        VAR(&RTNCOD) TYPE(*CHAR) LEN(2) /* +            
0014.00                            戻りコード  */                               
0015.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                  
0016.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                  
0017.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                  
0018.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)               
0019.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)               
0020.00 /*( パネル・グループ表示のための変数 )*/                                
0021.00              DCL        VAR(&HANDLE) TYPE(*CHAR) LEN(8) /* +            
0022.00                            摘要業務ハンドル  */                         
0023.00              DCL        VAR(&HNDCHR) TYPE(*CHAR) LEN(24)                
0024.00              DCL        VAR(&FNCTON) TYPE(*CHAR) LEN(4) +              
0025.00                           VALUE(X'00000000') /* 2 進数  */             
0026.00              DCL        VAR(&PANEL) TYPE(*CHAR) LEN(10) +              
0027.00                           VALUE('DSPMNU    ')                          
0028.00              DCL        VAR(&AGAIN) TYPE(*CHAR) LEN(1) VALUE(Y)        
0029.00              DCL        VAR(&USRTSK) TYPE(*CHAR) LEN(1) VALUE(N)       
0030.00              DCL        VAR(&STACK) TYPE(*CHAR) LEN(4) +               
0031.00                           VALUE(X'00000001') /* 2 進数  */             
0032.00              DCL        VAR(&UIMMSG) TYPE(*CHAR) LEN(10) VALUE(*CALLER)
0033.00              DCL        VAR(&MSGKEY) TYPE(*CHAR) LEN(4)                
0034.00              DCL        VAR(&CSROPT) TYPE(*CHAR) LEN(1) VALUE(D)       
0035.00              DCL        VAR(&LASLST) TYPE(*CHAR) LEN(4) VALUE(NONE)    
0036.00              DCL        VAR(&ERRLST) TYPE(*CHAR) LEN(4)                
0037.00              DCL        VAR(&WAITTIME) TYPE(*CHAR) LEN(4) +            
0038.00                           VALUE(X'FFFFFFFF') /* 2 進数  */             
0039.00              DCL        VAR(&CF03) TYPE(*CHAR) LEN(4) +                
0040.00                           VALUE(X'FFFFFFFC') /* 2 進数  */             
0041.00              DCL        VAR(&CF05) TYPE(*CHAR) LEN(4) +                
0042.00                           VALUE(X'00000005') /* 2 進数  */             
0043.00              DCL        VAR(&CF06) TYPE(*CHAR) LEN(4) +                
0044.00                           VALUE(X'00000006') /* 2 進数  */             
0045.00              DCL        VAR(&CF10) TYPE(*CHAR) LEN(4) +                
0046.00                           VALUE(X'0000000A') /* 2 進数  */             
0047.00              DCL        VAR(&CF12) TYPE(*CHAR) LEN(4) +                
0048.00                           VALUE(X'FFFFFFF8') /* 2 進数  */            
0049.00              DCL        VAR(&CF13) TYPE(*CHAR) LEN(4) +               
0050.00                           VALUE(X'0000000D') /* 2 進数  */            
0051.00              DCL        VAR(&CF14) TYPE(*CHAR) LEN(4) +               
0052.00                           VALUE(X'0000000E') /* 2 進数  */            
0053.00              DCL        VAR(&CF15) TYPE(*CHAR) LEN(4) +               
0054.00                           VALUE(X'0000000F') /* 2 進数  */            
0055.00              DCL        VAR(&CF17) TYPE(*CHAR) LEN(4) +               
0056.00                           VALUE(X'00000011') /* 2 進数  */            
0057.00              DCL        VAR(&CF18) TYPE(*CHAR) LEN(4) +               
0058.00                           VALUE(X'00000012') /* 2 進数  */            
0059.00              DCL        VAR(&VARDTA) TYPE(*CHAR) LEN(1024)            
0060.00              DCL        VAR(&VARRCD)  TYPE(*CHAR) LEN(10)             
0061.00              DCL        VAR(&SQLRCD)  TYPE(*CHAR) LEN(10)             
0062.00              DCL        VAR(&CSRVAR) TYPE(*CHAR) LEN(10) +            
0063.00                           VALUE('OPT       ')                         
0064.00              DCL        VAR(&CSRPOS) TYPE(*CHAR) LEN(2) VALUE(X'0001')
0065.00              DCL        VAR(&CSRLST) TYPE(*CHAR) LEN(10) +            
0066.00                           VALUE('SFL       ')                         
0067.00              DCL        VAR(&CSRNAME) TYPE(*CHAR) LEN(10) +           
0068.00                           VALUE('          ')                         
0069.00              DCL        VAR(&AREA) TYPE(*CHAR) LEN(4) +               
0070.00                           VALUE(X'FFFFFFFF') /* 2 進数  */            
0071.00              DCL        VAR(&EXITPG) TYPE(*CHAR) LEN(4) +             
0072.00                           VALUE(X'00000000') /* 2 進数  */              
0073.00              DCL        VAR(&OPT) TYPE(*CHAR) LEN(2) VALUE(X'0000')     
0074.00              DCL        VAR(&DEC08) TYPE(*DEC) LEN(8 0)                 
0075.00              DCL        VAR(&PANELNAM) TYPE(*CHAR) LEN(10)              
0076.00              DCL        VAR(&NXTPNL) TYPE(*CHAR) LEN(10)                
0077.00              DCL        VAR(&BEFPNL) TYPE(*CHAR) LEN(10) VALUE('*NONE') 
0078.00              DCL        VAR(&B_EXTPGM) TYPE(*LGL) LEN(1) VALUE('0') +   
0079.00                           /* *PNLGRP */                                 
0080.00              DCL        VAR(&PGMINFO) TYPE(*CHAR) LEN(48)               
0081.00              DCL        VAR(&PGMBUFF) TYPE(*CHAR) LEN(48)               
0082.00              DCL        VAR(&USRDFN) TYPE(*CHAR) LEN(10)                
0083.00              DCL        VAR(&DTALEN) TYPE(*CHAR) LEN(4) +               
0084.00                           VALUE(X'00000014') /* 2 進数  */              
0085.00              DCL        VAR(&UPDWINMOD) TYPE(*CHAR) LEN(20) +           
0086.00                           VALUE('UPDWINMOD WINDOWS   ')                 
0087.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +             
0088.00                           VALUE(X'000074') /* 2 進数  */                
0089.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +                
0090.00                           VALUE(X'00000000')                            
0091.00              DCL        VAR(&SNDPRM) TYPE(*CHAR) LEN(70)                
0092.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))         
0093.00                                                                         
0094.00 /*( QUIOPNDA : パネル・グループのオープン )*/                           
0095.00 OPNPNL:      CALL       PGM(QUIOPNDA) PARM(&HANDLE &PNLGRPLIB &AREA +   
0096.00                           &EXITPG 'N' &APIERR)                           
0097.00              IF         COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO)      
0098.00              SNDPGMMSG  MSG('WINDOWS(1)API: +                            
0099.00                           QUIOPNDA の実行で次のエラーが発生しました。 +  
0100.00                           ') MSGTYPE(*DIAG)                              
0101.00              GOTO       APIERR                                           
0102.00              ENDDO                                                       
0103.00                                                                          
0104.00  /*( USREXITPGM を指定 )*/                                               
0105.00              CALL       PGM(QUIPUTV) PARM(&HANDLE &UPDWINMOD &DTALEN +   
0106.00                           'UPDMODRCD ' &APIERR)                          
0107.00  /*( 最初の DSPMOD を更新 )*/                                            
0108.00              CHGVAR     VAR(%SST(&SNDPRM 17 8)) VALUE(&HANDLE)           
0109.00              CALL       PGM(WINDOWS/UPDWINMOD) PARM(&SNDPRM)             
0110.00  /*-------------------------------------*/                               
0111.00  /*  QUIDSPP: パネルの表示              */                               
0112.00  /*-------------------------------------*/                               
0113.00  DSPLY:      CALL       PGM(QUIDSPP) PARM(&HANDLE &FNCTON &PANEL +       
0114.00                           &AGAIN &APIERR &USRTSK &STACK &UIMMSG +        
0115.00                           &MSGKEY &CSROPT &LASLST &ERRLST &WAITTIME)     
0116.00              IF         COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO)      
0117.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))             
0118.00              IF         COND(&MSGID *EQ 'CPF6A13') THEN(DO)              
0119.00              RETURN                                                      
0120.00              ENDDO                                                   
0121.00              ENDDO                                                   
0122.00 /*----------------------*/                                           
0123.00 /*       機能キー       */                                           
0124.00 /*----------------------*/                                           
0125.00       /*( CF03 )= 終了 */                                            
0126.00  CF03:       IF         COND(&FNCTON *EQ &CF03) THEN(DO)             
0127.00              CHGVAR     VAR(&RTNCOD) VALUE(X'FFFF') /*  終了要求  */ 
0128.00              GOTO       CLOSE                                        
0129.00              ENDDO                                                   
0130.00       /*( CF12 )= 取消し */                                          
0131.00  CF12:       IF         COND(&FNCTON *EQ &CF12) THEN(DO)             
0132.00              CHGVAR     VAR(&RTNCOD) VALUE(X'FFFF') /*  終了要求  */ 
0133.00              GOTO       CLOSE                                        
0134.00              ENDDO                                                   
0135.00                                                                      
0136.00 /*( 適用業務のクローズ )*/                                           
0137.00 CLOSE:                                                               
0138.00              CALL       PGM(QUICLOA) PARM(&HANDLE 'M' &APIERR)       
0139.00              RETURN                                                  
0140.00                                                                      
0141.00  APIERR:                                                             
0142.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))         
0143.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))     
0144.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                
0145.00              CHGVAR     VAR(&MSGFLIB) VALUE('QSYS      ')             
0146.00              GOTO       SNDMSG                                        
0147.00                                                                       
0148.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +           
0149.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 
0150.00                           MSGFLIB(&MSGFLIB)                           
0151.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)                 
0152.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +   
0153.00                           MSGTYPE(*ESCAPE)                            
0154.00              ENDDO                                                    
0155.00              ELSE       CMD(DO)                                       
0156.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +          
0157.00                           MSGDTA(&MSGDTA) TOMSGQ(*TOPGMQ) +           
0158.00                           MSGTYPE(*ESCAPE)                            
0159.00              ENDDO                                                    
0160.00              ENDPGM    


                                                 

[コンパイル]

CRTCLPGM OBJLIB/WINDOWS SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)

[メニューの作成]

CRTMNU MENU(WINDOWS/WINDOWS) TYPE(*PGM) PGM(OBJLIB/WINDOWS) AUT(*ALL)

[解説]

上記はパネル・グループを単にオープンして表示するだけのプログラムであり
これで十分である。

0107.00  /*( 最初の DSPMOD を更新 )*/                                            
0108.00              CHGVAR     VAR(%SST(&SNDPRM 17 8)) VALUE(&HANDLE)           
0109.00              CALL       PGM(WINDOWS/UPDWINMOD) PARM(&SNDPRM)

でメニュー画面の変数を最初に更新している。
CLPではCF03とCF12キーに対する記述しかしていないが他の機能キーの処理は
パネル・グループ内に記述されているしオプション選択の処理も
パネル・グループ内に記述されているのでここでは記述していなくても
メニューとして動作する。
これがパネル・グループを作成する利点でもある。

この方法でいったんパネル・グループとして作成してそれを*PGMタイプのメニューとして
CRTMNU で作成する方法であればどのような機能でもパネル・グループに組み込むことができ
CRTMNUでパネル・グループのソースを作成するときの文法エラーが発生することはない。

この方法であればパネル・グループによるメニューの機能を大幅に拡張することができる。
もちろんこのテクニックはIBMマニュアルのどこにも掲載されていない。
AS400-NET.COMだけのテクニックである。

目からウロコが落ちましたか?