1.
What is the difference between ANSI C and Standard C?
2.
Given the macro:
#define list(a,b) printf(#a "=%d\n" #b "=%d\n",a,b);
what does:
list(howard,harriet)
expand into?
3.
What does the 
##
operator do?
4.
If you define the function 
log
in your program, what portability risks do you run?
5.
Should you 
#include
systems headers before application headers? Does it matter? Why
or why not?
6.
What can you say about a function defined by the following prototype:
void eniwel(const int i, const int *i, ...);
7.
What is the difference between a function defined by:
julie();
and:
int julie(void);
8.
When would you need to use the 
volatile
attribute?
9.
What does this do?
wchr = '??';
P
age 191
10.
Given the structure:
struct time { 
unsigned char  hours; 
unsigned char  minutes; 
unsigned char  seconds; 
};                   
may the compiler pack this structure into 3 bytes? May the compiler insert pad bytes between
hours
and 
minutes
? May the compiler store 
seconds
at a lower address than 
hours
?
P
age 193
Chapter 10
Porting to Far-off Lands 
Adding image to pdf in preview - insert images into PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sample C# code to add image, picture, logo or digital photo into PDF document page using PDF page editor control
how to add an image to a pdf in acrobat; how to add image to pdf in preview
Adding image to pdf in preview - VB.NET PDF insert image library: insert images into PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide VB.NET Programmers How to Add Images in PDF Document
add png to pdf preview; how to add image to pdf reader
The C programming language and the UNIX system were invented by people who speak
English, and the intended users all spoke English. The seven-bit ASCII code was capable of
holding every character anyone really needed. As C and UNIX grew into international
standards, the demand grew for them to address the needs of the world outside of New
Jersey.
If you are in the United States and you are sure you will never have to port your software to
other countries or cultures, then you can skip this chapter.
*
Some Definitions
Before we get too far into the subject, it is worth defining some terms.
Internationalization
A program written for a specific culture and following a set of local customs may be difficult
to move elsewhere. It is possible to write programs which make no assumptions about
language, local customs, or coded character set. Such programs are said to be
internationalized. 
That is, internationalization means making our software location neutral.
Localization
Making a program specific to any particular language, cultural convention, and codeset is
referred to as 
localization. 
In the ideal situation, no changes in program logic are required: all
localization is done by compiling with the correct library and incl
uding the proper data files.
Locale
We need a specific term to refer to a set of language and cultural rules. POSIX calls it a 
locale.
A program must be able to determine its locale and "do the right thing."
* Of course, you may be wrong. I have lots of horror stories about people who knew that their
software was only for the domestic market only to have the boss come in with the big deal they just
closed in Saudi Arabia. Then there was the person who discover
ed that Puerto Rico was part of the
United States.
P
age 194
Locale Control
A number of things can vary from one locale to the next. Before I discuss the programming
techniques to use, we should understand the problem we are up against.
Character and Codeset 
The character set for the United States is based on seven-bit characters defined by the
American Standard Code for Information Interchange (ASCII). For many locales, additional
characters are required, such as: ce 
å ß Ç and 
The 8-bit International Stand
ard code ISO
8859-1:1987 has enough special characters to handle major Western European languages.
C# Word - Insert Image to Word Page in C#.NET
Preview Document. Conversion. Convert Word to PDF. Convert Word to HTML5. VB.NET How-to, VB.NET PDF, VB.NET Word It's a demo code for adding image to word page using
add picture to pdf file; adding images to pdf forms
C# PowerPoint - Insert Image to PowerPoint File Page in C#.NET
Preview Document. Conversion. Convert PowerPoint to PDF. Convert PowerPoint to Pages. Annotate PowerPoint. Text Search. Insert Image. Thumbnail Create.
add photo to pdf file; add a picture to a pdf file
Because the low-order seven bits of ISO 8859 are the same as ASCII, most data files can be
exchanged.
It is important that our programs be "eight-bit clean." Programs that use the 0200 bit of
characters as some form of internal flag fail in eight-bit locales.
The problem is more difficult in Asia, where the character set might consist of thousands of
characters. Clearly, eight bits cannot do the job. Characters with more than eight bits per
character, (called 
wide characters) 
and characters that consist of a se
quence of eight-bit bytes,
(called 
multi-byte characters) 
provide support for Asian languages. These are covered later in
this chapter.
Messages
One obvious thing to fix is hardcoded messages. Statements such as:
printf("Hello, World\n");
will not work well in places where the correct output is something like:
Bonjour tout le monde
The mechanism used to solve this problem is called a 
message catalog. 
The message catalog
provides an external file of messages that can be translated without access to the source code.
Unfortunately, POSIX does not yet have a message catalog facility. Such a facility is part of the
X/Open Portability Guide and is included as part of AT&T UNIX System V.4.0. This facility is
covered later in this chapter in the Section entitled "Native Lan
guage Messages."
Representation of Numbers
Different cultures have different ways of representing numbers. The most common are the
English (12,345.67) and the French (12.345,67). The decimal point and the comma are
interchanged.
In Asia, four-digit groups are preferred (e.g., 1,2345.67).
P
age 195
Currency
Currency symbols vary both in terms of the character used and in its position.
Dates
The format of dates and times is not universally defined. January 9, 1990 may be written as
1/9/90 in the United States and as 9.1.90 in Germany.
The use of AM and PM is also not universal. Some locals use 24-hour time. Some use a colon
(:) between the hour and the minutes and others use a dot(.).
Setting the Current Locale
A program needs to select its locale. A single program might be capable of operating in a large
C# PDF Page Insert Library: insert pages into PDF file in C#.net
applications. Support adding and inserting one or multiple pages to existing PDF document. Forms. Ability to add PDF page number in preview. Offer
add picture to pdf; adding jpg to pdf
C# PDF insert text Library: insert text into PDF content in C#.net
Supports adding text to PDF in preview without adobe reader installed in ASP.NET. Powerful .NET PDF edit control allows modify existing scanned PDF text.
add image to pdf java; how to add image to pdf in acrobat
number of places. A user may want to switch from locale to locale based on what he or she is
doing. The 
setlocale()
function is used to select the locale. This 
is defined as:
char *setlocale(int category, const char *locale);
The category argument is a symbolic constant and tells the setlocale( ) function which items to
set. The effect of the locale settings is described in the next section. The choices are:
LC_COLLATE
Changes the behavior of the 
strcoll()
and 
strxfrm() 
functions.
LC_CTYPE
Changes the behavior of the character-handling functions:
isalpha(), isgraph(), islower(), isprint(),
ispunct(), isspace(), isupper(), toupper()
, and
tolower()
; and of the m
ulti-byte functions: 
mblen()
,
mbtowc(),wctomb(),mbstowcs()
, and 
wcstombs()
.
LC_MONETARY
Changes the information returned by 
localeconv( )
.
LC_MESSAGES
Changes the language in which messages are displayed.
LC_NUMERIC
Changes the radix character for numeric 
conversions.
LC_TIME
Changes the behavior of the 
strftime()
function.
LC_ALL
Changes all of the above.
The 
locale
argument is the name of a locale. There are a few special locale names:
"
C
"
Makes everything work as defined in the C standard. No locale-specific actions
take place.
"
POSIX
"
Has the same effect as "
C
".
P
age 196
" "
Selects the native locale. This is done using the following steps:
1.
If 
LC_ALL
is defined in the environment and is not null, the value of 
LC_ALL
is used.
2.
If there is a variable defined in the environment with the same name as the category and
wh
ich is not null, the value specified by that environment variable is used.
3.
If 
LANG
is defined in the environment and is not null, the value of 
LANG
is used.
VB.NET PDF insert text library: insert text into PDF content in vb
Multifunctional Visual Studio .NET PDF SDK library supports adding text content to adobe PDF document in VB.NET Add text to PDF in preview without adobe
how to add an image to a pdf in preview; adding an image to a pdf in preview
C# Create PDF Library SDK to convert PDF from other file formats
Load PDF from existing documents and image in SQL server. Besides, using this PDF document metadata adding control, you can add some additional
add image to pdf acrobat reader; add photo to pdf for
If the resulting value is the same as a supported locale, that name is used. If the value does
name a supported locale (and is not null), 
setlocale()
returns a 
NULL
pointer, and the locale
is not changed by this call. If no nonnull environment variable is present, the exact behavior of
setlocale()
is implementaion defined.
Setting all of the ca
tegories by using 
LC_ALL
as the first argument is similar to successively
setting each individual category of the locale, except that all error checking is done before any
actions are performed.
NULL
Returns the current locale without changing it.
At program startup:
setlocale(LC_ALL,"C");
is performed before 
main()
is called. If your program uses the library functions according to
the guidelines in this chapter, you can start the program with:
setlocale(LC_ALL,"");
and do the best job possible in the local environment.
The 
setlocale()
function returns a pointer to the name of the current locale for the selected
category. If 
setlocale()
is given an unknown locale, 
NULL
is returned.
You might wonder what effect setting the locale has on functions like 
printf()
. The answer
is, none at all. While you can set 
LC_MONETARY
and 
LC_NUMERIC
, the 
printf()
family
of functions is not required to use the information you supply. Most implementatio
ns format
numbers for the United Stated even if the locale is set elsewhere. On some systems,
printf()
will format numbers based on locale.
Character-handling Functions
Some of the character-handling functions are sensitive to the locale. They will report different
results for different national character sets.
P
age 197
The isalphaO, islower(), and isupper() Functions
These functions may expand the set of alphabetic characters to include native language
characters like ç, å, and so on. These characters do not have values between 
'a'
and 
'z'
.
The toupper() and tolower() Function
s
Not all lowercase letters have corresponding upper-case letters. For example, the lowercase
German ß becomes SS in uppercase. The 
toupper()
and 
tolower()
functions assume
that a one-to-one mapping exists. They will return the input character if there is no
way to
convert it.
C# TIFF: TIFF Editor SDK to Read & Manipulate TIFF File Using C#.
Easy to generate image thumbnail or preview for Tiff to Tiff, like Word, Excel, PowerPoint, PDF, and images. assemblies into your C# project by adding reference
add photo pdf; add image to pdf online
C# PowerPoint - Insert Blank PowerPoint Page in C#.NET
This C# .NET PowerPoint document page inserting & adding component from RasterEdge is written in managed C# code and designed particularly for .NET class
adding an image to a pdf; add picture to pdf online
The isspace() Function
A native language, such as Japanese, may have specific white space characters beyond the
standard set.
The strcoll() Function
The 
strcoll()
function compares two strings in the native language character set and
reports which is greater. The function is defined by:
int strcoll(const char *sl, const char *s2);
and returns a number that is less than, equal to, or greater than zero, depending on whether the
string pointed to by 
s1
is less than, equal to, or greater than the string pointed by 
s2
.
In the "
C
" locale, 
strcoll()
is equivalent to 
strcmp()
. In other locales, 
strcoll()
must compensate for the rules of the native language. Most locales can be accommodated using
a one-to-one mapping that inserts characters like å in the correct place. In so
me cases, a
one-to-many mapping is required for characters like the German ß. There are also many-to-one
mappings like the Spanish "ll," which is sorted right after "l".
The strxfrm() Function
The use of 
strcoll()
can be quite slow if a great deal of transformation is required and
many comparisons are going to be made. The 
strxfrm()
function performs the
transformation required by 
strcoll()
and leaves the result in a form where 
strcmp()
can
be u
sed.
In the "
C
" locale, 
strxfrm()
merely copies the string and is almost equivalent to
strncpy()
. The difference is that 
strxfrm()
returns the length of the transformed string
which may be different from the length of the source.
P
age 198
In applications where many comparisons must be made, a sort say, using 
strxfrm()
and
strcmp()
can provide a performance enhancement over using 
strcoll()
. There is no
untransform function to recover the source string. It must be kept around if you are going
to
need it again. Also, the transformation is implementation-dependent so that even two systems
operating on German may produce different transformations.
The strerror() and perror() Function
s
The 
strerror()
and 
perror()
functions may produce native language messages even in
the "
C
" locale.
The strftime() Function
The 
strftime()
function is covered in detail in Chapter 7, 
Obtaining Information at
Run-time. 
One of its features is the ability to generate locale-specific dates and times. For
example, the format string "
%c
" may produce:
Friday April 13, 1990 3:25 PM
in one locale and:
viernes abril 13 1990 15.25
in another locale. The "
%x
" format produces a native date (no time) and the "
%X
" produces a
native time (no date).
Native Language Messages
One important task of a program is to translate messages into the native language. There is no
provision in Standard C or POSIX to provide this capability. There is an existing method that
is part of the X/Open Portability Guide
*
and is available on many s
ystems including AT&T
System V.4 and OSF/1. In late 1990 the POSIX working group concluded that it would be
premature to adopt any messaging proposal because:
·
No proposal represented significant historical practice.
·
All proposals had been developed with a primary focus on character terminals. The group
felt that the rapidly rising importance of windowing might require a proposal that explicitly
considered messaging in windows.
·
All proposals seemed clumsy.
In my opinion, the working group abdicated their responsibility in the face of a difficult
problem. Since this is an important capability for building portable applications, I have
decided to describe the X/Open functions even though they are not part of P
OSIX.
* The X/Open Portability Guide is published by Prentice-Hall. Volume 3: XSI Supplementary
Definitions covers internationalization. See the Related Documents section in the Reference Manual
of this book.
P
age 199
Message Catalogs
The basic mechanism for language-independent messages is a message catalog. It consists of a
file, external to your code, that can be translated to provide messages in other languages. A
message ID is used to look up the message in the catalog.
The message text file has the form:
$set
n
i message-i 
j message-j 
k message-k 
$set
1 message-l 
. . .
Each message is identified by a set number and a message within that set. The usual backslash
escape sequences may be used.
Sets are often used to break messages into blocks of normal messages, error messages, and so
on. They can also be used to indicate which source module uses the message.
By default, there is no quoting and messages are delimited by white space as in:
$set 0 
1 Hello, World\n 
2 Goodbye, World\n 
3 Have a nice day. . . 
The 
$quote c
command makes c a quote character. It can be used to include leading or
trailing white space in a message. For example:
$quote 
$set 0 
1 "Hello, World\n" 
2 "Goodbye, World\n" 
3 "Have a nice day . . . " 
To speed retrieval, the message 
text
is compiled into binary with the 
gencat
utility. This
command takes two arguments, the name of the catalog to be created and the input text file:
gencat catalog text
The generated catalog is in a machine-specific format and is not portable. The text file, of
course, is portable (at least, on systems with the same code set).
The catopen() Function
The 
catopen()
routine is used to make a message catalog available to your program. The
function is defined as:
#include <nl_types.h> 
nl_catd catopen(char *name, int oflag); 
P
age 200
The argument name points to a string used to locate the catalog. If the string contains a 
"/"
it is
assumed to be the full path for the message catalog. Otherwise, the environment variable
NLSPATH
is used with the string pointed to by name substituted for 
%N
. The 
oflag
argument
must be zero. 
The 
catopen()
function returns a number of type 
nl_catd
for use with subsequent calls to
catgets()
and 
catclose()
. If an error takes place, 
-1
is returned and  errno is set to
indicate the error.
The catgets() Function
The 
catgets()
function is used to pull strings out of a message catalog. The function is
defined as:
#include <nl_types.h> 
char *catgets(nl_catd catd, int set_id, int msg_id, 
char *s); 
where 
catd
is the value returned by 
catopen()
set_id
is used to identify a block of
messages, 
msg_id
is used to identify a particular message within a set, and s is a pointer to a
default string. The 
catgets()
function returns a pointer to a message. If 
c
atgets()
has a
problem locating the message, s is returned. No errors are detected.
A typical use of 
catgets()
is:
printf(catgets(catd,0,1,"Hello, World\n"));
which might print out:
Bonjour tout le monde
in France.
The catclose() Function
When you are done with the message catalog, the call 
catclose(catd)
closes the catalog.
No errors are detected.
Local Numeric Formatting
Various information for formatting numbers is made available in the 
lconv
structure. This
structure is defined in 
<locale.h>
and contains the following members:
Type
Member Name
Default
Description
char *
decimal_point
"."
The character used to format non-monetary
quantities.
P
age 201
Type
Member Name
Default
Description
char *
thousands_sep
" "
The character used to separate groups of
digits in non-monetary quantities.
char *
grouping
" "
A string whose elements indicate the size
of each group of digits in non-monetary
quantities.
E
ach character is examined:
0
repeat the previous element for the
remainder of the digits.
1..CHAR_MAX-1
the number of digits in the current
group.
CHAR_MAX
no further grouping is to be
performed.
char *
int_curr_symbol
" "
International cu
rrency symbol for the
current locale (e.g., NOK for Norway).
char *
currency_symbol
" "
Local currency symbol for the current
locale (e.g., Kr for Norway).
char *
mon_decimal_point
" "
The decimal point for monetary quantities.
char *
mon_thousands_sep
" "
The character used to separate groups of
digits for monetary quantities.
char *
mon_grouping
" "
A string whose elements indicate the size
of each group of digits in monetary
quantities.
char *
positive_sign
" "
The string used to indicate a nonnegative
v
alued monetary quantity (e.g., 
"+"
,
"DB"
, or 
" "
).
char *
negative_sign 
" "
The string used to indicate a negative
valued monetary quantity (e.g., 
"-"
, or,
"CR"
).
char
int_frac_digits
CHAR_MAX
Number of digits after the decimal point for
internationally f
ormatted monetary
quantities.
char
frac_digits
CHAR_MAX
Number of digits after the decimal point for
formatted monetary quantities.
P
age 202
Type
Member Name
Default
Description
char
p_cs_precedes
CHAR_MAX
1 if the currency symbol precedes
nonnegative monetary quantities; zero if it
goes after them.
char
p_sep_by_space
CHAR_MAX
1 if there is a space between the currency
symbol and the digits i
n nonnegative
monetary quantities. Zero if there is no
space.
char
n_cs_precedes
CHAR_MAX
1 if the currency symbol precedes negative
monetary quantities. Zero if it goes after
them.
Documents you may be interested
Documents you may be interested