|
Rich Duzenbury wrote:
Hello, I've ALLOC'd some variable amount of storage, and now I want to move some data into it. I currently use the following idiom to base a character variable onto a pointer: D pentry s * D entry s 100 based(pentry) Now, I can MOVEL some data into entry (up to 100 bytes), and it goes where the pointer is pointing to quite nicely. My problem is that since the amount of storage is variable, I don't want to have to declare a fixed length for the 'entry' variable. How can I copy data into the contents of pentry while avoiding a fixed length restriction?
Clearly, MOVEL is inappropriate since you don't often really know how much storage is actually allocated. First, as someone else mentioned, declare your based variable with some large length, such as 65535. Since no static storage is allocated, the length doesn't really matter. Then, *only* work with the data using %SUBST. If the length is maintained in variable ENTRY_LEN, then use the based variable as %SUBST(ENTRY:1:ENTRY_LEN). This works on both left-hand side and right-hand side of an EVAL statement. Of course, you're still limited to a maximum of 65535 characters. If you want to work with more data than that, then you need to manage the bits and bytes yourself at an even lower level. On the other hand, I'd recommend keeping things simple and just use a normal statically allocated, varying length character variable, even if it takes up a lot of storage. It's a lot easier than having to mess around with pointers and the extra complexity of remembering the actual allocated size. I'm sure you can handle these issues fine, but what about the next programmer who has to maintain this code? You just have to forget the %SUBST once to get into potentially very tricky debugging problems. Cheers! Hans
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.