Simon,

Thanks, the VALUE option helped a lot. I can allocate and deallocate
teraspace, cool. However, the other reason I wanted teraspace (besides >
16Meg) was the statement that teraspace pointers don't need to be quad-word
aligned and aren't tagged. I hoped I could pass them around to non-ILE
programs as 8-byte character arrays. I know I can't do the following with
space pointers but I was hoping for success with teraspace pointers since
they aren't tagged and aren't quad-word aligned.

Pnew              B                   export
Dnew              pi            16

DMsgP             s               *
D@Msg             s               *
DMsg              s             16    based(@Msg)

 *Allocate 20Meg from teraspace
C                   eval      msgp=tsmalloc(20000000)
 *Set @Msg to the address of the pointer returned from teraspace
c                   eval      @msg = %addr(msgp)
 *Return the 16-byte character value of the pointer into teraspace
c                   return    msg
c

P                 E


PDestroy          B                   export
DDestroy          pi            10i 0
D e                             16

dMsgP             s               *
d@MsgP            s               *
dMsg              s             16    based(@MsgP)
drc               s             10i 0

 *Get the address of the pointer
c                   eval      @msgP = %addr(msgp)
 *Load the pointer with the character data passed in -- this was returned
from the New() function
c                   eval      msg = e

 *Free the space
c                   callp     tsfree(msgp)
C                   return    0
P                 E



-Walden

------------
Walden H Leverich III
President
Tech Software
(516)627-3800 x11
WaldenL@TechSoftInc.com
http://www.TechSoftInc.com



-----Original Message-----
From: Simon Coulter [mailto:shc@flybynight.com.au]
Sent: Thursday, December 20, 2001 03:22
To: midrange-l@midrange.com
Subject: Re: Teraspace memory allocation



Hello Walden,

You wrote:
>Where did you find out about the TERASPACE__ define?

Nowhere.  That's just my version of the __TERASPACE__ define used in the C
include for stdlib since RPG IV doesn't allow names beginning with
underscores.  Its only effect is to change the EXTPROC associated with the
various storage allocation functions.

>Also, what's in your STDLIB include?

An RPG IV version of all the stuff that is in the C stdlib . . .  but that's
not really what you were asking is it?  Here is an excerpt from my STDLIB
that contains the definitions you need.

*========================================================================*
      * Allocate and initialise storage for an array
*
      *                void    *calloc   ( size_t, size_t );
*

*========================================================================*
             D calloc          PR                  LIKE(pointer_t)
 @A1A  /if defined(TERASPACE__)
 @A1A D                                     EXTPROC('_C_TS_calloc')
 @A1A  /else
      D                                     EXTPROC('calloc')
 @A1A  /endif
       *
       * Required parameter group:
       *                             Number of elements to allocate
      D   nbrElem                           LIKE(size_t) VALUE
       *                             Size of each element
      D   size                              LIKE(size_t) VALUE


*========================================================================*
       * Release allocated storage
*
       *                void     free     ( void * );
*

*========================================================================*
      D free            PR
 @A1A  /if defined(TERASPACE__)
 @A1A D                                     EXTPROC('_C_TS_free')
 @A1A  /else
      D                                     EXTPROC('free')
 @A1A  /endif
       *
       * Required parameter group:
       *                             Address of storage to release
      D   stgPtr                            LIKE(pointer_t) VALUE


*========================================================================*
       * Allocate and initialise storage block
*
       *                void    *malloc   ( size_t );
*

*========================================================================*
      D malloc          PR                  LIKE(pointer_t)
 @A1A  /if defined(TERASPACE__)
 @A1A D                                     EXTPROC('_C_TS_malloc')
 @A1A  /else
      D                                     EXTPROC('malloc')
 @A1A  /endif
       *
       * Required parameter group:
       *                             Size of storage to allocate
      D   size                              LIKE(size_t) VALUE


*========================================================================*
       * Change allocated storage block size
*
       *                void    *realloc  ( void *, size_t );
*

*========================================================================*
      D realloc         PR                  LIKE(pointer_t)
 @A1A  /if defined(TERASPACE__)
 @A1A D                                     EXTPROC('_C_TS_realloc')
 @A1A  /else
      D                                     EXTPROC('realloc')
 @A1A  /endif
       *
       * Required parameter group:
       *                             Address of storage to reallocate
      D   stgPtr                            LIKE(pointer_t) VALUE
       *                             Size of storage to allocate
      D   size                              LIKE(size_t) VALUE

You'll also need the following from STDDEF

D size_t          S                   LIKE(uint_t)

and the following from my C_RPG_TYPE include

@A1A D char_t          S              3I 0
     D short_t         S              5I 0
     D int_t           S             10I 0
     D long_t          S                   LIKE(int_t)
@A1A D longLong_t      S             20I 0
@A1A D uchar_t         S              3U 0
     D ushort_t        S              5U 0
     D uint_t          S             10U 0
     D ulong_t         S                   LIKE(uint_t)
@A1A D ulongLong_t     S             20U 0
     D float_t         S              4F
     D double_t        S              8F
     D longDouble_t    S                   LIKE(double_t)
     D pointer_t       S               *
     D funcPtr_t       S               *   PROCPTR

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   mailto: shc@flybynight.com.au   \ /
                                                             X
                 ASCII Ribbon campaign against HTML E-Mail  / \
--------------------------------------------------------------------

_______________________________________________
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list
To post a message email: MIDRANGE-L@midrange.com To subscribe, unsubscribe,
or change list options,
visit: http://lists.midrange.com/cgi-bin/listinfo/midrange-l
or email: MIDRANGE-L-request@midrange.com
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-Ups:

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

This mailing list archive is Copyright 1997-2022 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.