RPGIV @ Work

A unique site for RPG and System i Lovers

Welcome!

Hi, this site will provide all what you need in System i and RPG developments.

My Name is Chamara Withanachchi, System i Expert and RPG Developer. And in the field for last 11 years.

I hope you will find lot of valuable information from this site

Blog - Content Section Layout
List jobq info using QSPRJOBQ
User Rating: / 0
Written by Chamara Withanachchi   

Sample from Jamie Flanary (www.code400.com)


      H Option(*SRCSTMT:*NODEBUGIO)                                                                  
                                                                                                    
     d CmdLength       s             15  5                                                          
     d CmdString       s            512                                                             
     d Reply           s              1                                                             
                                                                                                    
     d $GetJobq        pr                  EXTPGM('QSPRJOBQ')                                       
     d  RECIEVER                    144A                                                            
     d  RCVRLEN                      10I 0 const                                                    
     d  FORMAT                        8A   const                                                    
     d  JOBQ                         20A   consT                                                    
     d  ERROR                       116A                                                            
      *                                                                                             
     dMyJobQDS         DS                  Qualified                                                
     d BytesReturned                 10i 0                                                          
     d BytesAvailable                10i 0                                                          
     d JobQName                      10                                                             
     d JobQLib                       10                                                             
     d OppControlled                 10                                                             
     d AuthorityChk                  10                                                             
     d NumberOfJobs                  10i 0                                                          
     d JobqStatus                    10                                                             
     d SubsystemName                 10                                                             
     d SubsystemLib                  10                                                             
     d Description                   50                                                             
     d Sequence#                     10i 0                                                          
     d MaximumActive                 10i 0                                                          
     d CurrentActive                 10i 0                                                          
     d MaxActPri1                    10i 0                                                          
     d MaxActPri2                    10i 0                                                          
     d MaxActPri3                    10i 0                                                          
     d MaxActPri4                    10i 0                                                          
     d MaxActPri5                    10i 0                                                          
     d MaxActPri6                    10i 0                                                          
     d MaxActPri7                    10i 0                                                          
     d MaxActPri8                    10i 0                                                          
     d MaxActPri9                    10i 0                                                          
     d ActJobsPri1                   10i 0                                                          
     d ActJobsPri2                   10i 0                                                          
     d ActJobsPri3                   10i 0                                                          
     d ActJobsPri4                   10i 0                                                          
     d ActJobsPri5                   10i 0                                                          
     d ActJobsPri6                   10i 0                                                          
     d ActJobsPri7                   10i 0                                                          
     d ActJobsPri8                   10i 0                                                          
     d ActJobsPri9                   10i 0                                                          
     d ActJobsPri10                  10i 0                                                          
     d RlsJObsOnQ1                   10i 0                                                          
     d RlsJObsOnQ2                   10i 0                                                          
     d RlsJObsOnQ3                   10i 0                                                          
     d RlsJObsOnQ4                   10i 0                                                          
     d RlsJObsOnQ5                   10i 0                                                          
     d RlsJObsOnQ6                   10i 0                                                          
     d RlsJObsOnQ7                   10i 0                                                          
     d RlsJObsOnQ8                   10i 0                                                          
     d RlsJObsOnQ9                   10i 0                                                          
     d RlsJObsOnQ10                  10i 0                                                          
     d SchJobsOnQ1                   10i 0                                                          
     d SchJobsOnQ2                   10i 0                                                          
     d SchJobsOnQ3                   10i 0                                                          
     d SchJobsOnQ4                   10i 0                                                          
     d SchJobsOnQ5                   10i 0                                                          
     d SchJobsOnQ6                   10i 0                                                          
     d SchJobsOnQ7                   10i 0                                                          
     d SchJobsOnQ8                   10i 0                                                          
     d SchJobsOnQ9                   10i 0                                                          
     d SchJobsOnQ10                  10i 0                                                          
     d HldJobsOnQ1                   10i 0                                                          
     d HldJobsOnQ2                   10i 0                                                          
     d HldJobsOnQ3                   10i 0                                                          
     d HldJobsOnQ4                   10i 0                                                          
     d HldJobsOnQ5                   10i 0                                                          
     d HldJobsOnQ6                   10i 0                                                          
     d HldJobsOnQ7                   10i 0                                                          
     d HldJobsOnQ8                   10i 0                                                          
     d HldJobsOnQ9                   10i 0                                                          
     d HldJobsOnQ10                  10i 0                                                          
      *                                                                                             
      * Standard API error data structure                                                           
      *                                                                                             
     d APIError        ds                  Qualified                                                
     d  BytesP                 1      4I 0 inz(%size(apiError))                                     
     d  BytesA                 5      8I 0 inz(0)                                                   
     d  Messageid              9     15                                                             
     d  Reserved              16     16                                                             
     d  messagedta            17    256                                                             
                                                                                                    
     d $command        pr                  extpgm('QCMDEXC')                                        
     d   command                    512                                                             
     d   Length                      15  5                                                          
      *                                                                                             
                                                                                                    
      // ****************************************************************** //                      
      // *  Main Calculations                                             * //                      
      // ****************************************************************** //                      
                                                                                                    
      /Free                                                                                         
                                                                                                    
       $getJobQ(MyJobQDS:%SIZE(MyJobQDS):'JOBQ0200':                                                
                   'QBATCH    QGPL':APIERROR);                                                      
                                                                                                    
       DSPLY MyJobQDS.JobQStatus Reply;                                                             
                                                                                                    
       cmdstring = 'HLDJOBQ QBATCH';                                                                
       cmdlength = %len(%trim(cmdstring));                                                          
       // $command(cmdstring: cmdlength);                                                           
                                                                                                    
       cmdstring = 'RLSJOBQ QBATCH';                                                                
       cmdlength = %len(%trim(cmdstring));                                                          
       // $command(cmdstring: cmdlength);                                                           
                                                                                                    
       *inlr = *on;                                                                                 
                                                                                                    
      /End-Free 
