comparison man/internals/internals.texi @ 3003:fcf2f05d0c7a

[xemacs-hg @ 2005-10-20 12:37:42 by malcolmp] Alias --enable configure options to --with. Update internals.texi to reflect changes.
author malcolmp
date Thu, 20 Oct 2005 12:38:04 +0000
parents 4d269e525e21
children 23046b62bf91
comparison
equal deleted inserted replaced
3002:c64d760b2487 3003:fcf2f05d0c7a
468 * Introduction to Multilingual Issues #4:: 468 * Introduction to Multilingual Issues #4::
469 * Character Sets:: 469 * Character Sets::
470 * Encodings:: 470 * Encodings::
471 * Internal Mule Encodings:: 471 * Internal Mule Encodings::
472 * Byte/Character Types; Buffer Positions; Other Typedefs:: 472 * Byte/Character Types; Buffer Positions; Other Typedefs::
473 * Internal Text API's:: 473 * Internal Text APIs::
474 * Coding for Mule:: 474 * Coding for Mule::
475 * CCL:: 475 * CCL::
476 * Microsoft Windows-Related Multilingual Issues:: 476 * Microsoft Windows-Related Multilingual Issues::
477 * Modules for Internationalization:: 477 * Modules for Internationalization::
478 478
493 * Buffer Positions:: 493 * Buffer Positions::
494 * Other Typedefs:: 494 * Other Typedefs::
495 * Usage of the Various Representations:: 495 * Usage of the Various Representations::
496 * Working With the Various Representations:: 496 * Working With the Various Representations::
497 497
498 Internal Text API's 498 Internal Text APIs
499 499
500 * Basic internal-format API's:: 500 * Basic internal-format APIs::
501 * The DFC API:: 501 * The DFC API::
502 * The Eistring API:: 502 * The Eistring API::
503 503
504 Coding for Mule 504 Coding for Mule
505 505
4497 4497
4498 @itemize 4498 @itemize
4499 @item 4499 @item
4500 Selectively enabling debugging, error checking, and tracing. 4500 Selectively enabling debugging, error checking, and tracing.
4501 @item 4501 @item
4502 Specifying options by either @code{--with} or @code{--enable}.
4503 @item
4502 Complex options, which are set-valued (@i{i.e.}, unordered; ordered 4504 Complex options, which are set-valued (@i{i.e.}, unordered; ordered
4503 lists of options, for example ``take the first available from the 4505 lists of options, for example ``take the first available from the
4504 list,'' are neither used currently nor given special support). 4506 list,'' are neither used currently nor given special support).
4505 @end itemize 4507 @end itemize
4506 4508
4570 @item XE_SHLIB_STUFF 4572 @item XE_SHLIB_STUFF
4571 Generate the appropriate shared library support black magic. This is 4573 Generate the appropriate shared library support black magic. This is
4572 implemented in the file @file{aclocal.m4}. 4574 implemented in the file @file{aclocal.m4}.
4573 @end table 4575 @end table
4574 4576
4577 @heading XEmacs merged option support
4578
4579 Autoconf 2.59 divides the @file{configure} options into those that
4580 specify features (@samp{--enable}) and those that specify external
4581 libraries (@samp{--with}). Many XEmacs options to not fall neatly into
4582 either of these catagories and so as a matter of policy all options can
4583 be specified by either method.
4584
4585 These merged options are declared with the @code{XE_MERGED_ARG} macro.
4586 The arguments to the option are the same as @code{AC_ARG_WITH} and
4587 @code{AC_ARG_ENABLE} and code that worked with either of these macros
4588 will worked unchanged with @code{XE_MERGED_ARG}. The option value is
4589 stored in both @code{with_FEATURE} and @code{enable_FEATURE} shell
4590 variables.
4591
4592 @table @code
4593 @item XE_MERGED_ARG(package, help-string, action-if-true, action-if-false)
4594 Declare an option that can be selected by either @samp{--enable} or
4595 @samp{--with}. The value of the option is stored in both
4596 @code{with_FEATURE} and @code{enable_FEATURE}.
4597
4598 @end table
4599
4575 @heading XEmacs keyword option support 4600 @heading XEmacs keyword option support
4576 4601
4577 A @dfn{keyword} option is one that accepts one of a number of 4602 A @dfn{keyword} option is one that accepts one of a number of
4578 pre-defined values (if support for sets of values is needed, x1see 4603 pre-defined values (if support for sets of values is needed, x1see
4579 ``complex options'' below). For example, 4604 ``complex options'' below). For example,
4580 @samp{--with-mail-locking=flock}. 4605 @samp{--with-mail-locking=flock}.
4581 4606
4582 Keyword options are defined with expanded forms of 4607 Keyword options are defined with an expanded form of
4583 @samp{AC_ARG_[WITH|ENABLE]} called @samp{XE_KEYWORD_ARG_[WITH|ENABLE]}, 4608 @samp{XE_MERGED_ARG} called @samp{XE_KEYWORD_ARG}, which taks 5
4584 both taking 5 parameters. The first 4 parameters of these macros are 4609 parameters. The first 4 parameters are the same as original macro with
4585 the same as original macros with the exception that all four parameters 4610 the exception that all of these four parameters are @strong{required}.
4586 are @strong{required}. The @var{action-if-true} code is run after the 4611 The @var{action-if-true} code is run after the argument list has been
4587 argument list has been parsed. 4612 parsed.
4588 4613
4589 The 5th parameter is a list of supported keywords. The whole list must 4614 The 5th parameter is a list of supported keywords. The whole list must
4590 be quoted but the individual keywords should not. Here is how the 4615 be quoted but the individual keywords should not. Here is how the
4591 @samp{mail-locking} flag is defined: 4616 @samp{mail-locking} flag is defined:
4592 4617
4593 @example 4618 @example
4594 XE_KEYWORD_ARG_WITH([mail-locking], 4619 XE_KEYWORD_ARG([mail-locking],
4595 AC_HELP_STRING([--with-mail-locking],[Specify the locking to be 4620 AC_HELP_STRING([--with-mail-locking],[Specify the locking to be
4596 used by movemail to prevent concurrent updates 4621 used by movemail to prevent concurrent updates
4597 of mail spool files. Valid types are `lockf', 4622 of mail spool files. Valid types are `lockf',
4598 `flock', `dot', `locking' or `mmdf'.]), 4623 `flock', `dot', `locking' or `mmdf'.]),
4599 [], 4624 [],
4613 Macros labeled @dfn{internal} are not expected to be used by 4638 Macros labeled @dfn{internal} are not expected to be used by
4614 @file{configure.ac} programmers; they are part of the implementation of 4639 @file{configure.ac} programmers; they are part of the implementation of
4615 higher-level features. 4640 higher-level features.
4616 4641
4617 @table @code 4642 @table @code
4618 @item XE_KEYWORD_ARG_WITH(package, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....]) 4643 @item XE_KEYWORD_ARG(package, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....])
4619 Expanded version of @code{AC_ARG_WITH} for keyword options. All the 4644 Expanded version of @code{XE_MERGED_ARG} for keyword options. All the
4620 parameters are required. The last argument is a comma-separated list of
4621 supported keywords, @file{m4}-quoted with @samp{[]}.
4622
4623 @item XE_KEYWORD_ARG_ENABLE(feature, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....])
4624 Expanded version of @code{AC_ARG_ENABLE} for keyword options. All the
4625 parameters are required. The last argument is a comma-separated list of 4645 parameters are required. The last argument is a comma-separated list of
4626 supported keywords, @file{m4}-quoted with @samp{[]}. 4646 supported keywords, @file{m4}-quoted with @samp{[]}.
4627 4647
4628 @item XE_PARSE_KEYWORD_OPTION(prefix, cmdline-flag) 4648 @item XE_PARSE_KEYWORD_OPTION(prefix, cmdline-flag)
4629 Internal macro to parse the option values. If an undeclared option is 4649 Internal macro to parse the option values. If an undeclared option is
4639 4659
4640 A @dfn{complex option} is one that takes a number of related values, as 4660 A @dfn{complex option} is one that takes a number of related values, as
4641 a set. For example, we might use @code{--with-sound=native,nas} to play 4661 a set. For example, we might use @code{--with-sound=native,nas} to play
4642 sounds using the native libraries and via NAS. 4662 sounds using the native libraries and via NAS.
4643 4663
4644 Complex options are defined with expanded forms of 4664 Complex options are defined with an expanded form of
4645 @samp{AC_ARG_[WITH|ENABLE]} called @samp{XE_COMPLEX_ARG_[WITH|ENABLE]}, 4665 @samp{XE_MERGED_ARG} called @samp{XE_COMPLEX_ARG}, taking 5 parameters.
4646 both taking 5 parameters. The first 4 parameters of these macros are 4666 The first 4 parameters are the same as original macro with the exception
4647 the same as original macros with the exception that all four parameters 4667 that all four parameters are @strong{required}. The
4648 are @strong{required}. The @var{action-if-true} code is run after the 4668 @var{action-if-true} code is run after the argument list has been
4649 argument list has been parsed. 4669 parsed.
4650 4670
4651 The 5th parameter is a list of @code{XE_COMPLEX_OPTION} macro calls that 4671 The 5th parameter is a list of @code{XE_COMPLEX_OPTION} macro calls that
4652 define the valid components and their default values. The list must be 4672 define the valid components and their default values. The list must be
4653 quoted but the individual macro calls should not. Here is how the 4673 quoted but the individual macro calls should not. Here is how the
4654 @samp{sound} flag is defined: 4674 @samp{sound} flag is defined:
4655 4675
4656 @example 4676 @example
4657 XE_COMPLEX_ARG_ENABLE([sound], 4677 XE_COMPLEX_ARG([sound],
4658 AC_HELP_STRING([--enable-sound],[Compile with sound support. 4678 AC_HELP_STRING([--enable-sound],[Compile with sound support.
4659 Valid types are `native', `nas' and `esd'. 4679 Valid types are `native', `nas' and `esd'.
4660 Prefix a type with 'no' to disable. 4680 Prefix a type with 'no' to disable.
4661 The first type can be `none' or `all'. `none' means 4681 The first type can be `none' or `all'. `none' means
4662 `nonative,nonas,noesd'. `all' means `native,nas,esd'. 4682 `nonative,nonas,noesd'. `all' means `native,nas,esd'.
4721 4741
4722 This was originally written for the Xft option, and doesn't read so well 4742 This was originally written for the Xft option, and doesn't read so well
4723 for options based on alternative libraries like sound. Hackers beware: 4743 for options based on alternative libraries like sound. Hackers beware:
4724 the API may be enhanced to deal with this in the future. 4744 the API may be enhanced to deal with this in the future.
4725 4745
4726 @item XE_COMPLEX_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....]) 4746 @item XE_COMPLEX_ARG(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....])
4727 Extended version of @code{AC_ARG_WITH} for complex options. All the 4747 Extended version of @code{XE_MERGED_ARG} for complex options. All the
4728 parameters are required.
4729
4730 @item XE_COMPLEX_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....])
4731 Expanded version of @code{AC_ARG_ENABLE} for complex options. All the
4732 parameters are required. 4748 parameters are required.
4733 4749
4734 @item XE_EXPAND_COMPLEX_OPTION(prefix, component, yesno) 4750 @item XE_EXPAND_COMPLEX_OPTION(prefix, component, yesno)
4735 Internal macro create the option's shell variable containing the default 4751 Internal macro create the option's shell variable containing the default
4736 value and to note the values in an option list. 4752 value and to note the values in an option list.
5814 @enumerate 5830 @enumerate
5815 @item 5831 @item
5816 When there's a reasonable possibility you will actually need all 32 or 5832 When there's a reasonable possibility you will actually need all 32 or
5817 64 bits to store the quantity. 5833 64 bits to store the quantity.
5818 @item 5834 @item
5819 When calling existing API's that require unsigned types. In this case, 5835 When calling existing APIs that require unsigned types. In this case,
5820 you should still do all manipulation using signed types, and do the 5836 you should still do all manipulation using signed types, and do the
5821 conversion at the very threshold of the API call. 5837 conversion at the very threshold of the API call.
5822 @item 5838 @item
5823 In existing code that you don't want to modify because you don't 5839 In existing code that you don't want to modify because you don't
5824 maintain it. 5840 maintain it.
10166 integrated. 10182 integrated.
10167 10183
10168 @emph{NOTE}: The information at the top of the source file 10184 @emph{NOTE}: The information at the top of the source file
10169 @file{text.c} is more complete than the following, and there is also a 10185 @file{text.c} is more complete than the following, and there is also a
10170 list of all other places to look for text/I18N-related info. Also look in 10186 list of all other places to look for text/I18N-related info. Also look in
10171 @file{text.h} for info about the DFC and Eistring API's. 10187 @file{text.h} for info about the DFC and Eistring APIs.
10172 10188
10173 Recall that there are two primary ways that text is represented in 10189 Recall that there are two primary ways that text is represented in
10174 XEmacs. The @dfn{buffer} representation sees the text as a series of 10190 XEmacs. The @dfn{buffer} representation sees the text as a series of
10175 bytes (Ibytes), with a variable number of bytes used per character. 10191 bytes (Ibytes), with a variable number of bytes used per character.
10176 The @dfn{character} representation sees the text as a series of integers 10192 The @dfn{character} representation sees the text as a series of integers
10189 * Introduction to Multilingual Issues #4:: 10205 * Introduction to Multilingual Issues #4::
10190 * Character Sets:: 10206 * Character Sets::
10191 * Encodings:: 10207 * Encodings::
10192 * Internal Mule Encodings:: 10208 * Internal Mule Encodings::
10193 * Byte/Character Types; Buffer Positions; Other Typedefs:: 10209 * Byte/Character Types; Buffer Positions; Other Typedefs::
10194 * Internal Text API's:: 10210 * Internal Text APIs::
10195 * Coding for Mule:: 10211 * Coding for Mule::
10196 * CCL:: 10212 * CCL::
10197 * Microsoft Windows-Related Multilingual Issues:: 10213 * Microsoft Windows-Related Multilingual Issues::
10198 * Modules for Internationalization:: 10214 * Modules for Internationalization::
10199 @end menu 10215 @end menu
11159 whether that code can be used, knows that ``field 3'' in a character 11175 whether that code can be used, knows that ``field 3'' in a character
11160 always corresponds to the last byte in the textual representation of the 11176 always corresponds to the last byte in the textual representation of the
11161 character. (This is important because the Boyer-Moore algorithm works by 11177 character. (This is important because the Boyer-Moore algorithm works by
11162 looking at the last byte of the search string and &&#### finish this. 11178 looking at the last byte of the search string and &&#### finish this.
11163 11179
11164 @node Byte/Character Types; Buffer Positions; Other Typedefs, Internal Text API's, Internal Mule Encodings, Multilingual Support 11180 @node Byte/Character Types; Buffer Positions; Other Typedefs, Internal Text APIs, Internal Mule Encodings, Multilingual Support
11165 @section Byte/Character Types; Buffer Positions; Other Typedefs 11181 @section Byte/Character Types; Buffer Positions; Other Typedefs
11166 @cindex byte/character types; buffer positions; other typedefs 11182 @cindex byte/character types; buffer positions; other typedefs
11167 @cindex byte/character types 11183 @cindex byte/character types
11168 @cindex character types 11184 @cindex character types
11169 @cindex buffer positions 11185 @cindex buffer positions
11209 @end itemize 11225 @end itemize
11210 11226
11211 Types (b), (c), (f) and (h) are defined as @code{char}, while the others are 11227 Types (b), (c), (f) and (h) are defined as @code{char}, while the others are
11212 @code{unsigned char}. This is for maximum safety (signed characters are 11228 @code{unsigned char}. This is for maximum safety (signed characters are
11213 dangerous to work with) while maintaining as much compatibility with 11229 dangerous to work with) while maintaining as much compatibility with
11214 external API's and string constants as possible. 11230 external APIs and string constants as possible.
11215 11231
11216 We also provide versions of the above types defined with different 11232 We also provide versions of the above types defined with different
11217 underlying C types, for API compatibility. These use the following 11233 underlying C types, for API compatibility. These use the following
11218 prefixes: 11234 prefixes:
11219 11235
11224 @end example 11240 @end example
11225 11241
11226 (Formerly I had a comment saying that type (e) "should be replaced with 11242 (Formerly I had a comment saying that type (e) "should be replaced with
11227 void *". However, there are in fact many places where an unsigned char 11243 void *". However, there are in fact many places where an unsigned char
11228 * might be used -- e.g. for ease in pointer computation, since void * 11244 * might be used -- e.g. for ease in pointer computation, since void *
11229 doesn't allow this, and for compatibility with external API's.) 11245 doesn't allow this, and for compatibility with external APIs.)
11230 11246
11231 Note that these typedefs are purely for documentation purposes; from 11247 Note that these typedefs are purely for documentation purposes; from
11232 the C code's perspective, they are exactly equivalent to @code{char *}, 11248 the C code's perspective, they are exactly equivalent to @code{char *},
11233 @code{unsigned char *}, etc., so you can freely use them with library 11249 @code{unsigned char *}, etc., so you can freely use them with library
11234 functions declared as such. 11250 functions declared as such.
11530 We write things this way because it's very important the 11546 We write things this way because it's very important the
11531 MAX_BYTEBPOS_GAP_SIZE_3 is a multiple of 3. (As it happens, 11547 MAX_BYTEBPOS_GAP_SIZE_3 is a multiple of 3. (As it happens,
11532 65535 is a multiple of 3, but this may not always be the 11548 65535 is a multiple of 3, but this may not always be the
11533 case. #### unfinished 11549 case. #### unfinished
11534 11550
11535 @node Internal Text API's, Coding for Mule, Byte/Character Types; Buffer Positions; Other Typedefs, Multilingual Support 11551 @node Internal Text APIs, Coding for Mule, Byte/Character Types; Buffer Positions; Other Typedefs, Multilingual Support
11536 @section Internal Text API's 11552 @section Internal Text APIs
11537 @cindex internal text API's 11553 @cindex internal text APIs
11538 @cindex text API's, internal 11554 @cindex text APIs, internal
11539 @cindex API's, text, internal 11555 @cindex APIs, text, internal
11540 11556
11541 @strong{NOTE}: The most current documentation for these API's is in 11557 @strong{NOTE}: The most current documentation for these APIs is in
11542 @file{text.h}. In case of error, assume that file is correct and this 11558 @file{text.h}. In case of error, assume that file is correct and this
11543 one wrong. 11559 one wrong.
11544 11560
11545 @menu 11561 @menu
11546 * Basic internal-format API's:: 11562 * Basic internal-format APIs::
11547 * The DFC API:: 11563 * The DFC API::
11548 * The Eistring API:: 11564 * The Eistring API::
11549 @end menu 11565 @end menu
11550 11566
11551 @node Basic internal-format API's, The DFC API, Internal Text API's, Internal Text API's 11567 @node Basic internal-format APIs, The DFC API, Internal Text APIs, Internal Text APIs
11552 @subsection Basic internal-format API's 11568 @subsection Basic internal-format APIs
11553 @cindex basic internal-format API's 11569 @cindex basic internal-format APIs
11554 @cindex internal-format API's, basic 11570 @cindex internal-format APIs, basic
11555 @cindex API's, basic internal-format 11571 @cindex APIs, basic internal-format
11556 11572
11557 These are simple functions and macros to convert between text 11573 These are simple functions and macros to convert between text
11558 representation and characters, move forward and back in text, etc. 11574 representation and characters, move forward and back in text, etc.
11559 11575
11560 #### Finish the rest of this. 11576 #### Finish the rest of this.
11579 Note also that we try to consistently distinguish between an "Ichar" and 11595 Note also that we try to consistently distinguish between an "Ichar" and
11580 a Lisp character. Stuff working with Lisp characters often just says 11596 a Lisp character. Stuff working with Lisp characters often just says
11581 "char", so we consistently use "Ichar" when that's what we're working 11597 "char", so we consistently use "Ichar" when that's what we're working
11582 with. 11598 with.
11583 11599
11584 @node The DFC API, The Eistring API, Basic internal-format API's, Internal Text API's 11600 @node The DFC API, The Eistring API, Basic internal-format APIs, Internal Text APIs
11585 @subsection The DFC API 11601 @subsection The DFC API
11586 @cindex DFC API 11602 @cindex DFC API
11587 @cindex API, DFC 11603 @cindex API, DFC
11588 11604
11589 This is for conversion between internal and external text. Note that 11605 This is for conversion between internal and external text. Note that
11802 new ones, and I've had a beta put out with this on and it appeared to 11818 new ones, and I've had a beta put out with this on and it appeared to
11803 this appears to cause no problems -- so we should consider 11819 this appears to cause no problems -- so we should consider
11804 switching, and feel no compunctions about writing further such function- 11820 switching, and feel no compunctions about writing further such function-
11805 like @code{alloca()} routines in lieu of statement-like ones. --ben 11821 like @code{alloca()} routines in lieu of statement-like ones. --ben
11806 11822
11807 @node The Eistring API, , The DFC API, Internal Text API's 11823 @node The Eistring API, , The DFC API, Internal Text APIs
11808 @subsection The Eistring API 11824 @subsection The Eistring API
11809 @cindex Eistring API 11825 @cindex Eistring API
11810 @cindex API, Eistring 11826 @cindex API, Eistring
11811 11827
11812 (This API is currently under-used) When doing simple things with 11828 (This API is currently under-used) When doing simple things with
11813 internal text, the basic internal-format API's are enough. But to do 11829 internal text, the basic internal-format APIs are enough. But to do
11814 things like delete or replace a substring, concatenate various strings, 11830 things like delete or replace a substring, concatenate various strings,
11815 etc. is difficult to do cleanly because of the allocation issues. 11831 etc. is difficult to do cleanly because of the allocation issues.
11816 The Eistring API is designed to deal with this, and provides a clean 11832 The Eistring API is designed to deal with this, and provides a clean
11817 way of modifying and building up internal text. (Note that the former 11833 way of modifying and building up internal text. (Note that the former
11818 lack of this API has meant that some code uses Lisp strings to do 11834 lack of this API has meant that some code uses Lisp strings to do
12266 Convert all characters in the Eistring to lowercase. 12282 Convert all characters in the Eistring to lowercase.
12267 void eiupr (Eistring *eistr); 12283 void eiupr (Eistring *eistr);
12268 Convert all characters in the Eistring to uppercase. 12284 Convert all characters in the Eistring to uppercase.
12269 @end example 12285 @end example
12270 12286
12271 @node Coding for Mule, CCL, Internal Text API's, Multilingual Support 12287 @node Coding for Mule, CCL, Internal Text APIs, Multilingual Support
12272 @section Coding for Mule 12288 @section Coding for Mule
12273 @cindex coding for Mule 12289 @cindex coding for Mule
12274 @cindex Mule, coding for 12290 @cindex Mule, coding for
12275 12291
12276 Although Mule support is not compiled by default in XEmacs, many people 12292 Although Mule support is not compiled by default in XEmacs, many people
12663 @end table 12679 @end table
12664 12680
12665 A source type of @code{C_STRING} or a sink type of 12681 A source type of @code{C_STRING} or a sink type of
12666 @code{C_STRING_ALLOCA} or @code{C_STRING_MALLOC} is appropriate where 12682 @code{C_STRING_ALLOCA} or @code{C_STRING_MALLOC} is appropriate where
12667 the external API is not '\0'-byte-clean -- i.e. it expects strings to be 12683 the external API is not '\0'-byte-clean -- i.e. it expects strings to be
12668 terminated with a null byte. For external API's that are in fact 12684 terminated with a null byte. For external APIs that are in fact
12669 '\0'-byte-clean, we should of course not use these. 12685 '\0'-byte-clean, we should of course not use these.
12670 12686
12671 The sinks to be specified must be lvalues, unless they are the lisp 12687 The sinks to be specified must be lvalues, unless they are the lisp
12672 object types @code{LISP_LSTREAM} or @code{LISP_BUFFER}. 12688 object types @code{LISP_LSTREAM} or @code{LISP_BUFFER}.
12673 12689
13371 writing code that will handle this properly. This means using 13387 writing code that will handle this properly. This means using
13372 Qmswindows_tstr as the external conversion format, calling the appropriate 13388 Qmswindows_tstr as the external conversion format, calling the appropriate
13373 qxe...() Unicode-split version of library functions, and doing other things 13389 qxe...() Unicode-split version of library functions, and doing other things
13374 in certain cases, e.g. when a qxe() function is not present. 13390 in certain cases, e.g. when a qxe() function is not present.
13375 13391
13376 Unicode support also requires that the various Windows API's be 13392 Unicode support also requires that the various Windows APIs be
13377 "Unicode-encapsulated", so that they automatically call the ANSI or 13393 "Unicode-encapsulated", so that they automatically call the ANSI or
13378 Unicode version of the API call appropriately and handle the size 13394 Unicode version of the API call appropriately and handle the size
13379 differences in structures. What this means is: 13395 differences in structures. What this means is:
13380 13396
13381 @itemize @bullet 13397 @itemize @bullet
13382 @item 13398 @item
13383 first, note that Windows already provides a sort of encapsulation 13399 first, note that Windows already provides a sort of encapsulation
13384 of all API's that deal with text. All such API's are underlyingly 13400 of all APIs that deal with text. All such APIs are underlyingly
13385 provided in two versions, with an A or W suffix (ANSI or "wide" 13401 provided in two versions, with an A or W suffix (ANSI or "wide"
13386 i.e. Unicode), and the compile-time constant UNICODE controls which is 13402 i.e. Unicode), and the compile-time constant UNICODE controls which is
13387 selected by the unsuffixed API. Same thing happens with structures, and 13403 selected by the unsuffixed API. Same thing happens with structures, and
13388 also with types, where the generic types have names beginning with T -- 13404 also with types, where the generic types have names beginning with T --
13389 TCHAR, LPTSTR, etc.. Unfortunately, this is compile-time only, not 13405 TCHAR, LPTSTR, etc.. Unfortunately, this is compile-time only, not
13609 13625
13610 @itemize @bullet 13626 @itemize @bullet
13611 @item 13627 @item
13612 wsetargv.obj uses routines that were buggily left out of MSVCRT; anyway, 13628 wsetargv.obj uses routines that were buggily left out of MSVCRT; anyway,
13613 from looking at the source, it does NOT correctly work under Win 9x as 13629 from looking at the source, it does NOT correctly work under Win 9x as
13614 it blindly calls the Unicode version of Unicode-split API's such as 13630 it blindly calls the Unicode version of Unicode-split APIs such as
13615 FindFirstFile) 13631 FindFirstFile)
13616 13632
13617 @item 13633 @item
13618 the w*() file routines are @strong{NOT} supported -- or at least, they blindly 13634 the w*() file routines are @strong{NOT} supported -- or at least, they blindly
13619 call the ...W() versions of the Win32 API calls. 13635 call the ...W() versions of the Win32 API calls.
18953 started and I'll be doing more work to make this real. 18969 started and I'll be doing more work to make this real.
18954 18970
18955 IV. GUTTER ETC. 18971 IV. GUTTER ETC.
18956 18972
18957 This stuff needs to be "stable" and generally free from bugs. Any 18973 This stuff needs to be "stable" and generally free from bugs. Any
18958 API's we create need to be well-reviewed or marked clearly as 18974 APIs we create need to be well-reviewed or marked clearly as
18959 experimental. 18975 experimental.
18960 18976
18961 V. PORTABLE DUMPER 18977 V. PORTABLE DUMPER
18962 18978
18963 Last bits need to be cleaned up. This should be made the "default" for 18979 Last bits need to be cleaned up. This should be made the "default" for
19508 19524
19509 Author: @uref{mailto:ben@@xemacs.org,Ben Wing} 19525 Author: @uref{mailto:ben@@xemacs.org,Ben Wing}
19510 19526
19511 NOTE: These changes are partly motivated by the various user-interface 19527 NOTE: These changes are partly motivated by the various user-interface
19512 changes elsewhere in this document, and partly for Mule support. In 19528 changes elsewhere in this document, and partly for Mule support. In
19513 general the various API's in this document would benefit greatly from 19529 general the various APIs in this document would benefit greatly from
19514 built-in keywords. 19530 built-in keywords.
19515 19531
19516 I would like to make keyword parameters an integral part of Elisp. The 19532 I would like to make keyword parameters an integral part of Elisp. The
19517 idea here is that you use the @code{&key} identifier in the 19533 idea here is that you use the @code{&key} identifier in the
19518 parameter list of a function and all of the following parameters 19534 parameter list of a function and all of the following parameters
21907 both bytes in the range 33-126 (for 94 or 94x94) or 32-127 (for 96 21923 both bytes in the range 33-126 (for 94 or 94x94) or 32-127 (for 96
21908 or 96x96), unless an offset is given, which will be subtracted from 21924 or 96x96), unless an offset is given, which will be subtracted from
21909 each byte. (Most common values are 128, for codepoints given with 21925 each byte. (Most common values are 128, for codepoints given with
21910 the high bit set, or -32, for codepoints given as 1-94 or 0-95.) 21926 the high bit set, or -32, for codepoints given as 1-94 or 0-95.)
21911 21927
21912 Other API's: 21928 Other APIs:
21913 21929
21914 @example 21930 @example
21915 (write-unicode-mapping file charset) 21931 (write-unicode-mapping file charset)
21916 @end example 21932 @end example
21917 21933