midrange.com code scratchpad
Name:
RTVJOBCMD
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
10/29/2015 04:38:11 pm
IP:
Logged
Description:
Retrieve commands from the job log
Code:
  1. CMD RTVJOBCMD:
  2.              CMD        PROMPT('Retrieve job commands')
  3.  
  4.              PARM       KWD(JOB) TYPE(JOB) DFT(*) SNGVAL((*)) +
  5.                           PROMPT('Job name')
  6.  
  7.  JOB:        QUAL       TYPE(*NAME) LEN(10)
  8.              QUAL       TYPE(*CHAR) LEN(10) PROMPT('User')
  9.              QUAL       TYPE(*CHAR) LEN(6) RANGE('000000' '999999') +
  10.                           PROMPT('Number')
  11.  
  12. CLP RTVJOBCMD:
  13. /* Retrieve commands from joblog */
  14.  
  15. /* Uses APIs to retrieve messages sent to *EXT  */
  16. /* and extracts only the request messages       */
  17. /* then places them in the source file in QTEMP */
  18. /* the intention is to capture commands in a    */
  19. /* source file that you can use later for       */
  20. /* inclusion in a CL program                    */
  21.  
  22. PGM &PJOB
  23.  
  24. DCL &PJOB *CHAR 26
  25.  
  26. DCL &TIME *CHAR 6
  27. DCL &DATE *CHAR 6
  28. DCL &MBR *CHAR 10
  29. DCL &MSG *CHAR 80
  30. DCL &TEXT *CHAR 50
  31. DCL &JOB  *CHAR 10
  32. DCL &USER *CHAR 10
  33. DCL &NBR  *CHAR 6
  34.  
  35. DCL &SPC_SIZE *CHAR 4 X'00004098'            /* 16kb */
  36. DCL &SPC_VAL  *CHAR 1 X'00'
  37. DCL &ERR_SIZE  *CHAR 4 X'00000010'           /* 16 bytes */
  38. DCL &ERR_AVAIL *CHAR 4
  39. DCL &ERR_ID    *CHAR 7
  40. DCL &ERR_RES   *CHAR 1
  41. DCL &ERR       *CHAR 16
  42. /* Create the source file */
  43. RTVSYSVAL QTIME &TIME
  44. RTVSYSVAL QDATE &DATE
  45. IF (&PJOB *EQ '*') +
  46.     RTVJOBA JOB(&JOB) USER(&USER) NBR(&NBR)
  47. ELSE DO
  48.     CHGVAR &JOB  %SST(&PJOB 01 10)
  49.     CHGVAR &USER %SST(&PJOB 11 10)
  50.     CHGVAR &NBR  %SST(&PJOB 21 06)
  51. ENDDO
  52.  
  53. CHGVAR &MBR ('CL' *CAT &TIME)
  54. CHGVAR &TEXT ('Cmds from ' *CAT +
  55.               &NBR *CAT +
  56.               '/' *CAT +
  57.               &USER *TCAT +
  58.               '/' *CAT +
  59.               &JOB *TCAT +
  60.               ' on ' *CAT +
  61.               &DATE *CAT +
  62.               ' at ' *CAT +
  63.               &TIME)
  64.  
  65. CRTDUPOBJ OBJ(QCLSRC) FROMLIB(QGPL) OBJTYPE(*FILE) +
  66.           TOLIB(QTEMP) NEWOBJ(JOBCLSRC)
  67. MONMSG CPF0000
  68.  
  69. RMVM QTEMP/QCLSRC *ALL
  70. MONMSG CPF0000
  71.  
  72. ADDPFM QTEMP/JOBCLSRC +
  73.        MBR(&MBR) +
  74.        SRCTYPE(CL) +
  75.        TEXT(&TEXT)
  76. MONMSG CPF0000 EXEC(CLRPFM QTEMP/JOBCLSRC &MBR)
  77.  
  78. /* Initialise error return structure */
  79. CHGVAR &ERR (&ERR_SIZE  *CAT +
  80.              &ERR_AVAIL *CAT +
  81.              &ERR_ID    *CAT +
  82.              &ERR_RES)
  83.  
  84. /* Delete space; ignore errors */
  85. CALL QUSDLTUS PARM('RTVJOBCMD QTEMP     ' +
  86.                    &ERR                  )
  87.  
  88. /* Create 16KB space to hold temp results */
  89. CALL QUSCRTUS ('RTVJOBCMD QTEMP     ' +
  90.                'JOBLOG    ' +
  91.                &SPC_SIZE    +
  92.                &SPC_VAL     +
  93.                '*LIBCRTAUT' +
  94.                'RTVJOBCMD API work area')
  95.  
  96. OVRDBF QCLSRC QTEMP/JOBCLSRC MBR(&MBR)
  97. CALL RTVJOBCMDR &PJOB
  98.  
  99. CHGVAR &MSG ('Commands from job are in JOBCLSRC in QTEMP, mbr ' *CAT    +
  100.              &MBR)
  101.  
  102. SNDPGMMSG &MSG +
  103.           TOPGMQ(*PRV) +
  104.           MSGTYPE(*INFO)
  105.  
  106. DLTOVR *ALL
  107. RCLRSC
  108.  
  109. ENDPGM
  110.  
  111.  
  112. RPGLE RTVJOBCMDR:
  113.      F* EXTRACT COMMANDS FROM LIST JOB MESSAGES API
  114.      F* The CL program creates a user space to hold the
  115.      F* job messages, and a source file to put them in.
  116.      FQCLSRC    O    E             DISK
  117.      F                                     RENAME(QCLSRC:SRCREC)
  118.      D/SPACE 3
  119.      D* Data Structure for API:  General Header for User Space
  120.      D* Format:  N/A
  121.      D*
  122.      D GENDS           DS                  INZ
  123.      D  USRARA                 1     64
  124.      D  SIZHDR                65     68B 0
  125.      D  RLSLVL                69     72
  126.      D  FMTNAM                73     80
  127.      D  APIUSE                81     90
  128.      D  DATTIM                91    103
  129.      D  INFSTS               104    104
  130.      D  SIZUSE               105    108B 0
  131.      D  OFFINP               109    112B 0
  132.      D  SIZINP               113    116B 0
  133.      D  OFFHDR               117    120B 0
  134.      D  SIZHD1               121    124B 0
  135.      D  OFFLST               125    128B 0
  136.      D  SIZLST               129    132B 0
  137.      D  NUMLST               133    136B 0
  138.      D  SIZENT               137    140B 0
  139.      D****************************************************************
  140.      D*                                                              *
  141.      D* DATA STRUCTURE FOR API:  QMHLJOBL                            *
  142.      D* FORMAT:  LJOB0100                                            *
  143.      D* LANGUAGE:  RPG                                               *
  144.      D*                                                              *
  145.      D****************************************************************
  146.      D HEADER          DS                  INZ
  147.      D  SPCNMH                 1     10
  148.      D  SPCLBH                11     20
  149.      D  STRKYH                21     24
  150.      D  ENDKYH                25     28
  151.      D  JOBNMH                29     38
  152.      D  USRPRH                39     48
  153.      D  JOBNBH                49     54
  154.      D  CCSIDH                55     56
  155.      D  RESERV                57     60B 0
  156.      D LSTHDR          DS                  INZ
  157.      D  BGNOFF                 1      4B 0
  158.      D  FLDOFF                 5      8B 0
  159.      D  NUMFLD                 9     12B 0
  160.      D  MSGSEV                13     16B 0
  161.      D  MSGID                 17     23
  162.      D  MSGTYP                24     25
  163.      D  MSGKEY                26     29
  164.      D  MSGF                  30     39
  165.      D  MSGFLB                40     49
  166.      D  DATSNT                50     56
  167.      D  TIMSNT                57     62
  168.      D  LSTRSV                63     64
  169.      D LSTDTA          DS                  INZ
  170.      D  NXTDTA                 1      4B 0
  171.      D  DTAIDL                 5      8B 0
  172.      D  DTAID                  9     12B 0
  173.      D  DTATYP                13     13
  174.      D  DTASTS                14     14
  175.      D  DTARSV                15     28
  176.      D  DTALEN                29     32B 0
  177.      D  M                     33   9999
  178.      D                                     DIM(9967)
  179.      D* Error return code
  180.      D ERRRTC          DS                  INZ
  181.      D  ERRSIZ                 1      4B 0
  182.      D  ERRAVL                 5      8B 0
  183.      D  ERRID                  9     15
  184.      D  ERRRES                16     16
  185.      D* User space name
  186.      D SPC             DS                  INZ
  187.      D  SPCN                   1     10
  188.      D  SPCL                  11     20
  189.      D* Message select criteria
  190.      D MSGSEL          DS                  INZ
  191.      D  MMSGMA                 1      4B 0
  192.      D  MLSTDI                 5     14
  193.      D  MJOBNA                15     40
  194.      D  MINTJO                41     56
  195.      D  MSTRKE                57     60B 0
  196.      D  MMAXMS                61     64B 0
  197.      D  MMAXMH                65     68B 0
  198.      D  MFLDOF                69     72B 0
  199.      D  MFLDNU                73     76B 0
  200.      D  MQUEOF                77     80B 0
  201.      D  MQUELE                81     84B 0
  202.      D  MIDMSG                85     88B 0
  203.      D  MCALQU                89     92
  204.      D* Misc binary variables
  205.      D                 DS                  INZ
  206.      D  MSGSLE                 1      4B 0
  207.      D  SSTART                 5      8B 0
  208.      D  SLEN                   9     12B 0
  209.      D  OFFSET                13     16B 0
  210.      C     *ENTRY        PLIST
  211.      C                   PARM                    PJOB             26
  212.      C* Size of error variable
  213.      C                   Z-ADD     16            ERRSIZ
  214.      C* Message select criteria
  215.      C                   Z-ADD     -1            MMSGMA
  216.      C                   MOVEL(P)  '*NEXT'       MLSTDI
  217.      C                   MOVEL(P)  '*'           MJOBNA
  218.      C                   MOVEL(P)  PJOB          MJOBNA
  219.      C                   Z-ADD     0             MSTRKE
  220.      C                   Z-ADD     9967          MMAXMS
  221.      C                   Z-ADD     -1            MMAXMH
  222.      C                   Z-ADD     84            MFLDOF
  223.      C                   Z-ADD     1             MFLDNU
  224.      C                   Z-ADD     88            MQUEOF
  225.      C                   Z-ADD     4             MQUELE
  226.      C                   Z-ADD     0302          MIDMSG
  227.      C                   MOVEL     '*   '        MCALQU
  228.      C* Name of space to hold list
  229.      C                   MOVEL     'RTVJOBCM'    SPCN
  230.      C                   CAT       'D':0         SPCN
  231.      C                   MOVEL(P)  'QTEMP'       SPCL
  232.      C* Put job messages in user space
  233.      C*
  234.      C                   MOVEL     'LJOB0100'    MFORMA            8
  235.      C                   MOVEL     'JSLT0100'    MRETFO            8
  236.      C                   Z-ADD     92            MSGSLE
  237.      C*
  238.      C                   CALL      'QMHLJOBL'
  239.      C                   PARM                    SPC
  240.      C                   PARM                    MFORMA
  241.      C                   PARM                    MSGSEL
  242.      C                   PARM                    MSGSLE
  243.      C                   PARM                    MRETFO
  244.      C                   PARM                    ERRRTC
  245.      C* Determine how many entries,
  246.      C*           where they begin
  247.      C*           by examining the generic header
  248.      C*
  249.      C                   Z-ADD     1             SSTART
  250.      C                   Z-ADD     140           SLEN
  251.      C*
  252.      C                   CALL      'QUSRTVUS'
  253.      C                   PARM                    SPC
  254.      C                   PARM                    SSTART
  255.      C                   PARM                    SLEN
  256.      C                   PARM                    GENDS
  257.      C                   PARM                    ERRRTC
  258.      C* Point to the header (in case we need the last msg key)
  259.      C     OFFHDR        ADD       1             SSTART
  260.      C                   Z-ADD     SIZHD1        SLEN
  261.      C*
  262.      C                   CALL      'QUSRTVUS'
  263.      C                   PARM                    SPC
  264.      C                   PARM                    SSTART
  265.      C                   PARM                    SLEN
  266.      C                   PARM                    HEADER
  267.      C                   PARM                    ERRRTC
  268.      C* Working offset will be changed in the loop
  269.      C                   Z-ADD     OFFLST        OFFSET
  270.      C/EJECT
  271.      C* Extract messages from user space 1 at a time
  272.      C                   DO        NUMLST
  273.      C* Point to the list header
  274.      C     OFFSET        ADD       1             SSTART
  275.      C                   Z-ADD     64            SLEN
  276.      C*
  277.      C                   CALL      'QUSRTVUS'
  278.      C                   PARM                    SPC
  279.      C                   PARM                    SSTART
  280.      C                   PARM                    SLEN
  281.      C                   PARM                    LSTHDR
  282.      C                   PARM                    ERRRTC
  283.      C*
  284.      C                   Z-ADD     BGNOFF        OFFSET
  285.      C* Message types 08 and 10 are request messages
  286.      C*
  287.      C* Point to the list data
  288.      C     FLDOFF        ADD       1             SSTART
  289.      C                   Z-ADD     9999          SLEN
  290.      C*
  291.      C                   CALL      'QUSRTVUS'
  292.      C                   PARM                    SPC
  293.      C                   PARM                    SSTART
  294.      C                   PARM                    SLEN
  295.      C                   PARM                    LSTDTA
  296.      C                   PARM                    ERRRTC
  297.      C* Trim the bad data from the message
  298.      C     DTALEN        ADD       1             L                 5 0
  299.      C                   MOVEA     *BLANKS       M(L)
  300.      C* Split long lines into multiple records
  301.      C     1             DO        9967          L
  302.      C*
  303.      C     L             IFGT      DTALEN
  304.      C                   LEAVE
  305.      C                   ENDIF
  306.      C*
  307.      C     L             ADD       75            R                 5 0
  308.      C                   MOVEA(P)  M(L)          THIS             75
  309.      C     R             IFGT      9967
  310.      C                   MOVE      *BLANKS       NEXT
  311.      C                   ELSE
  312.      C                   MOVEA(P)  M(R)          NEXT             75
  313.      C                   ENDIF
  314.      C*
  315.      C     THIS          IFNE      *BLANKS
  316.      C                   ADD       1             SRCSEQ
  317.      C                   MOVEL(P)  THIS          SRCDTA
  318.      C     NEXT          IFNE      *BLANKS
  319.      C                   CAT       '-':0         SRCDTA
  320.      C                   ENDIF
  321.      C                   WRITE     SRCREC
  322.      C                   ENDIF
  323.      C*
  324.      C                   ENDDO     75
  325.      C*
  326.      C                   ENDDO
  327.      C*
  328.      C                   SETON                                        LR
  329.  
© 2004-2019 by midrange.com generated in 0.009s valid xhtml & css