Gestion personalisée de spoules AS400

Ce document ne décrit pas une application complète, mais une gestion personalisée de spoules avec des fonctions minimales d'affichage et de copie vers un fichier.

En pratique, une gestion personalisée de spoules sert à offrir aux utilisateurs un accès personalisé -et en général restreint- à leurs états, ou pour alimenter un outil d'archivage.

WRKSPL : commande de lancement

Cette commande est calquée sur WRKSPLF

             CMD        PROMPT('Traitement de spoules')

   /* crtcmd WRKSPL pgm(WRKSPL1) hlppnlgrp(WRKSPLH) hlpid(*CMD)   */

             PARM       KWD(USER) TYPE(*SNAME) LEN(10) DFT(*CURRENT) +
                          SPCVAL((*CURRENT) (*ALL)) PROMPT('Utilisateur')
             PARM       KWD(OUTQ) TYPE(OUTQ) PROMPT('File d''attente +
                          de sortie')
             PARM       KWD(FORM) TYPE(*CHAR) LEN(10) DFT(*ALL) +
                          PROMPT('Type de formulaire')
             PARM       KWD(USRDTA) TYPE(*CHAR) LEN(10) DFT(*ALL) +
                          PROMPT('Infos utilisateur')
 OUTQ:       QUAL       TYPE(*NAME) LEN(10) DFT(*ALL) SPCVAL((*ALL))
             QUAL       TYPE(*NAME) LEN(10) SPCVAL((*LIBL) (*CURLIB) +
                          ('          ')) PROMPT('bibliothèque')

WRKSPLH : panneau d'aide (type PNLGRP)

A compiler par option 14.
:PNLGRP.

:HELP NAME='WRKSPL'.Gestion de Spoules.
:p.Cette commande est potentiellement équivalente à :pk.WRKSPLF.:epk.
Elle met à disposition les informations relatives à une liste de spoules.
:pc.Le traitement des options est réalisé par un programme utilisateur
adaptable.
:p.Les options de copie sont définies dans un écran accessible par la touche
de fonction :pk.F15=Options Copie.:epk.
:p.:pk.ATTENTION ::epk. avant d'utiliser cette commande, vous devez créer
:pk.dans votre bibliothèque:epk. (pas dans une bibliothèque système) :
:pc.* une dataarea :pk.WRKSPLDFT:epk. pour vos options de copie par défaut,
taille 100.
:pc.* un fichier physique multimembre :pk.CPYSPL:epk. (ou autre nom), taille
132 ou 198, pour contenir les copies de spoules
:pc.* renseigner les valeurs de copie par défaut (F15 sur liste)
:EHELP.

:HELP NAME='WRKSPL/USER'.Utilisateur. - Aide.
:XH2.Utilisateur
:P.Saisir un nom d'utilisateur à sélectionner, ou :pk def.*CURRENT.:epk.
:EHELP.
:HELP NAME='WRKSPL/OUTQ'.File d'attente. - Aide.
:XH2.File d'attente
:P.Entrer le nom d'une file d'attente à sélectionner, ou :pk def.*ALL.:epk.
:EHELP.
:HELP NAME='WRKSPL/FORM'.Formulaire. - Aide.
:XH2.Type de formulaire
:P.Entrer le type de de formulaire à sélectionner,
ou :pk def.*ALL:epk..
:EHELP.
:HELP NAME='WRKSPL/USRDTA'.Infos utilisateur - Aide.
:XH2.Infos utilisateur
:P.Saisir le texte d'information outilisateur à sélectionner,
ou :pk def.*ALL:epk..
:EHELP.

:EPNLGRP.

WRKSPLFM : écran de liste

Certaines options affichées à l'écran (dossiers) ne sont pas gérées.

     A                                      DSPSIZ(24 80 *DS3)
     A                                      PRINT
     A                                      INDARA
     A                                      CA03(03)
     A                                      CF05(05)
     A                                      CF12(12)
     A                                      CF15(15)
     A* Standard Message subfile
     A          R MSGS                      SFL
     A                                      SFLMSGRCD(24)
     A            MSGKEY                    SFLMSGKEY
     A            PGMNAM                    SFLPGMQ
     A*
     A          R MSGC                      SFLCTL(MSGS)
     A                                      SFLSIZ(2)
     A                                      SFLPAG(1)
     A                                      OVERLAY
     A                                      SFLDSP
     A                                      SFLDSPCTL
     A                                      SFLINZ
     A N34                                  SFLEND
     A            PGMNAM                    SFLPGMQ
     A*
     A          R F1
     A*
     A                                  1  6'WRKSPL'
     A                                  1 20'Traitement de Spoules'
     A                                      DSPATR(HI)
     A                                  1 69DATE
     A                                      EDTCDE(Y)
     A                                  3  5'3=copier'
     A                                  3 17'5=Afficher'
     A                                  5  3'Opt'
     A                                      DSPATR(HI)
     A                                  5  7'Fichier'
     A                                      DSPATR(HI)
     A                                  5 27'Travail'
     A                                      DSPATR(HI)
     A                                  5 58'Pages'
     A                                      DSPATR(HI)
     A                                  5 64'Impr.'
     A                                      DSPATR(HI)
     A                                  5 70'File'
     A                                      DSPATR(HI)
     A          R F1S                       SFL
     A*
     A  39                                  SFLNXTCHG
     A            SCSPNM        10   H
     A            SCUDTA        10   H
     A            SCJBNM        10   H
     A            SCJBNB         6   H
     A            SCUSR         10   H
     A            S1SPNB         5  0H
     A            S1OPT          1   B  6  4
     A  40                                  DSPATR(PC)
     A  40                                  DSPATR(RI)
     A            S1SPL         19   O  6  7
     A            S1JOB         30   O  6 27
     A            S1PAGE         5  0O  6 58EDTCDE(4)
     A            S1PGPR         5  0O  6 64EDTCDE(4)
     A            S1OUTQ        10   O  6 70
     A          R F1C                       SFLCTL(F1S)
     A*
     A N35                                  ROLLUP(25)
     A                                      BLINK
     A                                      CSRLOC(C1LIN      C1COL)
     A                                      OVERLAY
     A  32                                  SFLDSP
     A  33                                  SFLDSPCTL
     A  34                                  SFLCLR
     A  35                                  SFLEND(*MORE)
     A                                      SFLSIZ(0015)
     A                                      SFLPAG(0014)
     A            RNB1           4S 0H      SFLRCDNBR
     A            C1LIN          3S 0H
     A            C1COL          3S 0H
     A                                 22  4'F3=Exit'
     A                                 22 14'F5=Réafficher'
     A                                 22 30'F12=Retour'
     A                                 22 43'F15=Options Copie'
     A                                 22 63'F21=Print List'
     A          R F2
     A*
     A                                      CHANGE(25)
     A                                  1  6'WRKSPL'
     A                                  1 20'Options de copie'
     A                                      DSPATR(HI)
     A                                  1 69DATE
     A                                      EDTCDE(Y)
     A                                  4  6'Copie vers Membre . . . . .'
     A            F1MBR         10A  B  4 34
     A                                  4 51'Nom, *SPL, *USRDTA'
     A                                  5  8'Fichier . . . . . . . . .'
     A            F1SRC         10A  B  5 37
     A                                  5 51'Nom'
     A                                  6 10'Bibliothèque. . . . . .'
     A            F1LIB         10A  B  6 39
     A                                  6 51'Nom'
     A                                  8  6'Option de copie . . . . . .'
     A            F1OPTM         8   B  8 34
     A                                  8 51'*ADD, *REPLACE'
     A                                  9  6'Confirmer la demande. . . .'
     A            F1CONM         1   B  9 34
     A                                  9 51'O=Oui, N=Non'
     A                                 12  6'Copie vers dossier PC . . .'
     A            F1DOSS        30   B 12 34
     A                                 13  8'Dans le document. . . . .'
     A            F1DOCU        12   B 13 37
     A                                 13 51'Nom, *FROMMBR'
     A                                 15  6'Remplacer document existant'
     A            F1RPLD         1   B 15 34
     A                                 15 51'O=Oui, N=Non'
     A                                 16  6'Confirmer la demande. . . .'
     A            F1COND         1   B 16 34
     A                                 16 51'O=Oui, N=Non'
     A                                 22  4'F3=Exit'
     A                                 22 14'F12=Return'

WRKSPL1 : programme principal de gestion

Ce programme est basé sur les API.

     H*------------------------------------------------------------
     H* Traitement de spoules     (1ère version, test)
     H*  - création / suppression de User Space
     H*  - affichage de liste
     H*  - appel de programme de traitement d'options
     H*  - écran de définition des options
     H*  Voir System Programmer's Interface Ref, V2R2, A1.
     H*                               Patrick LARREYA, 1995-2000
     H*------------------------------------------------------------
     FWRKSPLFMCF  E                    WORKSTN
     F                                              KINFDS ECRDS
     F                                        C1RN  KSFILE F1S
     E                    TZA         5  1               Alpha 5
     I*  Data structure to retrieve cursor location
     IECRDS       DS
     I                                    B 370 3710D1CURS
     I                                    B 378 3790D1RRN1
     I           SDS
     I                                        1  10 PGMNAM
     I                                      244 253 WS
     I                                      254 263 USER
     I            DS
     I                                        1  120TIMHR
     I                                        1   60H1TIME
     I                                        7  120H1DATE
     I* Options de copie par défaut
     IDEFAUT      DS                            100
     I                                        1  10 F1MBR
     I                                       11  20 F1SRC
     I                                       21  30 F1LIB
     I                                       31  38 F1OPTM
     I                                       39  39 F1CONM
     I                                       40  69 F1DOSS
     I                                       70  81 F1DOCU
     I                                       82  82 F1RPLD
     I                                       83  83 F1COND
     I* Compteurs binaires sur récup caractéristiques User Space
     I            DS
     I                                    B   1   40USLEN
     I                                    B   5   80USPOS
     I                                    B   9  120USSPSQ
     I                                    B  13  160SCSPN2
     I                                    B  17  200SCLEN
     I* Compteurs binaires sur caractéristiques récupérées
     IUSINFO      DS
     I                                    B   1   40USDEPL
     I                                    B   9  120USNBLS
     I                                    B  13  160USSZLS
     I* Infos spoule récupérées dans le user space
     ISPINFO      DS
     I                                        1  10 SPUSER
     I                                       11  30 SPOUTQ
     I                                       31  40 SPFORM
     I                                       51  66 SPJBID
     I                                       67  82 SPSPID
     I* Infos spoules complémentaire, 'QUSRSPLA'
     ISCINFO      DS
     I                                        9  24 SCJBID
     I                                       25  40 SCSPID
     I                                       41  50 SCJBNM
     I                                       51  60 SCUSR
     I                                       61  66 SCJBNB
     I                                       67  76 SCSPNM
     I                                    B  77  800SCSPNB
     I                                       81  90 SCFORM
     I                                       91 100 SCUDTA
     I                                      101 110 SCSTAT
     I                                      102 103 SCSTA2
     I                                    B 141 1440SCPAGE
     I                                    B 145 1480SCPGPR
     I                                      208 209 SCDDAY
     I                                      271 290 SCPRTX
     I* Taille du User Space en binaire
     I            DS
     I                                    B   1   40USSIZ
     I* Constantes User space
     I              'USPSPL    QTEMP     'C         C1USP
     I              'SPLINF              'C         C1ATR
     I              10000                 C         C1SIZ
     I              '*ALL      '          C         C1AUT
     I              'Informations spoules'C         C1TXT
     I              'dltusrspc qtemp/usps-C         C1CMD
     I              'pl                  '
     C*------------------------------------------------------------------------
     C* Paramètres d'appel commande
     C           *ENTRY    PLIST
     C                     PARM           P0USR  10        User
     C                     PARM           P0OUTQ 20        Outq Qualifiée
     C                     PARM           P0FORM 10        Formulaire
     C                     PARM           P0UDTA 10        User Data
     C* First display : list form the beginning
     C                     Z-ADD12        C1SIZE  50
     C                     MOVE 01        ECRAN   20
     C                     MOVE *ALL'0'   CLRIND 29
     C                     MOVE '0'       ERREUR  1
 1<--C                     EXSR SET01
     C                     CALL 'SFLCLR'
     C           *NAMVAR   DEFN WRKSPLDFT DEFAUT
     C                     IN   DEFAUT
     C* Display Loop
  1{ C           ECRAN     DOWNE99
     C                     TIME           TIMHR
 2<--C           ECRAN     CASEQ01        TRT01
 4<--C           ECRAN     CASEQ02        TRT02
  2} C                     ENDCS
  1} C                     ENDDO
     C                     SETON                     LR
     C*======================================================================
 1---C           SET01     BEGSR
     C* Clear Subfile
     C                     MOVE '0'       S1CHGD  1
     C                     SETOF                     3233
     C                     SETON                     34
     C                     WRITEF1C
     C                     SETOF                     34
     C                     Z-ADD0         C1TRN   50
     C* Remplissage de la liste des spoules
 5<--C                     EXSR TRTSPL
     C                     MOVE '1'       C1END   1
     C                     Z-ADD1         RNB1
     C                     ENDSR
     C*======================================================================
 2---C           TRT01     BEGSR
     C* Use default positioning when error
  1{ C           ERREUR    IFEQ '1'
     C                     Z-ADD0         C1LIN
     C                     Z-ADD0         C1COL
  1} C                     END
     C* Display screen to select instrument
     C                     WRITEF1
     C                     WRITEMSGC                       Messages
     C                     SETON                     33
  1{ C           C1TRN     IFNE 0
     C                     SETON                     32
  1| C                     ELSE
     C                     SETOF                     32
  1} C                     END
     C                     MOVE C1END     *IN35
     C                     WRITEF1C
     C                     READ F1C                      97
     C                     READ F1                       97
     C                     Z-ADDD1RRN1    C1TOP   50       Top of screen
     C                     Z-ADDC1TOP     RNB1             Sflrcdnbr
     C           D1CURS    DIV  256       C1LIN
     C                     MVR            C1COL
     C* Clear error fields
     C                     MOVEACLRIND    *IN,40
     C                     CALL 'SFLCLR'
     C                     MOVE '0'       ERREUR  1
     C* F3 or F12 to exit program
  1{ C                     SELEC
  1| C           *IN03     WHEQ '1'
     C                     Z-ADD99        ECRAN
     C                     MOVE '03'      P1CRET  2
  1| C           *IN12     WHEQ '1'
     C                     Z-ADD99        ECRAN
     C                     MOVE '12'      P1CRET
     C* F5=Options copie
  1| C           *IN15     WHEQ '1'
     C           *LOCK     IN   DEFAUT
     C                     Z-ADD2         ECRAN
     C* Controle d'options
  1| C           C1TRN     WHNE 0
 3<--C                     EXSR CTR01
  1} C                     END
     C*
     C                     ENDSR
     C*======================================================================
 3---C           CTR01     BEGSR
     C* Appel de programme externe si nécessaire
     C                     READCF1S                      97
  1{ C           *IN97     DOWEQ'0'
     C                     MOVE '  '      P2CRET
     C           S1OPT     IFNE ' '
     C                     MOVE S1SPNB    S1SPNA  4
     C                     CALL 'WRKSPL5'
     C                     PARM           S1OPT
     C                     PARM           SCSPNM
     C                     PARM           SCUDTA
     C                     PARM           SCJBNM
     C                     PARM           SCJBNB
     C                     PARM           SCUSR
     C                     PARM           S1SPNA
     C                     PARM           P2CRET  2
     C                     END
     C           P2CRET    IFEQ '  '                       Ok
     C                     MOVE ' '       S1OPT
     C                     UPDATF1S
     C                     READCF1S                      97
     C                     ELSE                            Erreur
     C                     Z-ADDC1RN      RNB1
     C                     Z-ADD0         C1LIN
     C                     SETON                     3940
     C                     UPDATF1S
     C                     LEAVE
     C                     ENDIF                           Erreur / pas
  1} C                     ENDDO                           Boucle
     C*
     C                     ENDSR
     C*======================================================================
 4---C           TRT02     BEGSR
     C* Affiche
     C                     WRITEF2
     C                     WRITEMSGC                       Messages
     C                     READ F2                       97
     C* Clear error fields
     C                     MOVEACLRIND    *IN,40
     C                     CALL 'SFLCLR'
     C                     MOVE '0'       ERREUR  1
     C* F3 or F12 to exit program
  1{ C                     SELEC
  1| C           *IN03     WHEQ '1'
     C                     Z-ADD99        ECRAN
     C                     MOVE '03'      P1CRET
  1| C           *IN12     WHEQ '1'
     C                     Z-ADD99        ECRAN
     C                     MOVE '12'      P1CRET
     C* Validation si pas de modification
  1| C           *IN25     WHEQ '0'
     C                     OUT  DEFAUT
     C                     Z-ADD1         ECRAN
     C                     ENDSL
     C*
     C                     ENDSR
     C*======================================================================
 5---C           TRTSPL    BEGSR
     C* Création du user space
     C                     Z-ADDC1SIZ     USSIZ
     C                     CALL 'QUSCRTUS'                 API
     C                     PARM C1USP     USUSP  20        Nom qualifié
     C                     PARM C1ATR     USATR  10        Attribut
     C                     PARM           USSIZ            Taille en binaire
     C                     PARM ' '       USINI   1        Remplissage
     C                     PARM C1AUT     USAUT  10        Droits
     C                     PARM C1TXT     USTXT  50        Description
     C* Liste des spoules dans User Space
     C                     CALL 'QUSLSPL'
     C                     PARM           USUSP            User Space
     C                     PARM 'SPLF0100'USFMTN  8        Format API
     C                     PARM           P0USR            User
     C                     PARM           P0OUTQ           Outq Qualifiée
     C                     PARM           P0FORM           Formulaire
     C                     PARM           P0UDTA           User Data
     C* Recupération du formatage de la liste en début de userspace
     C                     CALL 'QUSRTVUS'
     C                     PARM           USUSP            User Space
     C                     PARM 125       USPOS            Position
     C                     PARM 16        USLEN            Longueur
     C                     PARM           USINFO           DS infos User Space
     C* Préparation des pointeurs pour récup de la liste des spoules
     C           1         ADD  USDEPL    USPOS            Depuis
     C                     Z-ADDUSSZLS    USLEN            Taille infos spoule
     C*
     C*----------------------------------------
  1{ C                     DO   USNBLS    C1RN    50       Nombre de spoules
     C*----------------------------------------
     C* Lecture infos spoule de base (les autres sont ailleurs)
     C                     CALL 'QUSRTVUS'
     C                     PARM           USUSP            User Space
     C                     PARM           USPOS            Position
     C                     PARM           USLEN            Longueur
     C                     PARM           SPINFO           DS Infos Spoule
     C                     ADD  USSZLS    USPOS            ... décallage
     C* Récup d'infos complémentaires
     C                     CALL 'QUSRSPLA'
     C                     PARM           SCINFO           DS Infos complément.
     C                     PARM 300       SCLEN            Longueur récup
     C                     PARM 'SPLA0100'SCFMTN  8        Format API
     C                     PARM '*INT'    SCJOBI 26        Infos Job
     C                     PARM SPJBID    SCJBID           Identifiant Job
     C                     PARM SPSPID    SCSPID           Identifiant Job
     C                     PARM '*INT'    SCSPN1 10        Ref 1 Spoule
     C                     PARM *ZERO     SCSPN2           Ref 1 Spoule
     C* Mise en forme
     C                     Z-ADDSCSPNB    S1SPNB  50
     C                     Z-ADDSCPAGE    S1PAGE  50
     C                     Z-ADDSCPGPR    S1PGPR  50
     C* Préparation d'une ligne dans la liste
     C                     MOVE S1SPNB    ZA5     5
     C                     MOVEAZA5       TZA
  2{ C                     DO   5         I       50
  3{ C           TZA,I     IFNE '0'
     C                     LEAVE
     C                     ENDIF
  3} C                     ENDDO
     C                     MOVEATZA,I     ZA5       P
     C* Spoule et données utilisateur
     C           SCSPNM    CAT  SCUDTA:1  S1SPL     P      Nom Spoule
     C*
     C           SCJBNM    CAT  '/':0     S1JOB     P      Nom Job
     C                     CAT  SCUSR:0   S1JOB            Utilisateur
     C                     CAT  '/':0     S1JOB
     C                     CAT  SCJBNB:0  S1JOB            N° Job
     C                     CAT  ZA5:1     S1JOB            N° spoule
     C           SCSTA2    IFNE 'RE'                       *READY=standard
     C                     MOVE SCSTA2    S1JOB            Etat
     C                     END
     C*
     C                     MOVELSPOUTQ    S1OUTQ
     C* Ecriture d'une ligne dans la liste
     C                     Z-ADDC1RN      C1TRN   50       Records
     C                     WRITEF1S
     C*----------------------------------------
  2} C                     ENDDO
     C*----------------------------------------
     C                     CALL 'QCMDEXC'
     C                     PARM C1CMD     CMD    40
     C                     PARM 40        CMDLEN 155
     C*
     C                     ENDSR

WRKSPL5 : traitement d'un option

Ce CL récupère les informations concernant un spoule et la référence d'option à traiter.

             PGM  (&opt &splnam &usrdta &jobnam &jobnbr &usr &splnum &codret)

             dcl      &opt       *char   1
             dcl      &splnam    *char  10
             dcl      &usrdta    *char  10
             dcl      &jobnam    *char  10
             dcl      &jobnbr    *char   6
             dcl      &usr       *char  10
             dcl      &splnum    *char   4
             dcl      &codret    *char   2

              DCL    &msgid    *char   7
              DCL    &msgf     *char  10
              DCL    &msgdta   *char 256
              DCL    &msgflib  *char  10
              DCL    &err      *LGL

              DCL    &copy     *CHAR 100
              DCL    &src      *CHAR  10
              DCL    &lib      *CHAR  10
              DCL    &mbr      *CHAR  10
              DCL    &cpyopt   *CHAR   8

             MONMSG     MSGID(CPF0000) EXEC(GOTO ERREUR)
             CHGVAR   &codret '  '

             RTVDTAARA  DTAARA(WRKSPLDFT (1 100)) RTNVAR(&COPY)

/* 5=affichage  */

         if  (&opt = '5')  DO
             DSPSPLF    FILE(&SPLNAM) JOB(&JOBNBR/&USR/&JOBNAM) +
                          SPLNBR(&SPLNum)
             RCVMSG     MSGTYPE(*ANY) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)
             IF (&msgid *NE ' ') +
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA)
             GOTO finfin
         enddo
