Tools

47. コマンドのためのヘルプを自動生成する CRTCMDHLP

コマンドを作成しても、それに対するヘルプも併せて入れておけば
そのコマンドを利用する人にとってよりわかりやすくなる。
しかしコマンドの F1-ヘルプとなるパネル・グループ(PNLGRP)は
利用している人も少ないし、ヘルプを作成の都度、どこかの
パネル・グループを探し出して挿入するのも面倒な話である。
第一、コマンドのパラメータをいちいち調べてパネル・グループに
記述していくのは面倒で面白くない作業である。
となればコマンドのヘルプを作成する機会というかモチベーションが
減ってしまうためにヘルプのないコマンドが社内に横行してしまうことになる。

そこでコマンド・ソースを読んでとりあえず簡単にヘルプ・ソースを生成してくれる
仕組みを作ったのでここで紹介しよう。
小さなプログラムであるが面倒がり屋にとっては重宝してヘルプを作ろうかと
いう気にさせてくれれば幸いである。

CRTCMDHLPの最後のパラメータとして「コマンドにヘルプを追加」とあるが
このパラメータを *YES にして実行すると既存のコマンドに、ここで作成した
ヘルプの記述を追加してくれるのである。
コマンドを再コンパイル必要もない。
したがってこの CRTCMDHLPを実行直後には、元のコマンドをF4キーで実行すると
F1キーを押すだけでもうこのヘルプが使えるというスグレモノである。

弊社でもCRTCMDHLPによってコマンドに対するヘルプの追加が大幅に進んだ。
ヘルプの追加には CRTCMDHLPは非常に役に立つ。
久しぶりに頻繁に使える便利な機能であり使えば使うほどに
便利であることを実感している。
CRTCMDHLP を使えばヘルプを作るのが楽しくなるほどである。
是非、社内用のコマンドにも CRTCMDHLP でヘルプを追加して頂きたい。

