|
maybe ... you could set up the teraspace management process as a separate data queue driven server job. In addition to the partial solution provided by Simon, add a C module to convert between 8 byte and 16 byte pointers, and have the 16 byte pointers stored in the main RPG IV server process in a based data structure. The magic cookie would be the offset to the 16 byte pointer in the RPG IV data structure, and could be returned to the calling process, again via dtaq. If the idea is good, you could call the server process a Bakery. Otherwise, call it half baked. -Dave K. ----- Original Message ----- From: "Walden H. Leverich" <WaldenL@TechSoftInc.com> To: <midrange-l@midrange.com> Sent: Thursday, December 20, 2001 11:27 AM Subject: RE: Teraspace memory allocation > 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. > _______________________________________________ > 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.