[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Open a stream file with a specific CCSID
Sender: Magne Kofoed <magne@xxxxxxxxx>
Thanks Scott,
the input pdf file had ccsid=1252 and this open worked great!
C* Open a stream file
c eval fd = open
('/tmp/testwrite.pdf':
c O_WRONLY+O_CREAT+O_CCSID
c +O_TEXTDATA+O_TEXT_CREAT
c : 511: 1252: 0 )
Best regards,
Magne
Sender: Scott Klement <sk@xxxxxxxxxxxxxxxx>
> How do I open a stream file with a specific CCSID?
>
> C* Open a stream file
> c eval fd = open
('/tmp/testwrite.pdf':
> c
O_WRONLY+O_TRUNC+O_CREAT: 511)
>
> The IFSIO_H says that the needed flags are added together.
> But how do I get CCSID=1281 when the constant is 32?
The constant tells the API that you want to assign a CCSID.
It expects
you to pass an additional parameter to the API that tells it
what the
CCSID is.
Note also that the CCSID will not be assigned unless the
file doesn't
exist and the open() API has to create it. To make sure
that the file
doesn't exist prior to calling the open() API, you should
delete it with
the unlink() API.
For example, the following code creates a file
called /tmp/testwrite.pdf
and assigns it a CCSID of 1281:
c callp unlink
('/tmp/testwrite.pdf')
c eval fd = open
( '/tmp/testwrite.pdf'
c :
O_WRONLY+O_CREAT+O_CCSID
c : 511
c : 1281 )
Note that the data that you write is assumed to already be
in CCSID 1281
-- the API won't automatically translate it for you unless
the file
already exists on disk, and you specify O_TEXTDATA. So, if
you want it to
translate from your current job's CCSID to 1281, you have to
do the
following:
c callp unlink
('/tmp/testwrite.pdf')
** open the file once to create it with a CCSID of
1281:
c eval fd = open
( '/tmp/testwrite.pdf'
c :
O_WRONLY+O_CREAT+O_CCSID
c : 511
c : 1281 )
c callp close(fd)
** open the file a second time to perform translation
with
** O_TEXTDATA
c eval fd = open
( '/tmp/testwrite.pdf'
c :
O_WRONLY+O_TEXTDATA )
This "two opens" technique was the only way to force
translation to a
newly created file in V5R1 and earlier. In V5R2, they added
a new option
called O_TEXT_CREAT that let you do the translation in a
single call to
open():
c eval fd = open
( '/tmp/testwrite.pdf'
c : O_WRONLY +
O_CREAT + O_CCSID
c + O_TEXTDATA
+ O_TEXT_CREAT
c : 511
c : 1281
c : 0 )
Note that CCSIDs in files stored in the IFS first became
available in
V5R1. However, the above techniques (other than
O_TEXT_CREAT) will work
on previous versions of OS/400 if you use O_CODEPAGE instead
of O_CCSID.
Good Luck!
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubsribe from the list send mail
to majordomo@xxxxxxxxxxxxx with the body: unsubscribe ftpapi mymailaddr
-----------------------------------------------------------------------