× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Simon,

many thanks for your detailled explanation. It's now more clear to me how to
handle long data strings in DTAQs.
Kind regards,
GEFIS Gesellschaft für
Individual-Software mbH
Werner Noll
-----Ursprüngliche Nachricht-----
Von: Simon Coulter [mailto:shc@xxxxxxxxxxxxxxxxx]
Gesendet: Freitag, 7. November 2003 21:27
An: Midrange Systems Technical Discussion
Betreff: Re: Max. Length of Data Buffer in DTAQs



On Friday, November 7, 2003, at 07:40  PM, Werner Noll wrote:

> what is the real max. lenght of a data buffer in a DTAQ? The CRTDTAQ  
> command
> provides a max. lenght of 64512 bytes. The data buffer e.g. in the  
> QSNDDTAQ
> API is obviously a character field and therefore limitted to 32767  
> byte. How
> can I use the space beyond that limit? Can the data buffer be a field  
> with
> varying lenght and thus larger than 32767 byte?

The maximum length is the length specified when the data queue was  
created.

The QSNDDTAQ API will accept a data buffer of any length as long as the  
length specified on the API does not exceed the maximum length of the  
data queue entry.

RPG IV (and some other HLLs) imposes a restriction of 32KB on character  
fields prior to 510. From 510 RPG supports 64KB character fields.

Because the QSNDDTAQ API is a *PGM object it expects parameters passed  
by reference--that means the address of each variable is passed to the  
API. If you understand that a variable passed by reference is EXACTLY  
the same as a pointer passed by value you can use the full length of a  
data queue entry by prototyping the API to accept a pointer by value to  
the data buffer.

Below is my prototype for the QSNDDTAQ API. If you include it in your  
program source like:
        /define USE_BUFFER_POINTER
        /include rpgleinc,qsnddtaq

then you will be able to invoke it passing a pointer to the data. For  
example:

D data            S          32767
D dataLen         S              5P 0

C                   CALLP       QSNDDTAQ( 'MYQUEUE' : 'MYLIB' :
C                                         dataLen : %ADDR(data) )

--or--

D dataPtr         S               *
D dataLen         S              5P 0

C                   CALLP       QSNDDTAQ( 'MYQUEUE' : 'MYLIB' :
C                                         dataLen : dataPtr )

Regards,
Simon Coulter.
--------------------------------------------------------------------
    FlyByNight Software         AS/400 Technical Specialists

    http://www.flybynight.com.au/
    Phone: +61 3 9419 0175   Mobile: +61 0411 091 400        /"\
    Fax:   +61 3 9419 0175                                   \ /
                                                              X
                  ASCII Ribbon campaign against HTML E-Mail  / \
--------------------------------------------------------------------

  /if defined(QSNDDTAQ_h)
  /eof
  /else
  /define QSNDDTAQ_h
  *** START HEADER FILE SPECIFICATIONS  
************************************
  *                                                                       
  *
  * Header File Name  . . . . : QSNDDTAQ                                  
  *
  *                                                                       
  *
  * Descriptive Name  . . . . : Send Data Queue Message API.              
  *
  *                                                                       
  *
  * Copyright:                                                            
  *
  *   (C) Copyright FlyByNight Software Pty. Ltd. 2001                    
  *
  *       All rights reserved.                                            
  *
  *                                                                       
  *
  * Description . . . . . . . : Header file for Send Data Queue Message   
  *
  *                             API which sends a message (or entry) to   
  *
  *                             the specified data queue.                 
  *
  *                                                                       
  *
  * Header Files Included . . : *NONE                                     
  *
  *                                                                       
  *
  * Macros List . . . . . . . : *NONE                                     
  *
  *                                                                       
  *
  * Structure List  . . . . . : *NONE                                     
  *
  *                                                                       
  *
  * Function Prototype List . : QSNDDTAQ                                  
  *
  *                                                                       
  *
  * Notes:                                                                
  *
  *   Dependencies  . . . . . :                                           
  *
  *                                                                       
  *
  *   Restrictions  . . . . . :                                           
  *
  *                                                                       
  *
  *   Comments  . . . . . . . : Define the macro LONG_PROC_NAMES if you   
  *
  *                               want meaningful procedure names.        
  *
  *                             Define the macro USE_BUFFER_POINTER if    
  *
  *                               you want to use pointers to buffers.    
  *
  *                                                                       
  *
  * Change Activity:                                                      
  *
  *               Rlse &                                                  
  *
  * Flag Reason   Level  Date   Pgmr       Comments                       
  *
  * ---- -------- ------ ------ ----------  
------------------------------ *
  * $A0=          VRM310 010824 SHC        New include.                   
  *
  *                                                                       
  *
  *  Change activity detail:                                              
  *
  *                                                                       
  *
  *** END HEADER FILE SPECIFICATIONS  
**************************************

   
************************************************************************ 
*
  * Constants                                                             
  *
   
************************************************************************ 
*
D $DQ_DDM_ASYNC_YES...
D                 C                   CONST('*YES      ')
D $DQ_DDM_ASYNC_NO...
D                 C                   CONST('*NO       ')

   
************************************************************************ 
*
  * Prototype for calling Data Queue API QSNDDTAQ                         
  *
   
************************************************************************ 
*
  /if defined(LONG_PROC_NAMES)
D QmhqSndDtaqEntry...
D                 PR
  /else
D QSNDDTAQ        PR
  /endif
D                                     EXTPGM('QSNDDTAQ')
  *
  * Required parameter group:
  *                             Data queue name
D   dtaqName                    10    CONST
  *                             Data queue library name
D   dtaqLib                     10    CONST
  *                             Length of data queue entry
D   dtaqEntryLen                 5P 0 CONST
  *                             Data queue entry
  /if defined(USE_BUFFER_POINTER)
D   dtaqEntry                     *   VALUE
  /else
D   dtaqEntry                32767    CONST OPTIONS(*VARSIZE)
  /endif
  *
  * Optional parameter group 1:
  *                             Length of key
D   keyLen                       3P 0 CONST OPTIONS(*NOPASS)
  *                             Key value
  /if defined(USE_BUFFER_POINTER)
D   keyData                       *   VALUE OPTIONS(*NOPASS)
  /else
D   keyData                    256    CONST OPTIONS(*VARSIZE:*NOPASS)
  /endif
  *
  * Optional parameter group 2:
  *                             Asynchronous request
D   asyncRqs                    10    CONST OPTIONS(*NOPASS)

  /endif 
                                                              


_______________________________________________
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list
To post a message email: MIDRANGE-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/midrange-l.


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.