Allowed character code zero to be remapped with other character codes.

This commit is contained in:
Greg King
2016-06-11 06:43:19 -04:00
parent e95d07aa97
commit 573381a340
8 changed files with 71 additions and 59 deletions

View File

@@ -4,7 +4,7 @@
<title>cc65 Users Guide
<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
<url url="mailto:gregdk@users.sf.net" name="Greg King">
<date>2016-04-22
<date>2016-06-11
<abstract>
cc65 is a C compiler for 6502 targets. It supports several 6502 based home
@@ -478,15 +478,15 @@ Here is a description of all the command line options:
<label id="option-W">
<tag><tt>-W name[,name]</tt></tag>
<tag><tt>-W name[,name,...]</tt></tag>
This option allows to control warnings generated by the compiler. It is
followed by a comma separated list of warnings that should be enabled or
followed by a comma-separated list of warnings that should be enabled or
disabled. To disable a warning, its name is prefixed by a minus sign. If
no such prefix exists, or the name is prefixed by a plus sign, the warning
is enabled.
The following warning names are currently recognized:
The following warning names currently are recognized:
<descrip>
<tag><tt/const-comparison/</tag>
Warn if the result of a comparison is constant.
@@ -494,10 +494,13 @@ Here is a description of all the command line options:
Treat all warnings as errors.
<tag><tt/no-effect/</tag>
Warn about statements that don't have an effect.
<tag><tt/remap-zero/</tag>
Warn about a <tt/<ref id="pragma-charmap" name="#pragma charmap()">/
that changes a character's code number from/to 0x00.
<tag><tt/struct-param/</tag>
Warn when passing structs by value.
<tag><tt/unknown-pragma/</tag>
Warn about known #pragmas.
Warn about #pragmas that aren't recognized by cc65.
<tag><tt/unused-label/</tag>
Warn about unused labels.
<tag><tt/unused-param/</tag>
@@ -506,11 +509,11 @@ Here is a description of all the command line options:
Warn about unused variables.
</descrip>
The full list of available warning names may be retrieved by using the
The full list of available warning names can be retrieved by using the
option <tt><ref id="option-list-warnings" name="--list-warnings"></tt>.
You may also use <tt><ref id="pragma-warn" name="#pragma&nbsp;warn"></tt> to
control this setting for smaller pieces of code from within your code.
You may use also <tt><ref id="pragma-warn" name="#pragma&nbsp;warn"></tt> to
control this setting, for smaller pieces of code, from within your sources.
</descrip><p>
@@ -931,34 +934,38 @@ parameter with the <tt/#pragma/.
<sect1><tt>#pragma charmap (&lt;index&gt;, &lt;code&gt;)</tt><label id="pragma-charmap"><p>
Each literal string and each literal character in the source is translated
by use of a translation table. This translation table is preset when the
compiler is started depending on the target system, for example to map
ISO-8859-1 characters into PETSCII if the target is a commodore machine.
by use of a translation table. That translation table is preset when the
compiler is started, depending on the target system; for example, to map
ISO-8859-1 characters into PETSCII if the target is a Commodore machine.
This pragma allows to change entries in the translation table, so the
translation for individual characters, or even the complete table may be
adjusted.
adjusted. Both arguments are assumed to be unsigned characters with a valid
range of 0-255.
Both arguments are assumed to be unsigned characters with a valid range of
1-255.
Beware of two pitfalls:
<itemize>
<item>The character index is actually the code of the character in the
C source, so character mappings do always depend on the source
character set. This means that <tt/#pragma&nbsp;charmap/ is not
portable -- it depends on the build environment.
<item>While it is possible to use character literals as indices, the
result may be somewhat unexpected, since character literals are
itself translated. For this reason I would suggest to avoid
character literals and use numeric character codes instead.
</itemize>
Beware of some pitfalls:
<itemize>
<item>The character index is actually the code of the character in the
C source; so, character mappings do always depend on the source
character set. That means that <tt/#pragma&nbsp;charmap()/ is not
portable -- it depends on the build environment.
<item>While it is possible to use character literals as indices, the
result may be somewhat unexpected, since character literals are
themselves translated. For that reason, I would suggest to avoid
character literals, and use numeric character codes instead.
<item>It is risky to change index <tt/0x00/, because string functions depend
on it. If it is changed, then the <tt/'\0'/ at the end of string
literals will become non-zero. Functions that are used on those
literals won't stop at the end of them. cc65 will warn you if you do
change that code number. You can turn off that <tt/remap-zero/ warning
if you are certain that you know what you are doing (see <tt/<ref
id="pragma-warn" name="#pragma&nbsp;warn()">/).
</itemize>
Example:
<tscreen><verb>
/* Use a space wherever an 'a' occurs in ISO-8859-1 source */
#pragma charmap (0x61, 0x20);
/* Use a space wherever an 'a' occurs in ISO-8859-1 source */
#pragma charmap (0x61, 0x20);
</verb></tscreen>
@@ -1129,7 +1136,7 @@ parameter with the <tt/#pragma/.
Switch compiler warnings on or off. "name" is the name of a warning (see the
<tt/<ref name="-W" id="option-W">/ compiler option for a list). The name is
either followed by "pop", which restores the last pushed state, or by "on" or
followed either by "pop", which restores the last pushed state, or by "on" or
"off", optionally preceeded by "push" to push the current state before
changing it.
@@ -1144,6 +1151,7 @@ parameter with the <tt/#pragma/.
#pragma warn (unused-param, pop)
</verb></tscreen>
<sect1><tt>#pragma writable-strings ([push,] on|off)</tt><label id="pragma-writable-strings"><p>
Changes the storage location of string literals. For historical reasons,