|
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 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.