Choix d'une commande (CPP, RPGIV avec pointeur)

BoTTom |
      *
      * CHXCMDCPP, modifié pour manipuler le user space par pointeurs
      *
      * (les lignes modifiées sont marquées par '>>>>')
      *================================================================
     FCHXCMDD   CF   E             WORKSTN INFDS(INFODS)
     F                                     SFILE(FMTSFL:RANG)
     D CTX             C                   CONST('LISTE DES CDES')
     D MTX             C                   CONST('Liste en cours..')
     D MTX2            C                   CONST('Liste terminée  ')
      * RANG DU PREMIER ENREG AFFICHé (==> SFLRCDNBR)
     D INFODS          DS
     D  L2                   378    379B 0
      * ENTETE USER SPACE
>>>> Dspcptr           s               *
>>>> D RTVINF          DS                  based(spcptr)
>>>> D  decal                       124
     D  FIN                           9B 0
     D  TAILLE                        9B 0
     D  NBOBJ                         9B 0
     D  LGPOST                        9B 0
      * DEFINITION D'UN OBJET
>>>> Dlistptr          s               *
>>>> D LIST            DS                  based(listptr)
     D  OBJNAM                 1     10
     D  OBJLIB                11     20
     D  OBJQ                   1     20
     D  OBJTYP                21     30
     D  TEXTE                 42     91
      * DECLARATION DE VARIABLES de travail
      * (avant le programme utilisait OBJTYP et TAILLE)
>>>> Dwtyp             s             10
>>>> Dwtaille          s              9b 0
      * DECLARATION DE VARIABLES BINAIRES
     D BINDS           DS
     D  DEBUT                  1      4B 0
     D  LG                     5      8B 0
     D  LGRCV                  9     12B 0
      * QUALIF/ USER SPACE ET CMDE
     D QUALDS          DS
     D  SPCNAM                 1     10
     D  SPCLIB                11     20
     D  USRSPC                 1     20
     D  CMDE                  21     30


|
     D  BIBLI                 31     40
     D  CMDQ                  21     40
      * CODE ERREUR API
     D ERRDS           DS
     D  LGDS                   1      4B 0
     D  LGERR                  5      8B 0
     D  MSGID                  9     15
     D  RESERV                16     16
      * VAR POUR API ENVOI DE MESSAGE
     D MSGDS           DS
     D  MSGF                   1     10
     D  MSGL                  11     20
     D  MSGFL                  1     20
     D  LENTXT                21     24B 0
     D  STACK                 25     28B 0
     D  KEY                   29     32B 0
     C     *ENTRY        PLIST
     C     CMDQ          PARM                    OBJBIB           20
      *
     C     CMDE          IFEQ      *BLANK
     C                   MOVEL     '*ALL'        CMDE
     C                   ENDIF
     C     BIBLI         IFEQ      *BLANK
     C                   MOVEL     '*USRLIBL'    BIBLI
     C                   ENDIF
>>>> C                   MOVEL     '*CMD'        WTYP
      *
     C                   WRITE     CDE
      * ENVOI MESSAGE STATUS "LISTE EN COURS"
     C                   Z-ADD     16            LGDS
     C                   MOVEL     'QCPFMSG'     MSGF
     C                   MOVEL     '*LIBL'       MSGL
     C                   MOVEL     MTX           MSGTXT
     C                   CALL      'QMHSNDPM'
     C                   PARM      'CPF9898'     ID                7
     C                   PARM                    MSGFL
     C                   PARM                    MSGTXT           50
     C                   PARM      50            LENTXT
     C                   PARM      '*STATUS'     MSGTYP           10
     C                   PARM      '*EXT'        PGMQ             10
     C                   PARM      0             STACK
     C                   PARM                    KEY
     C                   PARM                    ERRDS
      * CHARGEMENT SOUS FICHIER


|
     C                   EXSR      CHGT
      *
     C     NBOBJ         IFGT      0
      * ENVOI MESSAGE STATUS "LISTE TERMINEE"
     C                   MOVEL     MTX2          MSGTXT
     C                   CALL      'QMHSNDPM'
     C                   PARM      'CPF9898'     ID                7
     C                   PARM                    MSGFL
     C                   PARM                    MSGTXT           50
     C                   PARM      50            LENTXT
     C                   PARM      '*STATUS'     MSGTYP           10
     C                   PARM      '*EXT'        PGMQ             10
     C                   PARM      0             STACK
     C                   PARM                    KEY
     C                   PARM                    ERRDS
      *
     C                   MOVE      *ON           *IN40
     C                   MOVEL     '*'           SFLQ
      *
     C     *IN03         DOUEQ     *ON
     C                   WRITE     ERRCTL
     C                   EXFMT     FMTCTL
     C     *IN03         IFEQ      *OFF
     C                   Z-ADD     L2            LIGNE
      * REMOVE DES MESSAGES RECUS
     C                   CALL      'QMHRMVPM'
     C                   PARM      '*'           PGMQ
     C                   PARM      0             STACK
     C                   PARM      '    '        KEYC              4
     C                   PARM      '*OLD'        RMVTYP           10
     C                   PARM                    ERRDS
     C                   EXSR      TRT
     C                   ENDIF
     C                   ENDDO
     C* USER SPACE NON VIDE
     C                   ENDIF
     C                   MOVE      *ON           *INLR
     C                   EXSR      DLTUS
      *
     C     CHGT          BEGSR
     C                   MOVEL     'CHXCMD'      SPCNAM
     C                   MOVEL     'QTEMP'       SPCLIB
     C                   MOVEL     'LISTFMT '    EXT              10
