
|
* iconv() demo
H DFTACTGRP(*NO) ACTGRP(*NEW)
H BNDDIR('QC2LE')
 
d iconv_t DS based(prototype_only)
d return_value 10I 0
d cd 10I 0 dim(12)
 
d from DS
d from_CCSID 10I 0
d from_ConvAlt 10I 0 inz(0)
d from_SubsAlt 10I 0 inz(0)
d from_ShiftAlt 10I 0 inz(1)
d from_InpLenOp 10I 0 inz(0)
d from_ErrorOpt 10I 0 inz(1)
D from_Reserved 8A inz(*ALLx'00')
 
d to DS
d to_CCSID 10I 0
d to_ConvAlt 10I 0 inz(0)
d to_SubsAlt 10I 0 inz(0)
d to_ShiftAlt 10I 0 inz(1)
d to_InpLenOp 10I 0 inz(0)
d to_ErrorOpt 10I 0 inz(1)
D to_Reserved 8A inz(*ALLx'00')
 
d QtqIconvOpen PR extproc('QtqIconvOpen')
d like(iconv_t)
d tocode like(to) const
d fromcode like(from) const
 
d iconv PR 10U 0 extproc('iconv')
d cd like(iconv_t) value
d inbuf *
d inbytesleft 10U 0
d outbuf *
d outbytesleft 10U 0
 
D iconv_close PR 10I 0 extproc('iconv_close')
D cd like(iconv_t) value
 
D ic ds likeds(iconv_t)
D Data s 12A
D p_Data s *
|
D DataLen s 10U 0 D UTF8_Data s 72A D p_UTF8_Data s * D UTF8DataLen s 10U 0   * * 1208 = Unicode, UTF-8 * 0 = special value meaning "current job's CCSID" * 819 = ISO-8859-1 ASCII * 1252 = Windows Latin-1 ASCII * c eval to_CCSID = 1208 c eval from_CCSID = 0     * * initialize iconv() API * c eval ic = QtqIconvOpen(to: from) c if ic.return_value = -1 ** ... FIXME: handle error ... c endif     * * Input string is "Hello World!" * * c eval Data = 'Hello World!' c eval p_Data = %addr(Data) c eval DataLen = %len(Data)   * * Get output string ready. * c eval p_UTF8_Data = %addr(UTF8_data) c eval UTF8DataLen = %len(UTF8_data)   * * Convert string to UTF8. Note that this changes the values of * p_Data, DataLen, p_UTF8_Data and UTF8DataLen as it processes * each character. * c if iconv(ic: p_Data: DataLen: |
c p_UTF8_Data: UTF8DataLen) = -1 ** ... FIXME: handle error ... c endif   * * UTF8DataLen will now contain the data converted to the UTF8 CCSID *   * * call iconv_close() to free up resources when done * c callp iconv_close(ic) c eval *inlr = *on |