【コマンドのヘルプを作成するコマンド: CRTCMDHLP】
0001.00              CMD        PROMPT(' コマンド用ヘルプの作成 ')            
0002.00              PARM       KWD(CMD) TYPE(CMD) +                          
0003.00                           PROMPT(' コマンド ')                        
0004.00  CMD:        QUAL       TYPE(*NAME) LEN(10) SPCVAL((*NONE)) MIN(1)    
0005.00              QUAL       TYPE(*NAME) LEN(10) DFT(*LIBL) +              
0006.00                           SPCVAL((*LIBL)) PROMPT(' ライブラリー ')    
0007.00              PARM       KWD(SRCF) TYPE(SRCF) +                        
0008.00                           PROMPT(' ソース・ファイル ')                
0009.00  SRCF:       QUAL       TYPE(*NAME) LEN(10) DFT(QHLPSRC) EXPR(*YES)   
0010.00              QUAL       TYPE(*NAME) LEN(10) DFT(*LIBL) +              
0011.00                           SPCVAL((*LIBL) (*CURLIB)) +                 
0012.00                           PROMPT(' ライブラリー ')                    
0013.00              PARM       KWD(TOMBR) TYPE(*NAME) LEN(10) DFT(*CMD) +    
0014.00                           SPCVAL((*CMD)) +                            
0015.00                           PROMPT(' 出力 HELP ソース・メンバー ')      
0016.00              PARM       KWD(MBROPT) TYPE(*INT4) RSTD(*YES) DFT(*ADD) +
0017.00                           SPCVAL((*ADD 2) (*REPLACE 3)) EXPR(*YES) +  
0018.00                           PROMPT(' レコードの置き換えまたは追加 ')    
0019.00              PARM       KWD(CHGCMD) TYPE(*CHAR) LEN(4) RSTD(*YES) + 
0020.00                           DFT(*NO) VALUES(*YES *NO) +               
0021.00                           PROMPT(' コマンドにヘルプを追加 ')
【CRTCMDHLPC: CLPソース】
0001.00              PGM        PARM(&CMDOBJLIB &SRCFILLIB &TOMBR &MBROPT +     
0002.00                           &CHGCMD)                                      
0003.00 /*-------------------------------------------------------------------*/ 
0004.00 /*   CRTCMDHLPC :   コマンド用ヘルプの作成                           */ 
0005.00 /*                                                                   */ 
0006.00 /*   2016/06/24  作成                                                */ 
0007.00 /*-------------------------------------------------------------------*/ 
0008.00              DCL        VAR(&CMDOBJLIB) TYPE(*CHAR) LEN(20)             
0009.00              DCL        VAR(&CMD) TYPE(*CHAR) LEN(10)                   
0010.00              DCL        VAR(&OBJLIB) TYPE(*CHAR) LEN(10)                
0011.00              DCL        VAR(&SRCFILLIB) TYPE(*CHAR) LEN(20)             
0012.00              DCL        VAR(&SRCF) TYPE(*CHAR) LEN(10)                  
0013.00              DCL        VAR(&SRCFLIB) TYPE(*CHAR) LEN(10)               
0014.00              DCL        VAR(&SRCMBR) TYPE(*CHAR) LEN(10)                
0015.00              DCL        VAR(&TOSRCF) TYPE(*CHAR) LEN(10)                
0016.00              DCL        VAR(&TOSRCLIB) TYPE(*CHAR) LEN(10)              
0017.00              DCL        VAR(&TOMBR) TYPE(*CHAR) LEN(10)                 
0018.00              DCL        VAR(&TEXT) TYPE(*CHAR) LEN(50)                  
0019.00              DCL        VAR(&MBROPT) TYPE(*INT) LEN(4)                  
0020.00              DCL        VAR(&REPLACE) TYPE(*CHAR) LEN(8)                
0021.00              DCL        VAR(&CHGCMD) TYPE(*CHAR) LEN(4)               
0022.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                
0023.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                
0024.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                
0025.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)             
0026.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)             
0027.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +           
0028.00                           VALUE('*ESCAPE   ')                         
0029.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                 
0030.00              DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)              
0031.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +           
0032.00                           VALUE(X'000074') /* 2 進数  */              
0033.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +              
0034.00                           VALUE(X'00000000')                          
0035.00              DCL        VAR(&ERRLVL) TYPE(*DEC) LEN(2 0)              
0036.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))       
0037.00                                                                       
0038.00  /* 環境の取得 */                                                     
0039.00              RTVJOBA    TYPE(&TYPE)                                   
0040.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */   
0041.00              CHGVAR     VAR(&TOPGMQ) VALUE('*SYSOPR   ')              
0042.00              ENDDO      /*  バッチ  */                               
0043.00              ELSE       CMD(DO) /*  対話式  */                       
0044.00              CHGVAR     VAR(&TOPGMQ) VALUE('*TOPGMQ   ')             
0045.00              ENDDO      /*  対話式  */                               
0046.00                                                                      
0047.00 /* パラメータの取得 */                                               
0048.00              CHGVAR     VAR(&CMD) VALUE(%SST(&CMDOBJLIB 01 10))      
0049.00              CHGVAR     VAR(&OBJLIB) VALUE(%SST(&CMDOBJLIB 11 10))   
0050.00              CHGVAR     VAR(&TOSRCF) VALUE(%SST(&SRCFILLIB 01 10))   
0051.00              CHGVAR     VAR(&TOSRCLIB) VALUE(%SST(&SRCFILLIB 11 10)) 
0052.00              IF         COND(&TOMBR *EQ '*CMD      ') THEN(DO)       
0053.00              CHGVAR     VAR(&TOMBR) VALUE(&CMD *TCAT 'H')            
0054.00              ENDDO                                                   
0055.00              IF         COND(&MBROPT *EQ 3) THEN(DO)                 
0056.00              CHGVAR     VAR(&REPLACE) VALUE('*REPLACE')              
0057.00              ENDDO                                                   
0058.00              ELSE       CMD(DO)                                      
0059.00              CHGVAR     VAR(&REPLACE) VALUE('*ADD    ')              
0060.00              ENDDO                                                   
0061.00                                                                      
0062.00 /*( CMD ソースの取得 )*/                                             
0063.00              RTVOBJD    OBJ(&OBJLIB/&CMD) OBJTYPE(*CMD) +               
0064.00                           RTNLIB(&OBJLIB) TEXT(&TEXT) SRCF(&SRCF) +     
0065.00                           SRCFLIB(&SRCFLIB) SRCMBR(&SRCMBR)             
0066.00              MONMSG     MSGID(CPF9800) EXEC(DO)                         
0067.00              GOTO       ERROR                                           
0068.00              ENDDO                                                      
0069.00                                                                         
0070.00 /*( 出力ソース・ファイルの検討 )*/                                      
0071.00              CHKOBJ     OBJ(&TOSRCLIB/&TOSRCF) OBJTYPE(*FILE)           
0072.00              MONMSG     MSGID(CPF9800) EXEC(DO)                         
0073.00              GOTO       ERROR                                           
0074.00              ENDDO                                                      
0075.00              CHKOBJ     OBJ(&TOSRCLIB/&TOSRCF) OBJTYPE(*FILE) +         
0076.00                           MBR(&TOMBR)                                   
0077.00              MONMSG     MSGID(CPF9800) EXEC(DO)                         
0078.00              ADDPFM     FILE(&TOSRCLIB/&TOSRCF) MBR(&TOMBR) TEXT(&TEXT) 
0079.00              GOTO       CLRPFM                                          
0080.00              ENDDO                                                      
0081.00              IF         COND(&REPLACE *EQ '*ADD    ') THEN(DO)          
0082.00              CHGVAR     VAR(&MSG) VALUE(' メンバー ' *CAT &TOMBR +      
0083.00                           *TCAT ' は既に存在しています。 ')             
0084.00              GOTO       SNDMSG                                        
0085.00              ENDDO                                                    
0086.00  CLRPFM:     CLRPFM     FILE(&TOSRCLIB/&TOSRCF) MBR(&TOMBR)           
0087.00              CHGPFM     FILE(&TOSRCLIB/&TOSRCF) MBR(&TOMBR) +         
0088.00                           SRCTYPE(HELP) TEXT(&TEXT)                   
0089.00                                                                       
0090.00 /*( HELP ソースの作成 )*/                                             
0091.00              OVRDBF     FILE(QCMDSRC) TOFILE(&SRCFLIB/&SRCF) +        
0092.00                           MBR(&SRCMBR) SECURE(*YES) OVRSCOPE(*JOB)    
0093.00              OVRDBF     FILE(QPNLSRC) TOFILE(&TOSRCLIB/&TOSRCF) +     
0094.00                           MBR(&TOMBR) SECURE(*YES) OVRSCOPE(*JOB)     
0095.00              CALL       PGM(QUATTRO/CRTCMDHLP) PARM(&CMD &TOMBR &MSG +
0096.00                           &ERRLVL)                                    
0097.00              DLTOVR     FILE(QCMDSRC QPNLSRC) LVL(*JOB)               
0098.00              IF         COND(&ERRLVL *EQ 0) THEN(DO)                  
0099.00              CHGVAR     VAR(&MSGTYPE) VALUE('*DIAG     ')             
0100.00              ENDDO                                                    
0101.00                                                                       
0102.00 /*( CMD の変更 )*/                                                    
0103.00              IF         COND(&CHGCMD *EQ '*YES') THEN(DO)             
0104.00              CRTPNLGRP  PNLGRP(&OBJLIB/&TOMBR) +                      
0105.00                           SRCFILE(&TOSRCLIB/&TOSRCF) +                  
0106.00                           SRCMBR(*PNLGRP) AUT(*ALL)                     
0107.00              CHGCMD     CMD(&OBJLIB/&CMD) HLPPNLGRP(&OBJLIB/&TOMBR) +   
0108.00                           HLPID(&CMD)                                   
0109.00              GOTO       ERROR                                           
0110.00              ENDDO                                                      
0111.00                                                                         
0112.00              ENDDO                                                      
0113.00              GOTO       SNDMSG                                          
0114.00                                                                         
0115.00  APIERR:                                                                
0116.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))            
0117.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))        
0118.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                  
0119.00              CHGVAR     VAR(&MSGFLIB) VALUE('QSYS      ')               
0120.00              GOTO       SNDMSG                                          
0121.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +             
0122.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +   
0123.00                           MSGFLIB(&MSGFLIB)                             
0124.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)                   
0125.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +     
0126.00                           TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)   
0127.00              ENDDO                                            
0128.00              ELSE       CMD(DO)                               
0129.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +  
0130.00                           MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +   
0131.00                           MSGTYPE(&MSGTYPE)                   
0132.00              ENDDO                                            
0133.00              ENDPGM
【CRTCMDHLP : RPGソース】
0001.00 H DFTNAME(CRTCMDHLP) DEBUG DATEDIT(*YMD/)                               
0002.00 F******** コマンド用ヘルプの作成  ************************************* 
0003.00 FQCMDSRC   IF   F   92        DISK    USROPN                            
0004.00 F                                     INFDS(INFDS)                      
0005.00 FQPNLSRC   O    F   92        DISK                                      
0006.00 F********************************************************************** 
0007.00                                                                         
0008.00  * CRTBNDRPG ASNET.COM/CRTCMDHLP SRCFILE(R610SRC/QRPGLESRC)             
0009.00  *   DFTACTGRP(*NO) ACTGRP(*NEW) AUT(*ALL)                              
0010.00                                                                         
0011.00 D AR              S              1    DIM(256)                          
0012.00 D PNR             S             80    DIM(18) CTDATA PERRCD(1)          
0013.00 D PN              S              4S 0                                   
0014.00 D TITLE           S             50A                                     
0015.00 D PROMPT          S             50A                                     
0016.00 D KWD             S             12A                                     
0017.00 D N               S              4S 0                                   
0018.00 D M               S              4S 0                                   
0019.00 D LEN             S              4S 0                                   
0020.00 D L               S              4S 0                                   
0021.00 D HEAD            S             80A                                 
0022.00 D TRAIL           S             80A                                 
0023.00 D FRMSTR          S             50A                                 
0024.00 D TOSTR           S             50A                                 
0025.00 D CMPMSG          C                   CONST(' を作成しました。 ')   
0026.00                                                                     
0027.00 D*( ファイル情報データ構造 )                                        
0028.00 D INFDS           DS                                                
0029.00 D  FILREC               156    159B 0                               
0030.00 D  CCSID#               218    219I 0                               
0031.00 D  BRRN                 397    400B 0                               
0032.00                                                                     
0033.00 D*( WORK 日付 YYMMDD ゴーn 構造  )                                   
0034.00 D DATEDS          DS                                                
0035.00 D  CENTURY                1      2  0                               
0036.00 D  YYMMDD                 3      8  0                               
0037.00 D  YY                     3      4                                  
0038.00 D  MM                     5      6                                  
0039.00 D  DD                     7      8                                  
0040.00 D  CYY                    1      4                                  
0041.00 D  CYMD                   1      8  0                               
0042.00                                                                     
0043.00 D*( WORK 日付 TIME ゴーn 構造  )                                     
0044.00 D TIMEDS          DS                                                
0045.00 D  HOUR                   1      2                                  
0046.00 D  MINUTE                 3      4                                  
0047.00 D  SECOND                 5      6                                  
0048.00 D  TIME6                  1      6  0                               
0049.00                                                                     
0050.00 IQCMDSRC   AA  01                                                   
0051.00 I                                  1   92  SRCDTA                   
0052.00 I                                  1    6  SRCNOA                   
0053.00 I                                 19   19  AST                      
0054.00 I                                 20   20  NOT#                     
0055.00 I                                 13   92  CMPSRC                   
0056.00 C*----------------------------------------------------+             
0057.00 C     *ENTRY        PLIST                                           
0058.00 C                   PARM                    CMD              10     
0059.00 C                   PARM                    TOMBR            10     
0060.00 C                   PARM                    ERRMSG          132     
0061.00 C                   PARM                    SEV               2 0   
0062.00 C*----------------------------------------------------+             
0063.00 C                   OPEN      QCMDSRC                                   
0064.00 C                   DO        *HIVAL                                    
0065.00 C                   SETOFF                                       50     
0066.00 C                   READ      QCMDSRC                                50 
0067.00 C   50              LEAVE                                               
0068.00 C*( PROMPT )                                                            
0069.00 C     'PROMPT('     SCAN      SRCDTA:1      N                        50 
0070.00 C     *IN50         IFEQ      *ON                                       
0071.00 C     TITLE         IFEQ      *BLANKS                                   
0072.00 C                   EXSR      TITLE_                                    
0073.00 C                   ELSE                                                
0074.00 C                   EXSR      PROMPT_                                   
0075.00 C                   ENDIF                                               
0076.00 C                   ENDIF                                               
0077.00 C*( PARM )                                                              
0078.00 C     'PARM '       SCAN      SRCDTA:1      N                        50 
0079.00 C     *IN50         IFEQ      *ON                                       
0080.00 C                   EXSR      PARM_                                     
0081.00 C                   ENDIF                                               
0082.00 C*                                                                      
0083.00 C                   ENDDO                                               
0084.00 C                   CLOSE     QCMDSRC                                 
0085.00 C                   EVAL      ERRMSG = %TRIMR(TOMBR) + CMPMSG         
0086.00 C                   SETON                                        LR   
0087.00 C                   RETURN                                            
0088.00 C******************************************************               
0089.00 C     *INZSR        BEGSR                                             
0090.00 C******************************************************               
0091.00 C*  初期 CYCLE のみの実行                                             
0092.00 C                   Z-ADD     0             SEV                       
0093.00 C                   BITOFF    '06'          QUOT              1       
0094.00 C                   BITON     '123457'      QUOT              1       
0095.00 C                   Z-ADD     20            CENTURY                   
0096.00 C                   MOVE      UDATE         YYMMDD                    
0097.00 C                   Z-ADD     1             SRCNO             6 2     
0098.00 C                   ENDSR                                             
0099.00 C******************************************************               
0100.00 C     TITLE_        BEGSR                                             
0101.00 C******************************************************               
0102.00 C                   MOVEA(P)  SRCDTA        AR                        
0103.00 C                   ADD       8             N                         
0104.00 C                   MOVEA(P)  AR(N)         TITLE                     
0105.00 C                   MOVEA(P)  TITLE         AR                          
0106.00 C     QUOT          SCAN      TITLE:1       N                        50 
0107.00 C     *IN50         IFEQ      *ON                                       
0108.00 C                   MOVEA     *BLANKS       AR(N)                       
0109.00 C                   MOVEA(P)  AR            TITLE                       
0110.00 C                   ENDIF                                               
0111.00 C*( PNLGRP を出力する )                                                 
0112.00 C     1             DO        10            N                           
0113.00 C                   MOVE      PNR(N)        PNLSRC           92         
0114.00 C                   EXSR      CHECK                                     
0115.00 C                   EXSR      OUTPUT                                    
0116.00 C                   ENDDO                                               
0117.00 C                   ENDSR                                               
0118.00 C******************************************************                 
0119.00 C     PROMPT_       BEGSR                                               
0120.00 C******************************************************                 
0121.00 C                   MOVEA(P)  SRCDTA        AR                          
0122.00 C                   ADD       8             N                           
0123.00 C                   MOVEA(P)  AR(N)         PROMPT                      
0124.00 C                   MOVEA(P)  PROMPT        AR                          
0125.00 C     QUOT          SCAN      PROMPT:1      N                        50 
0126.00 C     *IN50         IFEQ      *ON                                      
0127.00 C                   MOVEA     *BLANKS       AR(N)                      
0128.00 C                   MOVEA(P)  AR            PROMPT                     
0129.00 C                   ENDIF                                              
0130.00 C*( PNLGRP を出力する )                                                
0131.00 C     11            DO        18            N                          
0132.00 C                   MOVE      PNR(N)        PNLSRC           92        
0133.00 C                   EXSR      CHECK                                    
0134.00 C                   EXSR      OUTPUT                                   
0135.00 C                   ENDDO                                              
0136.00 C                   ENDSR                                              
0137.00 C******************************************************                
0138.00 C     PARM_         BEGSR                                              
0139.00 C******************************************************                
0140.00 C     'KWD('        SCAN      SRCDTA:1      N                        50
0141.00 C     *IN50         IFEQ      *ON                                      
0142.00 C                   MOVEA     SRCDTA        AR                         
0143.00 C                   ADD       4             N                          
0144.00 C                   MOVEA     AR(N)         KWD                        
0145.00 C                   MOVEA(P)  KWD           AR                         
0146.00 C     ')'           SCAN      KWD:1         N                        50
0147.00 C     *IN50         IFEQ      *ON                                       
0148.00 C                   MOVEA     KWD           AR                          
0149.00 C                   MOVEA     *BLANKS       AR(N)                       
0150.00 C                   MOVEA     AR            KWD                         
0151.00 C                   ENDIF                                               
0152.00 C                   ENDIF                                               
0153.00 C                   ENDSR                                               
0154.00 C******************************************************                 
0155.00 C     CHECK         BEGSR                                               
0156.00 C******************************************************                 
0157.00 C*( TITLE )                                                             
0158.00 C     '<TITLE>'     SCAN      PNLSRC:1      M                        50 
0159.00 C     *IN50         IFEQ      *ON                                       
0160.00 C                   MOVEL(P)  '<TITLE>'     FRMSTR                      
0161.00 C                   MOVEL(P)  TITLE         TOSTR                       
0162.00 C                   EXSR      CONVERT                                   
0163.00 C                   ENDIF                                               
0164.00 C*( CMD )                                                               
0165.00 C     '<CMD>'       SCAN      PNLSRC:1      M                        50 
0166.00 C     *IN50         IFEQ      *ON                                       
0167.00 C                   MOVEL(P)  '<CMD>'       FRMSTR                      
0168.00 C                   MOVEL(P)  CMD           TOSTR                       
0169.00 C                   EXSR      CONVERT                                   
0170.00 C                   ENDIF                                               
0171.00 C*( KWD )                                                               
0172.00 C     '<KWD>'       SCAN      PNLSRC:1      M                        50 
0173.00 C     *IN50         IFEQ      *ON                                       
0174.00 C                   MOVEL(P)  '<KWD>'       FRMSTR                      
0175.00 C                   MOVEL(P)  KWD           TOSTR                       
0176.00 C                   EXSR      CONVERT                                   
0177.00 C                   ENDIF                                               
0178.00 C*( PROMPT )                                                            
0179.00 C     '<PROMPT>'    SCAN      PNLSRC:1      M                        50 
0180.00 C     *IN50         IFEQ      *ON                                       
0181.00 C                   MOVEL(P)  '<PROMPT>'    FRMSTR                      
0182.00 C                   MOVEL(P)  PROMPT        TOSTR                       
0183.00 C                   EXSR      CONVERT                                   
0184.00 C                   ENDIF                                               
0185.00 C                   ENDSR                                               
0186.00 C******************************************************                 
0187.00 C     CONVERT       BEGSR                                               
0188.00 C******************************************************                 
0189.00 C     M             SUB       1             LEN            
0190.00 C     LEN           SUBST(P)  PNLSRC:1      HEAD           
0191.00 C     ' '           CHECKR    FRMSTR        L              
0192.00 C                   EVAL      M = LEN + L + 1              
0193.00 C                   MOVEA(P)  PNLSRC        AR             
0194.00 C                   MOVEA(P)  AR(M)         TRAIL          
0195.00  /FREE                                                     
0196.00      PNLSRC = %TRIMR(HEAD) + %TRIMR(TOSTR) + TRAIL;        
0197.00  /END-FREE                                                 
0198.00 C                   ENDSR                                  
0199.00 C******************************************************    
0200.00 C     OUTPUT        BEGSR                                  
0201.00 C******************************************************    
0202.00 C*-------------------------------------------------------- 
0203.00 C                   EXCEPT    @OUTPUT                      
0204.00 C*-------------------------------------------------------- 
0205.00 C                   ADD       1             SRCNO          
0206.00 C                   ENDSR                                  
0207.00 OQPNLSRC   E            @OUTPUT                            
0208.00 O                       PNLSRC              92             
0209.00 O                       SRCNO                6             
**      PNR -- 以下は配列  --          
:PNLGRP HLPSHELF=LIST.                 
.*            -------------------------
.*                 ヘルプの定義        
.*            -------------------------
:HELP    NAME=<CMD>.<TITLE>            
:P.                                    
:PC.                                   
:PC.< ここに全体の説明を入れる >       
:PC.                                   
:EHELP.                                
:HELP NAME='<CMD>/<KWD>'.<PROMPT>      
:XH3.<PROMPT>                          
:P.                                    
:PC.                                   
:PC.< ここにこの項目の説明を入れる >   
:PC.                                   
:EHELP.                                
:EPNLGRP.
【解説】

いくつか改良もしているので最新のソースは 上記のURLで弊社サイトに接続して
確認してほしい。
繰り返しになるがコマンドのヘルプを作成するのにこのように便利な機能はない。
ぜひ導入して実感してほしい。