>>>> C                   Z-ADD     1024          WTAILLE


|
     C                   MOVE      ' '           INT              10
     C                   MOVEL     '*USE'        AUT              10
     C                   MOVEL     CTX           TXT              50
      * dlt du user space si présent dans QTEMP
     C                   EXSR      DLTUS
      * CREATION USER SPACE PAR API QUSCRTUS
     C                   CALL      'QUSCRTUS'
     C                   PARM                    USRSPC
     C                   PARM                    EXT
>>>> C                   PARM                    WTAILLE
     C                   PARM                    INT
     C                   PARM                    AUT
     C                   PARM                    TXT
      * REMPLISSAGE DU USER SPACE VIA API (LISTE DES OBJETS)
     C                   CALL      'QUSLOBJ'                            99
     C                   PARM                    USRSPC
     C                   PARM      'OBJL0200'    FMT               8
     C                   PARM                    CMDQ
>>>> C                   PARM                    WTYP
     C     *IN99         IFEQ      *OFF
>>>>  * retrouve pointeur de début
>>>> C                   CALL      'QUSPTRUS'
>>>> C                   PARM                    USRSPC
>>>> C                   PARM                    spcptr
>>>> C                   eval      listptr = spcptr
>>>> C                   eval      listptr = listptr + fin
     C                   ENDIF
     C     *IN99         IFEQ      *OFF
     C     NBOBJ         ANDGT     0
     C                   Z-ADD     0             RANG              4 0
     C                   MOVEA     '00'          *IN(30)
     C                   WRITE     FMTCTL
     C                   MOVE      *ON           *IN30
     C                   Z-ADD     1             LIGNE
      *
      * BOUCLE SUR NOMBRE DE MEMBRES EXTRAITS
      *
     C                   DO        NBOBJ
>>>>  * pas d'extraction (la strusture LIST "pointe" directement
>>>>  *  sur un élément DANS le User Space.)
     C                   MOVE      *ON           *IN31
     C                   ADD       1             RANG
     C                   WRITE     FMTSFL
      * POSITIONNEMENT SUR PROCHAIN POSTE


|
>>>> C                   eval      listptr = listptr + lgpost
     C                   ENDDO
      * fin des modifs.
     C                   ENDIF
     C                   ENDSR
      *
      *
     C     TRT           BEGSR
     C                   READC     FMTSFL                                 41
     C     *IN41         DOWEQ     *OFF
     C                   SELECT
     C     OPT           WHENEQ    '1'
     C     '?'           CAT(P)    OBJLIB:1      EXEC            256
     C                   CAT       '/':0         EXEC
     C                   CAT       OBJNAM:0      EXEC
     C                   CALL      'QCMDEXC'                            97
     C                   PARM                    EXEC
     C                   PARM      256           EXECL            15 5
     C     OPT           WHENEQ    '5'
     C     '?'           CAT(P)    OBJLIB:1      EXEC            256
     C                   CAT       '/':0         EXEC
     C                   CAT       OBJNAM:0      EXEC
     C                   CALL      'QCMDCHK'                            97
     C                   PARM                    EXEC
     C                   PARM      256           EXECL            15 5
     C     OPT           WHENEQ    '8'
     C     'DSPCMD'      CAT(P)    OBJLIB:1      EXEC            256
     C                   CAT       '/':0         EXEC
     C                   CAT       OBJNAM:0      EXEC
     C                   CALL      'QCMDEXC'                            97
     C                   PARM                    EXEC
     C                   PARM      256           EXECL            15 5
     C                   ENDSL
     C                   MOVE      ' '           OPT
     C                   UPDATE    FMTSFL
     C                   READC     FMTSFL                                 41
     C                   ENDDO
     C                   ENDSR
      *
     C     DLTUS         BEGSR
      * DLT DU USER SPACE (Y COMPRIS EN CAS DE PLANTUS) API QUSDLTUS
     C                   Z-ADD     16            LGDS
     C                   CALL      'QUSDLTUS'                           99
     C                   PARM                    USRSPC


|
     C                   PARM                    ERRDS
     C                   ENDSR
      *
     C     *PSSR         BEGSR
     C     *IN98         IFEQ      *ON
     C                   MOVE      *ON           *INLR
     C                   RETURN
     C                   ELSE
     C                   MOVE      *ON           *IN98
     C                   EXSR      DLTUS
      * RENVOI LE DERNIER MESSAGE *ESCAPE
     C                   CALL      'QMHRSNEM'
     C                   PARM      '    '        KEYC
     C                   PARM                    ERRDS
     C                   ENDIF
     C                   ENDSR




©AF400