/* 3=Copie  */

         if  (&opt = '3')  DO
             CHGVAR     &mbr      %sst(&copy   1  10)
             CHGVAR     &src      %sst(&copy  11  10)
             CHGVAR     &lib      %sst(&copy  21  10)
             CHGVAR     &cpyopt   %sst(&copy  31   8)

             if  (&mbr = '*SPL')  chgvar &mbr &splnam

             if  (&mbr = '*USRDTA')   DO
                 if  (&usrdta *NE ' ')  chgvar &mbr &usrdta
                 else                   chgvar &mbr &splnam
             enddo

             ? CPYSPLF ??FILE(&SPLNAM) ??TOFILE(&LIB/&SRC) +
                          ??JOB(&JOBNBR/&USR/&JOBNAM) +
                          ??SPLNBR(&SPLNUM) ??TOMBR(&MBR) +
                          ??MBROPT(&CPYOPT) ??CTLCHAR(*FCFC)
             GOTO finfin
         enddo

/* Option invalide */
             chgvar     &codret  '99'
             SNDPGMMSG  MSG('Option invalide')
             GOTO finfin
erreur:
             if &err  sndpgmmsg msgid(cpf9999) msgf(qcpfmsg) msgtype(*ESCAPE)
             chgvar  &err  '1'
             chgvar  &codret '99'
             RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA)
finfin:   endpgm

WRKSPL7 : restauration d'un spoule archivé

Ce CL est destiné à être appelé depuis PDM par option utilisateur, et recharge un spoule archivé.

             PGM   (&file &lib  &mbr)
             dcl   &file *char 10
             dcl   &lib  *char 10
             dcl   &mbr  *char 10

 /* Une astuce serait de garder les infos OVR dans le texte du membre */
 /* Créer une option PDM S7 : call wrkspl7 (&f &l &n)                 */

             OVRPRTF    FILE(QSYSPRT) CTLCHAR(*FCFC) SPLFNAME(&MBR)
             CPYF       FROMFILE(&LIB/&FILE) TOFILE(QSYSPRT) +
                          FROMMBR(&MBR)
             DSPSPLF    FILE(&MBR) SPLNBR(*LAST)

             ENDPGM

Patrick Larreya, Septembre 2000.