($title_img_alt)

こちらからの投稿は、先頭に表示されているコメントへの返信になります。
RE:スプールファイル IKD さん [ 3月13日(木) 17時30分 ]
基本的には NG さんの言われるようにPF に変換して調べることに
なりますが API を使ってもよいというのであればと
いうことで調べてみました。

米国サイトでは下記のようなCLP でベージ・カウント・プログラムを作っている人が
いました。


http://iprodeveloper.com/rpg-programming/retrieve-spooled-file-page-count

PGM

     DCL VAR(&STRPAGE) TYPE(*DEC) LEN(5 0)
     DCL VAR(&ENDPAGE) TYPE(*DEC) LEN(5 0)

     OVRPRTF FILE(PRINTER) HOLD(*YES)
     CALL    PGM(<i>mylib/myrpgpgm</i>)
     DLTOVR  FILE(PRINTER)

 <font color="blue">    PAGCNT  COUNT(&ENDPAGE)
     CHGVAR  VAR(&STRPAGE) VALUE(&ENDPAGE - 1)

     CHGSPLFA FILE(PRINTER) SPLNBR(*LAST) +
              PAGERANGE(&STRPAGE &ENDPAGE)</font>

     RLSSPLF  FILE(PRINTER) SPLNBR(*LAST)

 ENDPGM


プログラムは

http://www.pentontech.com/IBMContent/Documents/article/55320_274_PagCnt.zip

からダウンロードできるとありました。
これをダウンロードして解凍したところ上記に含まれているCLPソースは次のとおりです。


---------------------------------------------------------------------------
----
PGM     PARM(&NUMPAGES)

    DCL VAR(&NUMPAGES)  TYPE(*DEC)  LEN(5 0)
    DCL VAR(&RCVVAR)    TYPE(*CHAR) LEN(2048)
    DCL VAR(&RCVVARLEN) TYPE(*CHAR) LEN(4)
    DCL VAR(&SPLFNAME)  TYPE(*CHAR) LEN(10)
    DCL VAR(&JOBNAME)   TYPE(*CHAR) LEN(26)
    DCL VAR(&SPLFNBR)   TYPE(*CHAR) LEN(4)
    DCL VAR(&PAGECHAR)  TYPE(*CHAR) LEN(4)

    CHGVAR VAR(%BIN(&RCVVARLEN)) VALUE(2048)

    /**********************************************************+
     * DETERMINE THE LAST SPOOLED FILE CREATED IN THIS JOB    *+
     **********************************************************/

    CALL PGM(QSPRILSP) PARM(&RCVVAR             +
                            &RCVVARLEN          +
                            'SPRL0100'          +
                            X'0000000000000000' )

    CHGVAR VAR(&SPLFNAME) VALUE(%SST(&RCVVAR  9 10))
    CHGVAR VAR(&JOBNAME)  VALUE(%SST(&RCVVAR 19 26))
    CHGVAR VAR(&SPLFNBR)  VALUE(%SST(&RCVVAR 45  4))


    /**********************************************************+
     * RETRIEVE THE SPOOLED FILE ATTRIBUTES                   *+
     **********************************************************/

    CALL PGM(QUSRSPLA) PARM(&RCVVAR             +
                            &RCVVARLEN          +
                            'SPLA0100'          +
                            &JOBNAME            +
                            ' '                 +
                            ' '                 +
                            &SPLFNAME           +
                            &SPLFNBR            +
                            X'0000000000000000' )

    CHGVAR VAR(&PAGECHAR) VALUE(%SST(&RCVVAR 141 4))
    CHGVAR VAR(&NUMPAGES) VALUE(%BIN(&PAGECHAR))

ENDPGM
---------------------------------------------------------------------------
----

[解説]
つまり スプール・ファイル名, ジョブ名, スプール番号がわかれば
API : QUSRSPLA だけで
    CALL PGM(QUSRSPLA) PARM(&RCVVAR             +
                            &RCVVARLEN          +
                            'SPLA0100'          +
                            &JOBNAME            +
                            ' '                 +
                            ' '                 +
                            &SPLFNAME           +
                            &SPLFNBR            +
                            X'0000000000000000' )

    CHGVAR VAR(&PAGECHAR) VALUE(%SST(&RCVVAR 141 4))
    CHGVAR VAR(&NUMPAGES) VALUE(%BIN(&PAGECHAR))

のようにすればページ数 &NUMPAGES が取得できるというものです。
意外と簡単ですね。