Write Comment (0 comments)
Dump directory listing to a file
User Rating: / 0
Written by Chamara Withanachchi   
PGM                                                         
                                                            
CD         DIR('/myxml/data')                               
CRTPF      FILE($library/ifsdir) RCDLEN(128)                     
STRQSH     CMD('ls -lt *.* > +                              
             /qsys.lib/$library.lib/ifsdir.file/ifsdir.mbr')     
                                                            
ENDPGM
Write Comment (0 comments)
QUSRJOBI API to tell if program running interactive or batch environment
User Rating: / 0
Written by Chamara Withanachchi   

Sample from Jamie Flanary (www.code400.com)


     D IsIntJob        PR             1N
     D Msg             S             50A

     c                   if        IsIntJob
     c                   eval      Msg = 'Interactive job'
     c                   dsply                   Msg
     c                   else
     c                   eval      Msg = 'Non-interactive job.'
     c     Msg           dsply
     c                   endif

     c                   eval      *inlr = *on

      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      *   IsIntJob   --   Is this an interactive job?
      *        returns *ON if job is interactive
      *            or  *OFF if job is not interactive.
      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     P IsIntJob        B                   export
     D IsIntJob        PI             1N

     D QUSRJOBI        PR                  EXTPGM('QUSRJOBI')
     D   RcvVar                   32766A   options(*varsize)
     D   RcvVarLen                   10I 0 const
     D   Format                       8A   const
     D   QualJob                     26A   const
     D   InternJob                   16A   const
     D   ErrorCode                32766A   options(*nopass:*varsize)

     D dsJob           DS
     D  dsJobBytesRtn                10I 0
     D  dsJobBytesAvl                10I 0
     D  dsJobName                    10A
     D  dsJobUser                    10A
     D  dsJobNumber                   6A
     D  dsJobIntern                  16A
     D  dsJobStatus                  10A
     D  dsJobType                     1A
     D  dsJobSubtype                  1A
     D  dsJobReserv1                  2A
     D  dsJobRunPty                  10I 0
     D  dsJobTimeSlc                 10I 0
     D  dsJobDftWait                 10I 0
     D  dsJobPurge                   10A

     c                   callp     QUSRJOBI(dsJob: %size(dsJob):'JOBI0100': 
     c                                   '*': *blanks)
     c                   if        dsJobType = 'I'
     c                   return    *ON
     c                   else
     c                   return    *OFF
     c                   endif
     P                 E

Write Comment (0 comments)
List actual library sizes using IBM API QLIRLIBD
User Rating: / 0
Written by Chamara Withanachchi   
      *‚Library size data structure (QLIRLIBD)
      *
     D LibSizeDS       DS
     D   LibSize                     10I 0
     D   LibSizeMult                 10I 0
     D   LibInfSts                     N
     D                                3A
      *
      *‚List API header structure (QUSLOBJ)
      *
     D QUSH0100        DS                  Based(QUSH0100@) Qualified
     D   UserArea                    64A
     D   GenHdrSize                  10I 0
     D   StructRlsLvl                 4A
     D   FormatName                   8A
     D   ApiUsed                     10A
     D   DatTimCrt                   13A
     D   InfStatus                    1A
     D   UsrSpcSize                  10I 0
     D   InpParmOS                   10I 0
     D   InpParmSize                 10I 0
     D   HeaderOS                    10I 0
     D   HeaderSize                  10I 0
     D   ListDataOS                  10I 0
     D   ListDataSize                10I 0
     D   EntryNbr                    10I 0
     D   EntrySize                   10I 0
     D   EntryCCSID                  10I 0
     D   CountryID                    2A
     D   LanguageID                   3A
     D   SubSetInd                    1A
     D                               42A
     D APIEntryPoint                256A
     D                              128A
      *
      *‚OBJL0200 returned data structure (QUSLOBJ)
      *
     D OBJL0200        DS                  Qualified Based(OBJL0200@)
     D   ObjName                     10A
     D   ObjLib                      10A
     D   ObjType                     10A
     D   ObjInfSts                    1A
     D   ObjExtAtr                   10A
     D   ObjText                     50A
     D   ObjUsrAtr                   10A
     D                                7A
      *
      *---------------------------------------------------------------------
      *‚Global variables
      *---------------------------------------------------------------------
      *
     D UsrSpc@         S               *
     D qUsrSpc         DS
     D   UsrSpc                      10A   Inz('QUSLOBJ')
     D   UsrSpcLib                   10A   Inz('QTEMP')
     D UsrSpcSize      C                   10000000
      *
     D                 DS
     D L                             10I 0
     D LibDArr                             Dim(5000)
     D LibName                       10A   Overlay(LibdArr)
     D LibText                       50A   Overlay(LibdArr:*Next)
     D NbrLibObj                     10I 0 Overlay(LibdArr:*Next)
     D LibTotSize                    20I 0 Overlay(LibdArr:*Next)
      *
     D R                             10I 0
     D TotLibX         S             10A
     D NbrLibObjX      S             10A
     D LibTotSizeX     S             20A
      *
      *---------------------------------------------------------------------
      *‚Program interface
      *---------------------------------------------------------------------
      *
     D main            PR                  Extpgm(ThisProgram)
     D   P_Lib                       10A   Const
     D   P_Sort                       5A   Const
      *
     D main            PI
     D   P_Lib                       10A   Const
     D   P_Sort                       5A   Const
      *
      *=====================================================================
      *‚MAINLINE
      *=====================================================================
      /free

        //‚Set variables

        LibAtrToRtvDS.Nbr    = 2;
        LibAtrToRtvDS.Elm(1) = 6; //‚Library size
        LibAtrToRtvDS.Elm(2) = 7; //‚Objects in library
        L          = 0;
        LibName    = *HIVAL;
        LibText    = *HIVAL;
        NbrLibObj  = *HIVAL;
        LibTotSize = *HIVAL;

        open(e) QSYSPRT;

        //‚Create the user space

        reset QUSEC;
        quscrtus( qUsrSpc : *blanks : UsrSpcSize : x'00' : '*ALL' :
                  *blanks : '*NO' : QUSEC );
        if QUSEC.ErrBytesAvail > 0 and QUSEC.ErrMsgID <> 'CPF9870';
          exsr *pssr;
        endif;

        //‚Retrieve the pointer to the user space.

        reset QUSEC;
        qusptrus( qUsrSpc : UsrSpc@ : QUSEC );
        if QUSEC.ErrBytesAvail > 0;
          exsr *pssr;
        endif;

        //‚List all the specified libraries into the user space

        reset QUSEC;
        quslobj( qUsrSpc : 'OBJL0200' : P_Lib + 'QSYS' : '*LIB' : QUSEC );
        if QUSEC.ErrBytesAvail > 0;
          exsr *pssr;
        endif;

        //‚Process each library in the user space

        QUSH0100@ = UsrSpc@;
        OBJL0200@ = QUSH0100@ + QUSH0100.ListDataOS;
        for L = 1 to QUSH0100.EntryNbr;
          exsr RtvLibDtls;
          OBJL0200@ = OBJL0200@ + QUSH0100.EntrySize;
        endfor;

        //‚Sort the array

        select;
          when P_Sort = '*NAME';
            sorta LibName;
          when P_Sort = '*TEXT';
            sorta LibText;
          when P_Sort = '*OBJ';
            sorta NbrLibObj;
          when P_Sort = '*SIZE';
            sorta LibTotSize;
          other;
        endsl;

        //‚Write out the output

        TotLibX = %char( QUSH0100.EntryNbr );
        except Header;

        for L = 1 to QUSH0100.EntryNbr;
          evalr NbrLibObjX  = %char( NbrLibObj( L ) );
          evalr LibTotSizeX = %char( LibTotSize( L ) );
          except Detail;
        endfor;

        except Footer;

        qusdltus( qUsrSpc : QUSEC );
        close(e) QSYSPRT;

        return;

        //‚RtvLibDtls: Retrieve library details

        begsr RtvLibDtls;

          //‚Don't try to process QSYS

          if OBJL0200.ObjName = 'QSYS';
            LibName( L )    = OBJL0200.ObjName;
            LibText( L )    = OBJL0200.ObjText;
            NbrLibObj( L )  = 0;
            LibTotSize( L ) = 0;
            leavesr;
          endif;

          //‚Retrieve the library details

          clear QLIRR;
          reset QUSEC;
          qlirlibd( QLIRR : %size( QLIRR ) : OBJL0200.ObjName :
                    LibAtrToRtvDS : QUSEC );
          if QUSEC.ErrBytesAvail > 0;
            LibName( L )    = OBJL0200.ObjName;
            LibText( L )    = '**UNABLE TO RETRIEVE DETAILS**';
            NbrLibObj( L )  = 0;
            LibTotSize( L ) = 0;
            leavesr;
          endif;

          LibName( L ) = OBJL0200.ObjName;
          LibText( L ) = OBJL0200.ObjText;

          //‚Process the library detail variable-length records

          VarLen@ = %addr( QLIRR ) + 16;
          for R = 1 to QLIRR.VarLenRcdRtn;
            select;
              when VarLenDS.KeyID = 6; //‚Library total size
                LibSizeDS = VarLenDS.FldValue;
                LibTotSize( L ) = LibSize * LibSizeMult;
              when VarLenDS.KeyID = 7; //‚Number of objects in library
                NbrLibObj( L ) = VarLenDS.FldValInt;
              other;
            endsl;
            VarLen@ = VarLen@ + VarLenDS.RtnDtaLen;
          endfor;

        endsr;

        //‚*PSSR Error subroutine

        begsr *pssr;
          close(e) QSYSPRT;
          qusdltus( qUsrSpc : QUSEC );
        endsr;

      /end-free
      *=====================================================================
     OQSYSPRT   E            Header         1  3
     O                                              'Library details for -
     O                                              library '''
     O                       P_Lib
     O                                              ''' (ordered by'
     O                       P_Sort              +1
     O                                              ')'
     O          E            Header      1  1
     O                                              'Libraries processed:'
     O                       TotLibX             +1
     O          E            Header      1  1
     O                                            7 'Library'
     O                                           16 'Text'
     O                                           73 'Objects'
     O                                           96 'Total size (bytes)'
     O          E            Header      1  1
     O                                           10 '=========='
     O                                           37 '========================='
     O                                           62 '========================='
     O                                           76 '=========='
     O                                           98 '===================='
      *---------------------------------------------------------------------
     O          E            Detail      1  1
     O                       LibName(L)          10
     O                       LibText(L)          62
     O                       NbrLibObjX          76
     O                       LibTotSizeX         98
      *---------------------------------------------------------------------
     O          E            Footer      2
     O                                              'End of library details -
     O                                              for library '''
     O                       P_Lib
     O                                              ''' (ordered by'
     O                       P_Sort              +1
     O                                              ')'
Write Comment (0 comments)
List actual library sizes using IBM API QLIRLIBD
User Rating: / 0
Written by Chamara Withanachchi   
      *‚Library size data structure (QLIRLIBD)
      *
     D LibSizeDS       DS
     D   LibSize                     10I 0
     D   LibSizeMult                 10I 0
     D   LibInfSts                     N
     D                                3A
      *
      *‚List API header structure (QUSLOBJ)
      *
     D QUSH0100        DS                  Based(QUSH0100@) Qualified
     D   UserArea                    64A
     D   GenHdrSize                  10I 0
     D   StructRlsLvl                 4A
     D   FormatName                   8A
     D   ApiUsed                     10A
     D   DatTimCrt                   13A
     D   InfStatus                    1A
     D   UsrSpcSize                  10I 0
     D   InpParmOS                   10I 0
     D   InpParmSize                 10I 0
     D   HeaderOS                    10I 0
     D   HeaderSize                  10I 0
     D   ListDataOS                  10I 0
     D   ListDataSize                10I 0
     D   EntryNbr                    10I 0
     D   EntrySize                   10I 0
     D   EntryCCSID                  10I 0
     D   CountryID                    2A
     D   LanguageID                   3A
     D   SubSetInd                    1A
     D                               42A
     D APIEntryPoint                256A
     D                              128A
      *
      *‚OBJL0200 returned data structure (QUSLOBJ)
      *
     D OBJL0200        DS                  Qualified Based(OBJL0200@)
     D   ObjName                     10A
     D   ObjLib                      10A
     D   ObjType                     10A
     D   ObjInfSts                    1A
     D   ObjExtAtr                   10A
     D   ObjText                     50A
     D   ObjUsrAtr                   10A
     D                                7A
      *
      *---------------------------------------------------------------------
      *‚Global variables
      *---------------------------------------------------------------------
      *
     D UsrSpc@         S               *
     D qUsrSpc         DS
     D   UsrSpc                      10A   Inz('QUSLOBJ')
     D   UsrSpcLib                   10A   Inz('QTEMP')
     D UsrSpcSize      C                   10000000
      *
     D                 DS
     D L                             10I 0
     D LibDArr                             Dim(5000)
     D LibName                       10A   Overlay(LibdArr)
     D LibText                       50A   Overlay(LibdArr:*Next)
     D NbrLibObj                     10I 0 Overlay(LibdArr:*Next)
     D LibTotSize                    20I 0 Overlay(LibdArr:*Next)
      *
     D R                             10I 0
     D TotLibX         S             10A
     D NbrLibObjX      S             10A
     D LibTotSizeX     S             20A
      *
      *---------------------------------------------------------------------
      *‚Program interface
      *---------------------------------------------------------------------
      *
     D main            PR                  Extpgm(ThisProgram)
     D   P_Lib                       10A   Const
     D   P_Sort                       5A   Const
      *
     D main            PI
     D   P_Lib                       10A   Const
     D   P_Sort                       5A   Const
      *
      *=====================================================================
      *‚MAINLINE
      *=====================================================================
      /free

        //‚Set variables

        LibAtrToRtvDS.Nbr    = 2;
        LibAtrToRtvDS.Elm(1) = 6; //‚Library size
        LibAtrToRtvDS.Elm(2) = 7; //‚Objects in library
        L          = 0;
        LibName    = *HIVAL;
        LibText    = *HIVAL;
        NbrLibObj  = *HIVAL;
        LibTotSize = *HIVAL;

        open(e) QSYSPRT;

        //‚Create the user space

        reset QUSEC;
        quscrtus( qUsrSpc : *blanks : UsrSpcSize : x'00' : '*ALL' :
                  *blanks : '*NO' : QUSEC );
        if QUSEC.ErrBytesAvail > 0 and QUSEC.ErrMsgID <> 'CPF9870';
          exsr *pssr;
        endif;

        //‚Retrieve the pointer to the user space.

        reset QUSEC;
        qusptrus( qUsrSpc : UsrSpc@ : QUSEC );
        if QUSEC.ErrBytesAvail > 0;
          exsr *pssr;
        endif;

        //‚List all the specified libraries into the user space

        reset QUSEC;
        quslobj( qUsrSpc : 'OBJL0200' : P_Lib + 'QSYS' : '*LIB' : QUSEC );
        if QUSEC.ErrBytesAvail > 0;
          exsr *pssr;
        endif;

        //‚Process each library in the user space

        QUSH0100@ = UsrSpc@;
        OBJL0200@ = QUSH0100@ + QUSH0100.ListDataOS;
        for L = 1 to QUSH0100.EntryNbr;
          exsr RtvLibDtls;
          OBJL0200@ = OBJL0200@ + QUSH0100.EntrySize;
        endfor;

        //‚Sort the array

        select;
          when P_Sort = '*NAME';
            sorta LibName;
          when P_Sort = '*TEXT';
            sorta LibText;
          when P_Sort = '*OBJ';
            sorta NbrLibObj;
          when P_Sort = '*SIZE';
            sorta LibTotSize;
          other;
        endsl;

        //‚Write out the output

        TotLibX = %char( QUSH0100.EntryNbr );
        except Header;

        for L = 1 to QUSH0100.EntryNbr;
          evalr NbrLibObjX  = %char( NbrLibObj( L ) );
          evalr LibTotSizeX = %char( LibTotSize( L ) );
          except Detail;
        endfor;

        except Footer;

        qusdltus( qUsrSpc : QUSEC );
        close(e) QSYSPRT;

        return;

        //‚RtvLibDtls: Retrieve library details

        begsr RtvLibDtls;

          //‚Don't try to process QSYS

          if OBJL0200.ObjName = 'QSYS';
            LibName( L )    = OBJL0200.ObjName;
            LibText( L )    = OBJL0200.ObjText;
            NbrLibObj( L )  = 0;
            LibTotSize( L ) = 0;
            leavesr;
          endif;

          //‚Retrieve the library details

          clear QLIRR;
          reset QUSEC;
          qlirlibd( QLIRR : %size( QLIRR ) : OBJL0200.ObjName :
                    LibAtrToRtvDS : QUSEC );
          if QUSEC.ErrBytesAvail > 0;
            LibName( L )    = OBJL0200.ObjName;
            LibText( L )    = '**UNABLE TO RETRIEVE DETAILS**';
            NbrLibObj( L )  = 0;
            LibTotSize( L ) = 0;
            leavesr;
          endif;

          LibName( L ) = OBJL0200.ObjName;
          LibText( L ) = OBJL0200.ObjText;

          //‚Process the library detail variable-length records

          VarLen@ = %addr( QLIRR ) + 16;
          for R = 1 to QLIRR.VarLenRcdRtn;
            select;
              when VarLenDS.KeyID = 6; //‚Library total size
                LibSizeDS = VarLenDS.FldValue;
                LibTotSize( L ) = LibSize * LibSizeMult;
              when VarLenDS.KeyID = 7; //‚Number of objects in library
                NbrLibObj( L ) = VarLenDS.FldValInt;
              other;
            endsl;
            VarLen@ = VarLen@ + VarLenDS.RtnDtaLen;
          endfor;

        endsr;

        //‚*PSSR Error subroutine

        begsr *pssr;
          close(e) QSYSPRT;
          qusdltus( qUsrSpc : QUSEC );
        endsr;

      /end-free
      *=====================================================================
     OQSYSPRT   E            Header         1  3
     O                                              'Library details for -
     O                                              library '''
     O                       P_Lib
     O                                              ''' (ordered by'
     O                       P_Sort              +1
     O                                              ')'
     O          E            Header      1  1
     O                                              'Libraries processed:'
     O                       TotLibX             +1
     O          E            Header      1  1
     O                                            7 'Library'
     O                                           16 'Text'
     O                                           73 'Objects'
     O                                           96 'Total size (bytes)'
     O          E            Header      1  1
     O                                           10 '=========='
     O                                           37 '========================='
     O                                           62 '========================='
     O                                           76 '=========='
     O                                           98 '===================='
      *---------------------------------------------------------------------
     O          E            Detail      1  1
     O                       LibName(L)          10
     O                       LibText(L)          62
     O                       NbrLibObjX          76
     O                       LibTotSizeX         98
      *---------------------------------------------------------------------
     O          E            Footer      2
     O                                              'End of library details -
     O                                              for library '''
     O                       P_Lib
     O                                              ''' (ordered by'
     O                       P_Sort              +1
     O                                              ')'
Write Comment (0 comments)
<< Start < Previous 1 2 3 4 5 6 7 8 9 10 Next > End >>

Results 51 - 60 of 626