|
Nelsom C. Smith <ncsmith@gate.net wrote: >... >I didn't use that method or the movel method for packed fields because I >didn't want to have to choose between 900 different packed field sizes. For >them, I just counted bits and put the numbers, decimal point, & sign >directly into an alpha field. Every other type seems to work ok with the >Movel (I haven't gotten to blobs yet, but I assume they will work like >varchars). >... For packed, since the decimal point isn't really there, you really only need 30 different lengths to choose from to get a substringable (zoned) form, then you could handle the decimal point and sign the same as you are already handling zoned. You could also try the MI builtin _LBCPYNV which can convert from packed to zoned (see example code below): Blobs ... you need embedded SQL to get that data out. RPG itself can't see the blob data. Barbara Morris ---------------------------------------------------- Here's a little toy program I wrote a while ago that uses lbcpynv to convert from packed to zoned: D DPA_Template DS based(pDPA_Template) D DPA_type 1A D DPA_len 5I 0 D DPA_frac 1A overlay(DPA_len:1) D DPA_digit 1A overlay(DPA_len:2) D DPA_res 10i 0 D T_ZONED C x'02' D T_PACKED C x'03' D cpynv pr extproc('_LBCPYNV') D tgtNum * VALUE D tgtAttr LIKE(DPA_Template) D srcNum * VALUE D srcAttr LIKE(DPA_Template) * If you are on V4R4 or later, you can use 3U 0 for the * frac and digit values and set the values directly * in the template without using this binchar stuff. D ds D bin 5i 0 D binchar 1a overlay(bin:2) D packedDesc S LIKE(DPA_Template) D zonedDesc S LIKE(DPA_Template) * Sample data D p DS D pval 7P 3 inz(-1234.567) D s DS D sval 7S 3 inz(*hival) * Setup the packed descriptor C eval pDPA_Template = %addr(packedDesc) C eval DPA_Template = *allx'00' C eval DPA_Type = T_PACKED * Setup the length part C eval bin = %len(pval) C eval DPA_digit = binChar C eval bin = %decpos(pval) C eval DPA_frac = binChar * Setup the zoned descriptor like the packed one C eval zonedDesc = packedDesc C eval pDPA_Template = %addr(zonedDesc) C eval DPA_Type = T_ZONED * Convert from packed to zoned C callp cpynv(%addr(s) : zonedDesc : C %addr(p) : packedDesc) * Debugger: ===> EVAL sval:x F1F2F3F4 F5F6D7 C return From QSYSINC/MI H, members MICPTCOM and LBCPYNV: typedef _Packed struct _DPA_Template_T { /* Data Pointer Attr template */ char Type; /* Scalar type */ short Length; /* Scalar length: */ /* 0-7 = fractional digits */ /* (zoned or packed) */ /* 8-15 = total digits */ int reserved; /* reserved for future use */ /* and must be set to zero */ } _DPA_Template_T; #define _T_SIGNED 0x00 #define _T_FLOAT 0x01 #define _T_ZONED 0x02 #define _T_PACKED 0x03 #define _T_CHAR 0x04 #define _T_ONLYNS 0x06 #define _T_ONLYN 0x07 #define _T_EITHER 0x08 #define _T_OPEN 0x09 #define _T_UNSIGNED 0x0A void _LBCPYNV ( _SPCPTR, /* Receiver * _DPA_Template_T *, /* Receiver attributes * _SPCPTRCN, /* Source * _DPA_Template_T * ); /* Source attributes * +--- | This is the Midrange System Mailing List! | To submit a new message, send your mail to MIDRANGE-L@midrange.com. | To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com. | To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: david@midrange.com +---
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.