RE:スプールファイル【御礼】 NG さん [ 3月14日(金) 10時15分 ]
> 基本的には NG さんの言われるようにPF に変換して調べることに
> なりますが API を使ってもよいというのであればと
> いうことで調べてみました。
> 
> 米国サイトでは下記のようなCLP でベージ・カウント・プログラムを作っ
ている人が
> いました。
> 
> 
>
http://iprodeveloper.com/rpg-programming/retrieve-spooled-file-page-count
> 
> PGM
> 
>      DCL VAR(&STRPAGE) TYPE(*DEC) LEN(5 0)
>      DCL VAR(&ENDPAGE) TYPE(*DEC) LEN(5 0)
> 
>      OVRPRTF FILE(PRINTER) HOLD(*YES)
>      CALL    PGM(<i>mylib/myrpgpgm</i>)
>      DLTOVR  FILE(PRINTER)
> 
>  <font color="blue">    PAGCNT  COUNT(&ENDPAGE)
>      CHGVAR  VAR(&STRPAGE) VALUE(&ENDPAGE - 1)
> 
>      CHGSPLFA FILE(PRINTER) SPLNBR(*LAST) +
>               PAGERANGE(&STRPAGE &ENDPAGE)</font>
> 
>      RLSSPLF  FILE(PRINTER) SPLNBR(*LAST)
> 
>  ENDPGM
> 
> 
> プログラムは
> 
>
http://www.pentontech.com/IBMContent/Documents/article/55320_274_PagCnt.zip
> 
> からダウンロードできるとありました。
> これをダウンロードして解凍したところ上記に含まれているCLPソースは次
のとおりです。
> 
> 
>
---------------------------------------------------------------------------
> ----
> PGM     PARM(&NUMPAGES)
> 
>     DCL VAR(&NUMPAGES)  TYPE(*DEC)  LEN(5 0)
>     DCL VAR(&RCVVAR)    TYPE(*CHAR) LEN(2048)
>     DCL VAR(&RCVVARLEN) TYPE(*CHAR) LEN(4)
>     DCL VAR(&SPLFNAME)  TYPE(*CHAR) LEN(10)
>     DCL VAR(&JOBNAME)   TYPE(*CHAR) LEN(26)
>     DCL VAR(&SPLFNBR)   TYPE(*CHAR) LEN(4)
>     DCL VAR(&PAGECHAR)  TYPE(*CHAR) LEN(4)
> 
>     CHGVAR VAR(%BIN(&RCVVARLEN)) VALUE(2048)
> 
>     /**********************************************************+
>      * DETERMINE THE LAST SPOOLED FILE CREATED IN THIS
 JOB    *+
>      **********************************************************/
> 
>     CALL PGM(QSPRILSP) PARM(&RCVVAR             +
>                             &RCVVARLEN 
         +
>                             'SPRL0100' 
         +
>                             
X'0000000000000000' )
> 
>     CHGVAR VAR(&SPLFNAME) VALUE(%SST(&RCVVAR  9 10))
>     CHGVAR VAR(&JOBNAME)  VALUE(%SST(&RCVVAR 19 26))
>     CHGVAR VAR(&SPLFNBR)  VALUE(%SST(&RCVVAR 45  4))
> 
> 
>     /**********************************************************+
>      * RETRIEVE THE SPOOLED FILE ATTRIBUTES       
            *+
>      **********************************************************/
> 
>     CALL PGM(QUSRSPLA) PARM(&RCVVAR             +
>                             &RCVVARLEN 
         +
>                             'SPLA0100' 
         +
>                             &JOBNAME  
          +
>                             ' '    
             +
>                             ' '    
             +
>                             &SPLFNAME 
          +
>                             &SPLFNBR  
          +
>                             
X'0000000000000000' )
> 
>     CHGVAR VAR(&PAGECHAR) VALUE(%SST(&RCVVAR 141 4))
>     CHGVAR VAR(&NUMPAGES) VALUE(%BIN(&PAGECHAR))
> 
> ENDPGM
>
---------------------------------------------------------------------------
> ----
> 
> [解説]
> つまり スプール・ファイル名, ジョブ名, スプール番号がわかれば
> API : QUSRSPLA だけで
>     CALL PGM(QUSRSPLA) PARM(&RCVVAR             +
>                             &RCVVARLEN 
         +
>                             'SPLA0100' 
         +
>                             &JOBNAME  
          +
>                             ' '    
             +
>                             ' '    
             +
>                             &SPLFNAME 
          +
>                             &SPLFNBR  
          +
>                             
X'0000000000000000' )
> 
>     CHGVAR VAR(&PAGECHAR) VALUE(%SST(&RCVVAR 141 4))
>     CHGVAR VAR(&NUMPAGES) VALUE(%BIN(&PAGECHAR))
> 
> のようにすればページ数 &NUMPAGES が取得できるというものです。
> 意外と簡単ですね。
> 
> 
ありがとうございます。
なるほど・・うまくできました!!

お名前

パスワード

メールアドレス

タイトル

ホームページ

アドレス

項目