Defect Report #019
Submission Date: 10 Dec 92
Submittor: WG14
Source: X3J11/91-014 (Richard Wiersma)
Question 1
Background:
Subclause 7.3.1.5 states that ``the isgraph function tests
for any printing character except space.'' Subclause 7.3.1.7 states that
``the isprint function tests for any printing character
including space.''
The third paragraph of subclause 7.3 defines the term printing character
as ``a member of an implementation-defined set of characters, each of which
occupies one printing position on a display device.''
Subclause 5.2.1 defines the source and execution character sets and provides
a list of characters which must be contained in both sets.
Question for interpretation:
Are the isprint and isgraph
functions required to return a non-zero value for all of the characters
defined in subclause 5.2.1?
A scenario for use of isprint/isgraph that
depends on the interpretation is: A developer may wish to use these functions
to determine whether a particular character can be displayed as itself
(e.g., whether a square bracket is actually displayed as a square bracket).
This could be useful for formatting output in a device-independent manner,
since the application could substitute some other character for ones that
do not print ``correctly.''
If isprint and isgraph are required to
return non-zero for all characters in subclause 5.2.1, developers cannot
use them for this purpose.
This problem has occurred in a real implementation. The most commonly used
terminals and printers for IBM System/370 computers do not support all
of the characters listed in subclause 5.2.1. For example, most IBM printers
and terminals do not print the square brackets.
The SAS/C implementation of isprint and isgraph
assumes that subclause 7.3 controls the behavior of these functions, and
returns non-zero only for those characters that print ``correctly.'' The
Plum Hall test suite, however, assumes that isprint and
isgraph return non-zero for all characters listed in subclause
5.2.1.
Response
Subclause 7.3, page 102, line 8 says that printing character is
implementation-defined. In particular, the value (zero or non-zero) of
isprint('[') is implementation-defined, even in the
"C" locale.
Previous Defect Report
< - >
Next Defect Report