home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / book / pmbdtech.inf (.txt) < prev    next >
OS/2 Help File  |  1999-05-12  |  264KB  |  10,661 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. General Information ΓòÉΓòÉΓòÉ
  3.  
  4. The following sections describe general information about bidirectional 
  5. language support. 
  6.  
  7.  
  8. ΓòÉΓòÉΓòÉ 1.1. About this Book ΓòÉΓòÉΓòÉ
  9.  
  10. The Bidirectional Language Programming Guide provides information about the 
  11. Presentation Manager (PM) application programming interfaces (API) for the 
  12. Arabic and Hebrew languages that let programmers create Arabic or Hebrew 
  13. applications for this environment. 
  14.  
  15. The Bidirectional support in PM is provided in the Arabic and Hebrew language 
  16. versions of OS/2. The support is active/configured when the COUNTRY selection 
  17. during OS/2 installation is Arabic or Hebrew in these versions. 
  18.  
  19.  
  20. ΓòÉΓòÉΓòÉ 1.2. Introduction ΓòÉΓòÉΓòÉ
  21.  
  22. The purpose of this guide is to provide the necessary information to allow the 
  23. creation of applications that work in Arabic or Hebrew. Reading and writing of 
  24. Arabic or Hebrew text is done from Right-To-Left.  This means that the "start" 
  25. point of a Hebrew/Arabic text is on the right side of the page/screen while the 
  26. natural end of the text is on the left side. 
  27.  
  28. In many cases, Arabic and Hebrew scripts contain embedded pieces of text which 
  29. are written and read from Left-To-Right.  In fact, having mixed Right-To-Left 
  30. (RtL) and Left-To-Right (LtR) "segments" of text is very common in these 
  31. languages.  Examples of such cases is the use of numbers (which are usually 
  32. LtR, as in English) and the use of embedded Latin text within Arabic/Hebrew 
  33. text, which is also very common. 
  34.  
  35. Having such text, with embedded Right-To-Left and Left-To-Right pieces 
  36. (segments), is the reason for referring to the Arabic and Hebrew languages as 
  37. "Bidirectional Languages" (or bidi languages, for short). 
  38.  
  39. In this document, we will use the term 'National Language' or 'Bidi Language' 
  40. to refer to 'Arabic or Hebrew'. (to distinguish it from English). Also, 
  41. 'Arabic/Hebrew' is used to signify 'either Arabic or Hebrew'. 
  42.  
  43.  
  44. ΓòÉΓòÉΓòÉ 1.2.1. Bidirectional Applications ΓòÉΓòÉΓòÉ
  45.  
  46. Bidirectional applications are applications that support the Arabic and Hebrew 
  47. languages. By nature, bidirectional applications have to be sensitive, to some 
  48. extent, to the fact that their text data is bidirectional (contains embedded 
  49. LtR and RtL segments). 
  50.  
  51. In this context there are two types of applications: 
  52.  
  53.      Bidi-Aware Applications 
  54.  
  55.       These applications are written specifically to be used by Arabic and 
  56.       Hebrew-speaking users.  These applications are aware of the fact that the 
  57.       text being processed is bidirectional, and take steps to ensure the 
  58.       correct processing of this text. Bidi-aware applications make active use 
  59.       of the PM bidirectional support APIs. 
  60.  
  61.      Bidi-Unaware Applications 
  62.  
  63.       Bidi-Unaware applications do not have any knowledge about the fact that 
  64.       the text they handle/process is bidirectional. Usually, these 
  65.       applications are developed for users of a Left-To-Right language (such as 
  66.       English or French), and thus they do not perform any special handling of 
  67.       bidirectional text. Such applications do not make explicit calls to the 
  68.       PM APIs for bidirectional support. 
  69.  
  70.  
  71. ΓòÉΓòÉΓòÉ 1.2.2. Scope of Bidirectional Support ΓòÉΓòÉΓòÉ
  72.  
  73. The PM bidirectional support has been designed with the following main design 
  74. objectives: 
  75.  
  76.      Allow creation of bidi-aware applications. 
  77.  
  78.      Allow as easy as possible conversion of bidi-unaware applications to 
  79.       being bidi-aware. 
  80.  
  81.      Allow usage of bidi-unaware applications in the National Language. The 
  82.       extent to which this is possible is largely dependent on the application 
  83.       itself. 
  84.  
  85.  Thus, the full bidirectional support is provided to applications which make 
  86.  active use of the PM Bidirectional services (APIs, PM messages etc). In 
  87.  addition, a certain degree of support is also provided for bidi-unaware 
  88.  applications. Depending on the application, this support (for bidi-unaware) 
  89.  may provide various degrees of usability for the application when working with 
  90.  Arabic or Hebrew. 
  91.  
  92.  The Bidirectional support in PM is provided in the Arabic and Hebrew language 
  93.  versions of OS/2. The support is active/configured when the COUNTRY selection 
  94.  during OS/2 installation is Arabic or Hebrew in these versions. 
  95.  
  96.  
  97. ΓòÉΓòÉΓòÉ 1.2.3. Making an Application Bidi-Aware ΓòÉΓòÉΓòÉ
  98.  
  99. Most of the applications that are developed today throughout the world are 
  100. created as Bidi-unaware applications (with the exception of applications 
  101. developed in the countries where the native language is Arabic or Hebrew). Such 
  102. applications can be made bidi-aware by adding calls to the PM bidi support APIs 
  103. and by adding code that is aware of bidirectional text and knows how to manage 
  104. it. 
  105.  
  106. The PM bidirectional support provides the following types of 
  107. services/mechanisms to assist the conversion process of an application to be 
  108. bidi-aware. 
  109.  
  110.      Bidirectional text presentation 
  111.  
  112.       Support for bidirectional text presentation is available. This support is 
  113.       sensitive to the contents of the BIDIATTR environment variable.  When 
  114.       this variable is set, the text output functions do some extra processing 
  115.       to the text being output. This support provides very basic bidirectional 
  116.       support for the benefit of bidi-unaware applications.  For applications 
  117.       that use text in a very simple way (i.e they do not have any 
  118.       sophisticated text handling features), enabling this support (by 
  119.       initializing the BIDIATTR environment variable) may be enough.  For this 
  120.       basic support, the application code does not need be changed at all.  The 
  121.       fact that the unaware application runs in a bidi-supporting environment 
  122.       (denoted by the BIDIATTR variable) is enough to trigger the 
  123.       system-provided bidirectional text handling and thus gain some level of 
  124.       automatic support for such applications. 
  125.  
  126.       In most cases, however, some additional support will be needed. In these 
  127.       cases, some changes must be made to the application in order to allow it 
  128.       to support bidi text. 
  129.  
  130.      Bidirectional Input support 
  131.  
  132.       This support allows typing of characters in both English and 
  133.       Hebrew/Arabic, as well as support for language-specific hotkeys. This is 
  134.       the basic means that allows the user to input national language text from 
  135.       the keyboard. 
  136.  
  137.      Bidirectional PM Controls. 
  138.  
  139.       PM applications make extensive use of system services called PM Controls. 
  140.       These services provide support for many routine tasks such as text entry, 
  141.       menu management, selections from a list of options and scrolling. 
  142.  
  143.       With the PM Bidirectional support, all PM controls are bidi-aware 
  144.       services.  Applications can make use of these bidi-aware services by 
  145.       marking them as bidi-aware and specifying their bidirectional attributes. 
  146.       This way, an application can be made aware (up to a certain extent) just 
  147.       by marking its PM resources as Bidi resources.  In many cases, this 
  148.       process involves only changes in resource files (.RC) rather than 
  149.       changing source (and executional) code. 
  150.  
  151.      Bidirectional support APIs. 
  152.  
  153.       The third level of support is available only for applications that 
  154.       incorporate in their code explicit calls to the various PM Bidirectional 
  155.       APIs, such as calls for text conversions, keyboard input support, 
  156.       justification etc. 
  157.  
  158.  
  159. ΓòÉΓòÉΓòÉ 1.2.4. Supported Code Pages ΓòÉΓòÉΓòÉ
  160.  
  161. The PM bidirectional support is dependent on the active codepage being used by 
  162. the application.  In most cases, the system determines what actions are taken 
  163. and what type of processing is done based on the active codepage. 
  164.  
  165. In this version of PM, the codepages that are supported for bidirectional 
  166. processing are: 
  167.  
  168.      Codepage 862 - Hebrew PC. 
  169.  
  170.      Codepage 864 - Arabic PC. 
  171.  
  172.  
  173. ΓòÉΓòÉΓòÉ 1.2.5. Arabic and Hebrew Fonts ΓòÉΓòÉΓòÉ
  174.  
  175. The Arabic and the Hebrew codepages are bilingual (i.e. they contain English 
  176. and Arabic or English and Hebrew characters). When either of these codepages is 
  177. active, the system fonts support all the characters in the relevant codepage. 
  178. This means that the system fonts are bilingual, for example "Courier" would 
  179. contain both English and Arabic/Hebrew. shapes. 
  180.  
  181. This means that applications do not need to change fonts when switching between 
  182. Arabic/Hebrew and English characters. 
  183.  
  184. Note:  Arabic and Hebrew postscript (Adobe Type 1) fonts are created using font 
  185. specific encoding. This means that the value used for the codepage of these 
  186. fonts is "65400" rather than the national codepage. Applications that specify 
  187. the usCodepage field when creating a logical font should use this value in 
  188. order to get a match for the Bidi postscript fonts. 
  189.  
  190.  
  191. ΓòÉΓòÉΓòÉ 2. Bidirectional Text and Attributes ΓòÉΓòÉΓòÉ
  192.  
  193. The following sections describe bidirectional text and attributes. 
  194.  
  195.  
  196. ΓòÉΓòÉΓòÉ 2.1. About Bidirectional Text ΓòÉΓòÉΓòÉ
  197.  
  198. To correctly process bidirectional text, applications must assume that text is 
  199. stored in computer memory in a "different way" from when presented on an output 
  200. device.  In other words, a text-conversion process of some sort takes place 
  201. when bidirectional text is retrieved from storage (files, memory) to be 
  202. displayed on the screen (or printer), or when it is read from the keyboard and 
  203. stored. 
  204.  
  205. There are many ways to represent (store in memory, or files) bidirectional text 
  206. that contains Arabic or Hebrew characters, English characters and numbers 
  207. (digits). Different applications use different methods to store their text data 
  208. and use different conversions before displaying their text. 
  209.  
  210. Applications may choose to use different formats to represent bidirectional 
  211. text, depending on the nature of the processing that they perform on this text. 
  212.  
  213. In order to support bidirectional text processing, the PM support for Hebrew 
  214. and Arabic defines a set of parameters that describe the different "features" 
  215. that any Arabic or Hebrew bidirectional text may have. These parameters are 
  216. called "Bidirectional Attributes". 
  217.  
  218. A bidirectional application can describe the nature of the bidirectional text 
  219. data it processes, by identifying a set of bidirectional attributes. These 
  220. bidirectional attributes, which are implemented in PM in a hierarchical model, 
  221. uniquely define the bidirectional text and the conversions it must go through, 
  222. to the PM system and to the PM bidirectional services. 
  223.  
  224. Below is the list of the bidirectional attributes as well as a short 
  225. explanation of each one of them. 
  226.  
  227.  
  228. ΓòÉΓòÉΓòÉ 2.2. Bidirectional Attributes ΓòÉΓòÉΓòÉ
  229.  
  230. The following sections describe the bidirectional attributes. 
  231.  
  232.  
  233. ΓòÉΓòÉΓòÉ 2.2.1. Text Type ΓòÉΓòÉΓòÉ
  234.  
  235. The 'Text Type' bidi attribute defines the method by which text segments (that 
  236. have a certain direction) are detected and processed.  The text type attribute 
  237. can have the following values: 
  238.  
  239.      Visual text 
  240.  
  241.       The 'Visual' data type means, that for a certain piece of text there are 
  242.       no sub-segments.  In other words, the whole text has the same direction 
  243.       (whether it is LtR or RtL is determined by the Text Orientation 
  244.       attribute, see below). Whether the text contains digits, English, or 
  245.       Arabic/Hebrew characters does not change the sequence of the characters 
  246.       within this given piece of text. 
  247.  
  248.       For example (LTR orientation; upper case letters represent English 
  249.       letters, while lowercase letters represent Arabic or Hebrew letters): 
  250.  
  251.               Index of character: 012345678901
  252.               Storage buffer    : LATIN cibara
  253.               Displayed String  : LATIN cibara
  254.  
  255.             or, in the case of RtL orientation:
  256.  
  257.               Index of character: 012345
  258.               Storage buffer    : arabic
  259.               Displayed String  : cibara
  260.  
  261.      Logical text with implicit detection and processing. 
  262.  
  263.       This value is sometimes called "implicit" (for short) or "typing order" 
  264.       as it usually represents the order of characters as they are typed on the 
  265.       keyboard. 
  266.  
  267.       Here, the determination of the sub-segments is largely based on the 
  268.       actual characters in the text.  When there is a doubt (as in the case of 
  269.       characters which do not have a "strong" language meaning associated with 
  270.       them, such as SPACE, QUESTION MARK and digits), the determination of the 
  271.       sub-segments and the conversion required is done by a "smart" algorithm. 
  272.  
  273.       Example (LTR orientation; upper case letters represent Latin letters, 
  274.       while lowercase letters represents Arabic or Hebrew letters). 
  275.  
  276.               Index of character: 012345678901
  277.               Storage buffer    : LATIN hebrew
  278.               Displayed String  : LATIN werbeh
  279.  
  280.  
  281. ΓòÉΓòÉΓòÉ 2.2.2. Text Orientation ΓòÉΓòÉΓòÉ
  282.  
  283. This attribute defines the orientation of a text string (object). It may have 
  284. the following values: 
  285.  
  286.      Left-To-Right 
  287.  
  288.      Right-To-Left 
  289.  
  290.      Contextual 
  291.  
  292.  For text that has the Visual data type, the text orientation determines the 
  293.  order of the characters.  For example, when visual text has Left-To-Right 
  294.  orientation, the order of the characters in the memory buffer and the 
  295.  presentation order (from left-to-right) is the same. 
  296.  
  297.  For text that has the Logical/Implicit data type, the text orientation of a 
  298.  certain piece of text defines which type of characters are considered the 
  299.  "base" text. The characters which belong to the "base" text retain their 
  300.  sequence when converting from storage to presentation or vice versa, while the 
  301.  characters which belong to embedded segments ("non base" text) are reversed. 
  302.  
  303.  For LtR text, Latin text retains its order while Arabic/Hebrew text is 
  304.  reordered (reversed). 
  305.  
  306.  For RtL text, Arabic/Hebrew text retains its order while Latin text is 
  307.  reordered (reversed). 
  308.  
  309.  Contextual text orientation is not exactly an orientation value (obviously, 
  310.  orientation can be only LtR or RtL).  The contextual text orientation value 
  311.  tells the system that the actual orientation of the given text should be 
  312.  determined based on the first "strong" character in the text (in storage 
  313.  buffer indexes).  I.e, if the first character in the buffer is an English 
  314.  character, the orientation of the text will be Left-To-Right.  If the first 
  315.  character in the buffer is Arabic/Hebrew 
  316.  
  317.    - the text orientation is Right-To-Left.
  318.  (If the first character in the buffer is a "neutral" character, such as a 
  319.  SPACE, the orientation is determined by the next character in buffer, and so 
  320.  on). 
  321.  
  322.  
  323. ΓòÉΓòÉΓòÉ 2.2.3. Window Orientation ΓòÉΓòÉΓòÉ
  324.  
  325. The "Window Orientation" bidi attribute is unique among all other bidi 
  326. attributes, as it defines a property of a WINDOW (rather than a property of the 
  327. text being processed). The window orientation attribute is "packaged" in the 
  328. bidi attribute word for convenience, since it is a very handy placeholder for 
  329. bidi-oriented information. 
  330.  
  331. The Window Orientation attribute covers several visual aspects of a window. 
  332. These include: 
  333.  
  334.      Layout 
  335.  
  336.       In the Window Orientation context, layout refers to the positioning of 
  337.       objects within a window or dialog. 
  338.  
  339.       A window with a LtR window orientation has its origin at the bottom left. 
  340.  
  341.       A window with a RtL window orientation has its origin at the bottom right 
  342.       of the window instead of the bottom left, thus placement of objects (e.g. 
  343.       child windows, controls, vertical scrollbar, etc.) within the window will 
  344.       be in the symmetrically opposite position to those in a LtR window. 
  345.  
  346.       Some examples of how this works: 
  347.  
  348.         -  RtL Buttons have their text positioned to the left of the 'button 
  349.            bitmap'. 
  350.  
  351.         -  RtL Horizontal scrollbars have their origin on the right. 
  352.  
  353.         -  Vertical scrollbars in listboxes, MLEs, etc. are placed on the left 
  354.            side of the window. 
  355.  
  356.         -  This concept is applied in the same way to other objects in the 
  357.            system. 
  358.  
  359.      Justification 
  360.  
  361.       In many cases the default justification of objects within a Right-To-Left 
  362.       object is on the right. 
  363.  
  364.  In general, a window with RtL window orientation has Right-To-Left layout and 
  365.  its objects are right-justified. 
  366.  
  367.  
  368. ΓòÉΓòÉΓòÉ 2.2.4. Symmetric Swapping ΓòÉΓòÉΓòÉ
  369.  
  370. Directional characters are characters such as parentheses, brackets, braces, 
  371. etc. In LtR text, an "open" bracket is a left bracket, while for RtL text an 
  372. "open" bracket is a right bracket. 
  373.  
  374. Sometimes (especially in the process of transforming a bidi-unaware application 
  375. to be bidi-aware), it is useful to have the system automatically "swap" between 
  376. the symmetric characters.  This way, the processing part of an application may 
  377. be left unchanged, while the presentation part is taken care of by this 
  378. automatic swap. Note that this automatic swap is relevant only for RtL text (or 
  379. RtL text segments within LtR text). 
  380.  
  381. For Example (Visual, RtL text). 
  382.  
  383.    Storage  buffer  : (1) hebrew
  384.    Display          : werbeh )1(       without symmetric swapping
  385.    Display          : werbeh (1)       with symmetric swapping
  386.  
  387.  
  388. ΓòÉΓòÉΓòÉ 2.2.5. Character Shape Determination ΓòÉΓòÉΓòÉ
  389.  
  390. Arabic is a cursive script.  This means that the presentation of each letter 
  391. depends on its location in the word (initial, middle, final or isolated). 
  392.  
  393. Data may be stored "shaped", i.e. each letter of the text is stored in the 
  394. specific codepoint (out of the different possible codepoints for that letter) 
  395. that suits its position in the word and the connecting capabilities of its 
  396. adjacent letters. Such data can be displayed directly. 
  397.  
  398. Data may also be stored in nominal or base shapes, i.e. one codepoint per 
  399. letter, regardless of its position.  Such data must be "shaped" before it is 
  400. displayed. 
  401.  
  402. The text shape attribute defines how the Arabic text is stored and also what 
  403. type of conversion should be performed on it in order to display it correctly. 
  404. It can take the following values: 
  405.  
  406.      TEXT_DISPLAY_SHAPED 
  407.  
  408.       This implies that the text is stored in nominal/base shapes and should be 
  409.       automatically shaped upon display. 
  410.  
  411.       PM entryfields that have this attribute automatically shape new text as 
  412.       it is being entered by the user and will submit the text in nominal 
  413.       shapes upon query. 
  414.  
  415.      TEXT_SHAPE_NOMINAL 
  416.  
  417.       This implies that the text is displayed and stored in its nominal (base) 
  418.       shapes. 
  419.  
  420.       This text shape is not commonly used. 
  421.  
  422.       The following shaping modes are valid only when the type of text is 
  423.       visual: 
  424.  
  425.         -  TEXT_SAVE_SHAPED 
  426.  
  427.            This implies that text is already shaped and ready for display. 
  428.  
  429.            PM entryfields that have this attribute automatically shape new text 
  430.            as it is being entered by the user and will submit the text as it 
  431.            appears on the screen upon query. 
  432.  
  433.         -  TEXT_SHAPE_INITIAL 
  434.  
  435.            This implies that text is already shaped and ready for display. 
  436.  
  437.            PM entryfields that are set to this mode shape new characters typed 
  438.            by the user in initial shapes and will submit the text as it appears 
  439.            on the screen upon query. 
  440.  
  441.            This mode is usually initiated with a hotkey by users who need to 
  442.            type some characters specifically in their initial shapes. 
  443.  
  444.         -  TEXT_SHAPE_MIDDLE 
  445.  
  446.            This implies that text is already shaped and ready for display. 
  447.  
  448.            PM entryfields that are set to this mode shape new characters typed 
  449.            by the user in middle shapes and will submit the text as it appears 
  450.            on the screen upon query. 
  451.  
  452.            This mode is usually initiated with a hotkey by users who need to 
  453.            type some characters specifically in their middle shapes. 
  454.  
  455.         -  TEXT_SHAPE_FINAL 
  456.  
  457.            This implies that text is already shaped and ready for display. 
  458.  
  459.            PM entryfields that are set to this mode shape new characters typed 
  460.            by the user in final shapes and will submit the text as it appears 
  461.            on the screen upon query. 
  462.  
  463.            This mode is usually initiated with a hotkey by users who need to 
  464.            type some characters specifically in their final shapes. 
  465.  
  466.         -  TEXT_SHAPE_ISOLATED 
  467.  
  468.            This implies that text is already shaped and ready for display. 
  469.  
  470.            PM entryfields that are set to this mode shape new characters typed 
  471.            by the user in isolated shapes and will submit the text as it 
  472.            appears on the screen upon query. 
  473.  
  474.            This mode is usually initiated with a hotkey by users who need to 
  475.            type some characters specifically in their isolated shapes. 
  476.  
  477.  
  478. ΓòÉΓòÉΓòÉ 2.2.6. Numerals ΓòÉΓòÉΓòÉ
  479.  
  480. The numerals attribute detemines how numerals are processed upon display as 
  481. follows: 
  482.  
  483.      NUMERALS_NOMINAL   - Display only nominal (i.e. Arabic) numerals. 
  484.  
  485.      NUMERALS_NATIONAL  - Display only national (i.e. Hindi) numerals. 
  486.  
  487.      NUMERALS_CONTEXT   - Display numerals according to surrounding text. 
  488.  
  489.      NUMERALS_PASSTHRU  - Display numerals as stored. 
  490.  
  491.  
  492. ΓòÉΓòÉΓòÉ 2.3. Conversions of Bidirectional Text Data ΓòÉΓòÉΓòÉ
  493.  
  494. Bidirectional applications use bidirectional text.  The bidirectional text is 
  495. described by bidirectional attributes.  Since applications use different sets 
  496. of bidirectional attributes (and thus, different representations of 
  497. bidirectional text), it is necessary to convert this text among representation 
  498. forms.  The most common case is when an application converts the text from the 
  499. internal (storage) representation to the external (presentation) form. 
  500.  
  501. OS/2 provides a set of APIs to manage the conversion of bidirectional text 
  502. between different formats. The text is assumed to be in a form/layout that is 
  503. described by a set of input values and is converted to another form described 
  504. by a set of output values. 
  505.  
  506. In order to perform a text conversion, the caller must first call 
  507. LayoutCreateObject to create a layout object. The layout object is 
  508. automatically associated with a set of default values, known as layout values, 
  509. that depend on the locale used to create it. 
  510.  
  511. Currently, the following locales are supported: 
  512.  
  513.      Locale_Arabic 
  514.  
  515.      Locale_Hebrew 
  516.  
  517.  Using the handle to the layout object created, the caller can query the 
  518.  current values using LayoutQueryValues and set them, using LayoutSetValues, to 
  519.  the values required for the text transformation. 
  520.  
  521.  The actual text transformation is done by the LayoutTransformText API, which 
  522.  converts its input buffer according to the values associated with the layout 
  523.  object. LayoutTransformText can also optionally provide some additional 
  524.  information about the transformation performed, such as mappings of the input 
  525.  buffer to the output buffer. 
  526.  
  527.  LayoutEditShape is a more specialized text conversion API that allows an 
  528.  application to do Arabic character shape editing in and around a specific 
  529.  location in a buffer. 
  530.  
  531.  When an application has finished its text conversions, it should release the 
  532.  resources used by the layout object using LayoutDestroyObject. 
  533.  
  534.  See more on layout values and programming in the reference section. 
  535.  
  536.  
  537. ΓòÉΓòÉΓòÉ 3. PM Support for Bidirectional Attributes ΓòÉΓòÉΓòÉ
  538.  
  539. Presentation Manager provides support for bidirectional text by providing 
  540. applications with APIs to enable them to manage bidirectional attributes at 
  541. several levels. 
  542.  
  543.      Process Bidirectional Attributes 
  544.  
  545.      Window Bidirectional Attributes 
  546.  
  547.      Presentation Bidirectional Attributes 
  548.  
  549.      Clipboard Bidirectional Attributes 
  550.  
  551.  
  552. ΓòÉΓòÉΓòÉ 3.1. Process Bidirectional Attributes ΓòÉΓòÉΓòÉ
  553.  
  554. Process bidirectional attributes are used to assign applications a default set 
  555. of attributes.  These attributes are used by various PM components to determine 
  556. the processing that must take place. 
  557.  
  558. In this version, the Process bidirectional attributes are determined based on 
  559. value of the "BIDIATTR" OS/2 environment variable which is in effect at the 
  560. time the program is loaded into memory. The BIDIATTR environment variable can 
  561. have multiple values that represent bidirectional attributes. For example: 
  562.  
  563. SET BIDIATTR=TEXT_ORIENT_RTL,TEXTTYPE_VISUAL,TEXT_SAVE_SHAPED
  564.  
  565. The names of the various bidirectional attributes are documented in Appendix D. 
  566.  
  567. Applications can set the process bidirectional attributes by using the 
  568. WinSetLangInfo API, with the parameter LI_BD_PROCESS_ATTR. 
  569.  
  570.  
  571. ΓòÉΓòÉΓòÉ 3.2. Window Bidirectional Attributes ΓòÉΓòÉΓòÉ
  572.  
  573. Window Bidirectional Attributes are assigned to each window in the Presentation 
  574. Manager system.  Window bidirectional attributes are usually inherited by a 
  575. window, at creation time, from its parent window. This is true for all windows, 
  576. except for windows that are children of the desktop window.  These windows 
  577. inherit their window bidirectional attributes from the process bidi attributes. 
  578.  
  579. Applications use the WinSetLangInfo API with the LI_BD_WND_ATTR parameter to 
  580. set specific window bidi attributes.  Note that with the LI_BD_WND_ATTR 
  581. applications have control on the way bidirectional attributes are inherited 
  582. within the parent-child chain. 
  583.  
  584. PM controls (which are part of the PM system) are sensitive to their 
  585. bidirectional attributes.  They determine their window layout based on the 
  586. 'window orientation' attribute and perform text conversions based on other 
  587. bidirectional attributes. 
  588.  
  589.  
  590. ΓòÉΓòÉΓòÉ 3.3. Presentation Bidirectional Attributes ΓòÉΓòÉΓòÉ
  591.  
  592. These bidirectional attributes are associated with text output operations.  The 
  593. text output APIs in PM (WinDrawText and the various GpiCharString APIs) are 
  594. sensitive to the presentation bidirectional attributes.  These attributes are 
  595. inherited from the process bidirectional attributes at creation time of each 
  596. GPI presentation space. 
  597.  
  598. The text-output APIs use the presentation bidi attributes to determine the 
  599. conversions that must be applied to the text as part of the processing of the 
  600. text-output APIs.  For example, GpiCharString will convert bidirectional text, 
  601. by calling the LayoutTransformText API on behalf of the application program. 
  602. The bidi-converted string will then be rendered on the the output device 
  603. (rather than the original string that has been provided in GpiCharString API 
  604. call). 
  605.  
  606. Applications can optionally modify the presentation bidi attributes dynamically 
  607. by using the GpiSetBidiAttr API. Thus, applications have control on the text 
  608. conversion that are executed on a call by call basis. 
  609.  
  610.  
  611. ΓòÉΓòÉΓòÉ 3.4. Clipboard Bidirectional Attributes ΓòÉΓòÉΓòÉ
  612.  
  613. The clipboard maintains two sets of bidirectional attributes. 
  614.  
  615. The first set is called the 'Clipboard Bidirectional Attributes' and is 
  616. associated with the text data that is currently stored in the clipboard. The 
  617. default value for this set is inherited from the process bidirectional 
  618. attributes of the application that issues WinSetClipbrdData. The source 
  619. application can optionally modify this set of attributes by using the 
  620. WinSetLangInfo API with the LI_BD_CLIP_ATTR effect. 
  621.  
  622. The second set is called the 'Conversion Bidirectional Attributes'. This set is 
  623. associated with the target application, and its default value is inherited from 
  624. the process bidirectional attributes of the application that issues the 
  625. WinQueryClipbrdData API. The target application can optionally modify these 
  626. attributes by using the WinSetLangInfo API with LI_BD_CLIP_CONV_ATTR effect. 
  627.  
  628. Refer to the Bidirectional Text Exchange Among Applications - Clipboard section 
  629. for more details. 
  630.  
  631.  
  632. ΓòÉΓòÉΓòÉ 3.5. Managing Bidirectional Attributes Using WinSetLangInfo ΓòÉΓòÉΓòÉ
  633.  
  634. The WinSetLangInfo and the WinQueryLangInfo APIs are used by applications to 
  635. manage the various bidirectional attributes. The ulEffect parameter of these 
  636. APIs determines what kind of bidirectional attribute is being set/queried by 
  637. the call. The following values for ulEffect are supported: 
  638.  
  639.      LI_BD_PROCESS_ATTR - Process bidirectional attributes. 
  640.  
  641.      LI_BD_WND_ATTR   - Window bidirectional attributes. 
  642.  
  643.      LI_BD_CLIP_ATTR   - Bidirectional attributes of the text contained in the 
  644.       clipboard. 
  645.  
  646.      LI_BD_CLIP_CONV_ATTR - Bidirectional attributes to be used to convert the 
  647.       clipboard text data before being given to the application. 
  648.  
  649.      LI_BD_WND_STAT   - Window bidirectional status (see below). 
  650.  
  651.  For the LI_BD_WND_ATTR and LI_BD_WND_STAT effects, the caller of the API can 
  652.  choose if the setting of the bidi attributes (or status) should be done for 
  653.  the specified window itself, or for the specified window and all his 
  654.  child-windows.  This is possible by specifying the LIF_CHILD_INHERIT flag bit 
  655.  in the flFlags parameter of the WinSetLangInfo API. 
  656.  
  657.  The caller can also instruct the window whose bidi attributes (or bidi status) 
  658.  are being set, to redraw itself, by specifying the LIF_WND_REFRESH flag. 
  659.  
  660.  
  661. ΓòÉΓòÉΓòÉ 3.5.1. Using WinSetLangInfo to Send WM_SETBIDIATTR Messages ΓòÉΓòÉΓòÉ
  662.  
  663. As part of the WinSetLangInfo API, an optional message can be sent to the 
  664. window procedure whose bidi attributes (or bidi status) is being set. This 
  665. provides a bidi-aware window procedure with a way to know that an application 
  666. is modifying its bidi state (attribute and/or status).  This allows the window 
  667. procedure to provide the required processing for this case. For example, when a 
  668. bidi-aware window receives the WM_SETBIDIATTR message, it can inspect which 
  669. bidi attributes are being set, and do necessary conversion on its internal 
  670. buffers to accommodate this change.  Another option it can take is to refuse 
  671. the request and protect its bidi attributes from modifications done by external 
  672. applications. 
  673.  
  674. A window procedure can also ignore the WM_SETBIDIATTR by passing it to the 
  675. default window procedure which will result in the bidi attributes being set in 
  676. the internal window structure. 
  677.  
  678. Similarly, the WinQueryLangInfo can send a message to the window procedure 
  679. whose bidi attributes or status are being queried. This gives the bidi-aware 
  680. window a chance to specify the value of the bidi attributes or status that is 
  681. returned to the querying application. 
  682.  
  683. A window procedure can also ignore the WM_QUERYBIDIATTR by passing it to the 
  684. default window procedure which returns the window bidi attributes as stored in 
  685. the internal window structure. 
  686.  
  687. When the WinSetLangInfo API is used by a window procedure to set its own 
  688. bidirectional attributes as part of WM_SETBIDIATTR processing, the 
  689. LIF_NO_SENDMSG flag should be set in order to prevent recursive calls to the 
  690. window procedure. 
  691.  
  692. It is recommended that the LIF_NO_SENDMSG flag is NOT turned on when 
  693. WinSet/QueryLanginfo is called outside the window procedure whose attributes 
  694. are being set. Applications should generally use the default flag (which causes 
  695. a WM_SETBIDIATTR message to be sent), so that bidi-aware window procedures can 
  696. take the appropriate actions when a request to change their Bidi attributes is 
  697. made. 
  698.  
  699.  
  700. ΓòÉΓòÉΓòÉ 4. Bidirectional Status ΓòÉΓòÉΓòÉ
  701.  
  702. The following sections describe bidirectional status. 
  703.  
  704.  
  705. ΓòÉΓòÉΓòÉ 4.1. About Bidirectional Status ΓòÉΓòÉΓòÉ
  706.  
  707. Every window in the system maintains its bidirectional status. 
  708.  
  709. Bidirectional status flags are used to represent configuration information that 
  710. tells the system how to handle various events for the window. The status flags 
  711. include information that defines how bidirectional language hotkeys should be 
  712. handled and its current typing mode. 
  713.  
  714. The bidirectional status is saved by the system for each window and it can be 
  715. set and queried by applications using the WinSetLangInfo API. 
  716.  
  717.  
  718. ΓòÉΓòÉΓòÉ 4.2. Managing Bidirectional Status Using WinSetLangInfo ΓòÉΓòÉΓòÉ
  719.  
  720. The WinSetLangInfo API is used to manipulate the window bidi status word. 
  721.  
  722. The Bidirectional status flags hold information about the following: 
  723.  
  724.      Status of the bidirectional input support (enabled/disabled). 
  725.  
  726.      Hotkey disable flags. 
  727.  
  728.      AutoPush enable flags. 
  729.  
  730.  The PM Bidirectional Support defines several hotkeys that allow the user to 
  731.  perform Bidi-related operations such as Start Push or Field Reverse. 
  732.  
  733.      Status of the bidirectional Input Support. 
  734.  
  735.       When this flag is set ON, the bidirectional input support system is 
  736.       disabled. The input system operates in the same way as in a non-bidi (e.g 
  737.       US/English) system. 
  738.  
  739.      Hotkey disable flags 
  740.  
  741.       The hotkey disable flags are used by the system to process the various 
  742.       bidirectional hotkeys. When a certain flag is ON this tells the system 
  743.       that the default system action for this hotkey (identified by the flag) 
  744.       is disabled. Applications can disable hotkeys that use key combinations 
  745.       which the application wishes to handle itself. 
  746.  
  747.       When a disabled bidirectional hotkey combination is detected, the system 
  748.       does not take any special action and passes the event to the application. 
  749.       This allows the application to receive notification about the hotkey 
  750.       being typed and take the necessary action. In addition, the system also 
  751.       generates a WM_CHAR event with a Virtual Key value (VK_) appropriate to 
  752.       this hotkey. This allows applications to isolate themselves from the 
  753.       actual key combination and be sensitive only to the virtual key value 
  754.       (this allows remapping of the bidi hotkeys). 
  755.  
  756.       When a hotkey is enabled, the system will translate the key combination 
  757.       to the relevant bidi virtual key identifier. Applications that respond to 
  758.       the bidirectional hotkeys will take the appropriate action when they 
  759.       detect the virtual key identifiers. The system may also take some actions 
  760.       based on the hotkey being pressed (such as changing the keyboard layer, 
  761.       see below). 
  762.  
  763.      AutoPush enable flags. 
  764.  
  765.       Bidirectional status also contain enable/disable flags for 'Automatic 
  766.       Push'. These flags tell the system if the user has enabled the 'AutoPush' 
  767.       feature for the PM entry fields. (AutoPush enabled means that the system 
  768.       starts and ends Push mode automatically, based on the characters that are 
  769.       typed by the user. AutoPush is only relevant if the PM entry field 
  770.       contains visual text). There are two AutoPush flags, one for typing in 
  771.       Left-To-Right direction and one for typing in Right-To-Left. 
  772.  
  773.  
  774. ΓòÉΓòÉΓòÉ 4.2.1. Using WinSetLangInfo to Send WM_SETBIDISTAT Messages ΓòÉΓòÉΓòÉ
  775.  
  776. The WM_SETBIDISTAT message is optionally sent to a window procedure every time 
  777. a window bidirectional status word is set. Likewise, the WM_QUERYBIDISTAT can 
  778. be sent when the status is queried. This lets a bidi-aware window procedure 
  779. know that its status is being change and to take the appropriate action, if 
  780. required. In general, these messages are sent and processed in the same way as 
  781. the WM_SETBIDIATTR and WM_QUERYBIDIATTR message, as described in the "Sending 
  782. WM_SETBIDIATTR messages in WinSetLangInfo API". 
  783.  
  784.  
  785. ΓòÉΓòÉΓòÉ 5. Keyboard Input and Layers ΓòÉΓòÉΓòÉ
  786.  
  787. The following sections describe keyboard input and layers. 
  788.  
  789.  
  790. ΓòÉΓòÉΓòÉ 5.1. What Are Keyboard Layers? ΓòÉΓòÉΓòÉ
  791.  
  792. On keyboards used for bidirectional languages, two characters (a Latin one and 
  793. a "National Language" one) are engraved on each key and the user can select 
  794. which of these characters is used, by selecting the active keyboard language 
  795. (or "Keyboard Layer"). 
  796.  
  797. Changing the keyboard layer can be done by the user pressing one of the "Layer 
  798. Change" hotkeys, or by an application issuing the WinSetKbdLayer API. In this 
  799. way, the same physical keyboard is used to input text in both languages. 
  800.  
  801. CUA guidelines define the "keyboard layer change" hotkeys as follows: 
  802.  
  803.      Select Latin/English layer - Alt+Left Shift. 
  804.  
  805.      Select National Language layer (Arabic/Hebrew) - Alt+Right Shift. 
  806.  
  807.  
  808. ΓòÉΓòÉΓòÉ 5.2. Managing Keyboard Layers Using WinSetKbdLayer ΓòÉΓòÉΓòÉ
  809.  
  810. Keyboard layers are set and queried by the WinSetKbdLayer and the 
  811. WinQueryKbdLayer APIs. These APIs are provided so that applications can set the 
  812. keyboard to produce characters in the language that is required by the 
  813. application for a specified window (or text input field). Issuing a 
  814. WinSetKbdLayer API by an application is equivalent to pressing a "Layer Change" 
  815. hotkey by the user. 
  816.  
  817.  
  818. ΓòÉΓòÉΓòÉ 5.2.1. WM_KBDLAYERCHANGED Message ΓòÉΓòÉΓòÉ
  819.  
  820. When the keyboard layer is changed, a WM_KBDLAYERCHANGED is optionally posted 
  821. to the window procedure that has keyboard focus, to notify it about the 
  822. keyboard layer change. This lets the window procedure take the appropriate 
  823. action (such as updating its internal variables and/or updating some status 
  824. display). 
  825.  
  826. The message is sent only when the WinSetKbdLayer API is specifically instructed 
  827. to do so by specifying the SKLF_SENDMSG flag. 
  828.  
  829.  
  830. ΓòÉΓòÉΓòÉ 5.3. Bidirectional Hot Keys Processing ΓòÉΓòÉΓòÉ
  831.  
  832. The system performs some processing for bidi hotkeys. When bidi hotkeys are 
  833. detected, the system generates WM_CHAR messages containing the appropriate Bidi 
  834. virtual keys (VK_XX values). The system may also take some default action 
  835. depending on whether the specific hotkey is enabled or disabled (see below). 
  836.  
  837. Note:  The term Enable/Disable of Bidi Hotkey is a bit mis-leading. The effect 
  838. of disabling a bidi hotkey does not neccessarily disable the hotkey itself - 
  839. but the system default processing that is associated with this hotkey. For 
  840. example, when the start push hotkey is disabled the Push Popup is NOT invoked 
  841. (this is the default action taken by the system for VK_START_PUSH). The 
  842. WM_CHAR/VK_START_PUSH message is generated in any  case. 
  843.  
  844. Whenever the system detects a Bidi hotkey which is enabled, the following 
  845. actions take place: 
  846.  
  847.      A WM_CHAR message containing the bidi VK value is generated. 
  848.  
  849.      The message containing the hotkey combination is consumed. 
  850.  
  851.      The system performs some default action for relevant hotkeys. 
  852.  
  853.  The following is the default action taken by the system for each enabled hot 
  854.  key: 
  855.  
  856.      Set keyboard layer to Latin or National 
  857.  
  858.       The appropriate keyboard layer is set for the window. 
  859.  
  860.      Start push 
  861.  
  862.       The Bidi "Push Popup" IME is invoked. 
  863.  
  864.      End push 
  865.  
  866.       No action is taken. 
  867.  
  868.      Field reverse (toggle) 
  869.  
  870.       Field reverse edit mode is activated. 
  871.  
  872.      Window reverse (toggle) 
  873.  
  874.       No action is taken. 
  875.  
  876.      Activate auto push mode (toggle) 
  877.  
  878.       No action is taken. 
  879.  
  880.      Arabic shape selection hotkeys 
  881.  
  882.       No action is taken. 
  883.  
  884.      Activate Status Indicator 
  885.  
  886.       The Language Viewer is invoked, if one is registered in the system. 
  887.  
  888.  Whenever the system detects a Bidi hotkey which is disabled, it does not 
  889.  generate the default action associated with this hotkey. Note that the 
  890.  generation of the VK_ value is NOT suppressed. 
  891.  
  892.  The following actions take place: 
  893.  
  894.      A WM_CHAR message containing the bidi VK value is generated. 
  895.  
  896.      The message containing the hotkey combination is not consumed. I.e. 
  897.       applications get both the VK value and the original key combination. 
  898.  
  899.      No default action is performed by the system. 
  900.  
  901.  Bidi aware applications that wish to process some hotkeys themselves may 
  902.  choose to disable them in order to prevent the system from taking the default 
  903.  action. 
  904.  
  905.  For example, a wordprocessor would probably disable the VK_START_PUSH hotkey, 
  906.  to stop the system from bringing up the push popup dialog, since the 
  907.  application will provide right-to-left typing functionality itself. 
  908.  
  909.  
  910. ΓòÉΓòÉΓòÉ 6. Bidirectional Support in PM Controls ΓòÉΓòÉΓòÉ
  911.  
  912. The following sections describe bidirectional support in PM controls. 
  913.  
  914.  
  915. ΓòÉΓòÉΓòÉ 6.1. About Bidirectional Support of PM Controls ΓòÉΓòÉΓòÉ
  916.  
  917. PM Controls are windows which are provided as part of the PM system. PM 
  918. controls are used by applications to carry out simple input and output tasks 
  919. (such as simple data entry, and choice selection). 
  920.  
  921. PM Controls are bidi-aware windows which support bidirectional attributes and 
  922. status. Thus they are sensitive to the various settings in the bidi attributes 
  923. and bidi status and take actions accordingly. For example, PM controls support 
  924. the 'window orientation' bidi attribute by formatting and displaying themselves 
  925. according to the current orientation setting. Another example is their 
  926. awareness to the active keyboard layer, especially in windows that process text 
  927. input, such as the single-line Entry Field (SLE). 
  928.  
  929. By using the bidi-aware PM controls, applications can achieve high degree of 
  930. bidirectional support, since many tasks that are specific to bidirectional 
  931. support, are provided "automatically" by the controls, on behalf of the 
  932. application. In other words, as PM controls relieve the application from 
  933. implementing code for routine and simple tasks (such as text input), they also 
  934. relieve the application (to an extent), from dealing with specific 
  935. bidirectional processing required for these tasks. 
  936.  
  937.  
  938. ΓòÉΓòÉΓòÉ 6.2. Using BIDIPARAMs in Resource Scripts ΓòÉΓòÉΓòÉ
  939.  
  940. PM Controls are usually defined in Resource Scripts. Usually, modfiying 
  941. resources does not require the application developer to change code in the 
  942. application. 
  943.  
  944. The BIDIPARAM keyword is used to mark PM controls as having specific 
  945. bidirectional features (attributes and status). Using the BIDIPARAM keyword in 
  946. a resource script allows the application developer to change the definition of 
  947. a PM control window, such that when created it behaves "automatically" in a 
  948. certain bidirectional manner (e.g, it is formatted "automatically" as a 
  949. "Right-To-Left" window, or is initially ready to accept Arabic/Hebrew text). 
  950.  
  951. BIDIPARAMs are inherited to child windows. For example, specifying BIDIPARAMs 
  952. for a dialog window resource, affects all child-windows in that dialog. 
  953.  
  954. The BIDIPARAM keyword is specified with two parameters. The first one is the 
  955. bidi feature that is manipulated (i.e a certain bidirectional attribute, or a 
  956. certain bidirectional status flag) and the second parameter is the value that 
  957. is given to that feature. In the following example, the dialog window is marked 
  958. has having Right-To-Left window orientation. All child windows inherit this 
  959. feature, except for the entry field which is specified has having a 
  960. Left-To-Right window orientation. In addition the radio button is marked has 
  961. having "Implicit" text type. 
  962.  
  963. DLGTEMPLATE ID_SAMPLE LOADONCALL MOVEABLE DISCARDABLE
  964. BEGIN
  965.     DIALOG "Sample Bidirectional Dialog", ID_SAMPLE, 5, 10, 100, 50,
  966.     FS_DLGBORDER
  967.     BIDIPARAM      PP_BDATTR_WND_ORIENTATION  BDA_WND_ORIENT_RTL
  968.  
  969.     BEGIN
  970.  
  971.        ENTRYFIELD     "", ID_ENTRY,  5, 80, 40, 8
  972.        BIDIPARAM      PP_BDATTR_WND_ORIENTATION BDA_WND_ORIENT_LTR
  973.  
  974.        RADIOBUTTON    "Radio", ID_RADIO, 5, 60, 40, 8
  975.        BIDIPARAM      PP_BDATTR_TEXTTYPE BDA_TEXTTYPE_IMPLICIT
  976.  
  977.        CHECKBOX       "Check", ID_CHECK1, 5, 50, 40, 8
  978.    END
  979. END
  980.  
  981. The following is a list of PM controls with a short description of their 
  982. bidirectional support behavior. 
  983.  
  984.  
  985. ΓòÉΓòÉΓòÉ 6.3. Button ΓòÉΓòÉΓòÉ
  986.  
  987. The Button control handles its text according to its window bidi attributes. 
  988.  
  989. Radio buttons and Checkboxes with right-to-left window orientation behave as 
  990. follows: 
  991.  
  992.      The Selection Icon (a little Box for Check Box, a little circle for Radio 
  993.       Buttons) is right justified. It is located in the right symmetric 
  994.       position, relative to its position in a <r Button. 
  995.  
  996.      The Text of the Button, is displayed to the left of the Selection Icon, 
  997.       and is right justified. 
  998.  
  999.      It switches the language layer to the national language , so it can 
  1000.       process Arabic/Hebrew 
  1001.  
  1002.              "Mnemonics" entered from the keyboard.
  1003.  
  1004.  
  1005. ΓòÉΓòÉΓòÉ 6.4. Combination-Box ΓòÉΓòÉΓòÉ
  1006.  
  1007. The bidi attributes of the listbox part and the entryfield part of the 
  1008. combination box are "linked" (i.e changing one of them causes the other to 
  1009. change as well). 
  1010.  
  1011. When the combination box has right-to-left window orientation the listbox is 
  1012. located beneath and to the left of the entryfield. The left side of the listbox 
  1013. is aligned with the left side of the entryfield. 
  1014.  
  1015.  
  1016. ΓòÉΓòÉΓòÉ 6.5. Container ΓòÉΓòÉΓòÉ
  1017.  
  1018. The Container control manages a hierarchy of bidi attributes which resembles 
  1019. the hierarchy of the container components. 
  1020.  
  1021. A container control typically has the following hierarchy: 
  1022.  
  1023.    Container --> Record(s) -->  Field(s)
  1024.  
  1025. Initially, records and fields do not have bidi attributes of their own (their 
  1026. bidi-attribute are not-initialized). At this time, their effective bidi 
  1027. attributes are those of the container window. 
  1028.  
  1029. Applications can set their container's records or fields bidi attributes by 
  1030. sending the CM_SETITEMBIDIATTR and CM_SETFIELDBIDIATTR messages.. 
  1031.  
  1032. They can query their container's records and fields bidi attributes by sending 
  1033. CM_QUERYTEMBIDIATTR and CM_QUERYFIELDBIDIATTR. 
  1034.  
  1035. The bidi-attributes hierarchy of the container works as follows: 
  1036.  
  1037.      A field uses its own bidi attribute (set by CM_SETFIELDBIDIATTR). 
  1038.  
  1039.      If its bidi-attribute has not been initalized (by sending the 
  1040.       CM_SETFIELDBIDIATTR message), a field uses the bidi attribute of its 
  1041.       record. 
  1042.  
  1043.      A record uses it own bidi attribute (set by CM_SETITEMBIDIATTR). 
  1044.  
  1045.      If its bidi-attribute has not been initialized (by sending the 
  1046.       CM_SETITEMBIDIATTR), a field uses the bidi attribute of the container 
  1047.       window. 
  1048.  
  1049.  The following is the description of the container window messages that are 
  1050.  used to manage bidi attributes: 
  1051.  
  1052.   CM_SETITEMBIDIATTR - Set bidi attributes for a specific item (record)
  1053.  
  1054.      mp1 - PRECORDCORE pRecordCore
  1055.      mp2 - pointer to the following structure.
  1056.  
  1057.      typedef struct _BD_ATTR_MASK
  1058.            {
  1059.            ULONG  ulBD_Attr;
  1060.            ULONG  ulBD_Mask;
  1061.            } BD_ATTR_MASK;
  1062.  
  1063.   CM_QUERYITEMBIDIATTR - Queries the bidi attributes of a specific
  1064.                          item (record).
  1065.      mp1 - PRECORDCORE pRecordCore
  1066.      mp2 - PULONG      pBidiAttr - points to a ULONG where BidiAttributes
  1067.                                    are returned.
  1068.  
  1069.   CM_SETFIELDBIDIATTR: - Sets bidi attributes for a specific field (in
  1070.                          details view only).
  1071.  
  1072.      mp1 - PFIELDINFO pFieldInfo
  1073.      mp2 - pointer to the following structure.
  1074.  
  1075.      typedef struct _BD_ATTR_MASK
  1076.            {
  1077.            ULONG  ulBD_Attr;
  1078.            ULONG  ulBD_Mask;
  1079.            } BD_ATTR_MASK;
  1080.  
  1081.   CM_QUERYFIELDBIDIATTR - Queries the bidi attributes of a specific field
  1082.                           (in details view only).
  1083.  
  1084.      mp1: PFIELDINFO pFieldInfo
  1085.      mp2: PULONG     pBidiAttr - points to a ULONG where BidiAttributes
  1086.                                  are returned.
  1087.  
  1088.  In general, when the window orientation of the Container is RtL its 
  1089.  presentation and behavior is symmetric to the one used in LtR orientation. 
  1090.  Some specific points are: 
  1091.  
  1092.      "First" is considered on the right, "Next" is to the left. For example, 
  1093.       the "First" view in a split details view is on the right and the "second" 
  1094.       is on its left. 
  1095.  
  1096.      Justification of fields is determined by the field attribute word 
  1097.       (CFA_LEFT, CFA_RIGHT). If no justification is specified, then the default 
  1098.       justification is determined according to the effective bidi attribute of 
  1099.       the field (if WND_ORIENT_RTL then default justification is RIGHT). See 
  1100.       more, below, on "effective" bidi attributes. 
  1101.  
  1102.      Vertical scroll-bars are positioned at the left side of the container and 
  1103.       horizontal scrollbars are assigned RtL orientation (see section on bidi 
  1104.       support for scrollbars). 
  1105.  
  1106.  
  1107. ΓòÉΓòÉΓòÉ 6.6. Dialog Box ΓòÉΓòÉΓòÉ
  1108.  
  1109. The dialog box manager (which is activated using the WinDlgBox and 
  1110. WinProcessDlg APIs) inherits its OWNER window bidi attributes. This attributes 
  1111. are inherited to its child windows, except if the child window has predefined 
  1112. BIDIPARAM. 
  1113.  
  1114. When the window orientation of the DialogBox is right to left, all child 
  1115. controls are positioned in their symmetric position in the window. 
  1116.  
  1117.  
  1118. ΓòÉΓòÉΓòÉ 6.7. Entry-Field (Single-Line) ΓòÉΓòÉΓòÉ
  1119.  
  1120. The single-line entry field processes its text according to its bidi attributes 
  1121. and according to the user interface convention used (Manual/Visual or 
  1122. Automatic/Implicit). 
  1123.  
  1124. See more about the user interface of the entry field in the user documentation 
  1125. of the OS/2 Hebrew/Arabic National Language Version. 
  1126.  
  1127.  
  1128. ΓòÉΓòÉΓòÉ 6.8. Entry Field (Multi-Line) ΓòÉΓòÉΓòÉ
  1129.  
  1130. The multi-line entry field processes its text according to its bidi attributes 
  1131. and according to the user interface convention used (Manual/Visual or 
  1132. Automatic/Implicit). 
  1133.  
  1134. See more about the user interface of the entry field in the &pmug. publication. 
  1135.  
  1136.  
  1137. ΓòÉΓòÉΓòÉ 6.9. Frame ΓòÉΓòÉΓòÉ
  1138.  
  1139. When the frame control has right-to-left window orientation, the position of 
  1140. its controls is symmetric to the position in left-to-right orientation, except 
  1141. for the system-menu, and min-max controls that stay at the same position. 
  1142.  
  1143. The frame responds to the WM_SETBIDIATTR message by re-positioning of its 
  1144. controls. It also sends the message to the client window. 
  1145.  
  1146.  
  1147. ΓòÉΓòÉΓòÉ 6.10. Listbox ΓòÉΓòÉΓòÉ
  1148.  
  1149. The &rtl behavior of the List Box results in the justification of the text in 
  1150. each listbox item. In a &rtl Listbox, the text of the items is right-justified 
  1151. (as opposed to left-justification in the original, <r Listbox). 
  1152.  
  1153. In addition, the display of the text is done in the correct order, according to 
  1154. the bidi attributes of the listbox window. 
  1155.  
  1156.  
  1157. ΓòÉΓòÉΓòÉ 6.11. Menu ΓòÉΓòÉΓòÉ
  1158.  
  1159. The menu control processes it items' text according to its bidi attributes. 
  1160.  
  1161. When the menu's window orientation is RtL, the Menu control operates in a 
  1162. symmetric way relative to the behavior of the original (LtR) Menu control. 
  1163.  
  1164. In RtL action Bars, the arrow keys behave in a visual way. I.e. The Right-Arrow 
  1165. key is considered to have a 'Backward' operation and the Left-Arrow key is 
  1166. considered to have 'Forward' operation. 
  1167.  
  1168. The menu supports mnemonics in the "correct" keyboard layer. The menu control 
  1169. sets the keyboard layer based on the language of the first mnemonic character 
  1170. defined in the menu. This means, that it is expected that in a certain menu, 
  1171. the application uses only one language for mnemonic characters. 
  1172.  
  1173. For Arabic: All character shapes of any Arabic mnemonic are accepted. 
  1174.  
  1175.  
  1176. ΓòÉΓòÉΓòÉ 6.12. Notebook ΓòÉΓòÉΓòÉ
  1177.  
  1178. Selecting various BKS_ notebook styles together with setting the window 
  1179. orientation to right-to-left can be used to construct a notebook which 
  1180. resembles a right-to-left notebook. 
  1181.  
  1182. When the notebook control has RtL window orientation, the page arrows have 
  1183. their roles reversed: the left arrow turns the pages forwards, whereas the 
  1184. right one - backwards. The text of Tabs, and Status line is converted according 
  1185. to their Bidi Attributes. 
  1186.  
  1187. For Arabic, mnemonic specified in TABs are normalized to their base shapes. 
  1188.  
  1189. The notebook control processes the views of its internal objects (Tabs, 
  1190. Status-Line and Page-Arrows) according to their bidi attributes. Applications 
  1191. are responsible for processing the views of their own page components (e.g 
  1192. dialog controls) by setting the appropriate bidi attributes to these 
  1193. components. 
  1194.  
  1195. The internal objects use the bidi attributes of the notebook window, unless 
  1196. their bidi attributes are specifically set using one of the following messages: 
  1197.  
  1198.      BKM_SETTABTEXTBIDIATTR 
  1199.  
  1200.      BKM_SETSTATUSLINEBIDIATTR 
  1201.  
  1202.      BKM_SETPAGEINFO 
  1203.  
  1204.  Applications can query the bidi attributes of their tabs and status-line page 
  1205.  components using the following messages: 
  1206.  
  1207.      BKM_QUERYTABTEXTBIDIATTR 
  1208.  
  1209.      BKM_QUERYSTATUSLINEBIDIATTR 
  1210.  
  1211.      BKM_QUERYPAGEINFO 
  1212.  
  1213.  When the notebook control receives the WM_SETBIDIATTR message it modifies its 
  1214.  own bidi attributes (and as a result - its appearance). 
  1215.  
  1216.  
  1217. ΓòÉΓòÉΓòÉ 6.13. Slider ΓòÉΓòÉΓòÉ
  1218.  
  1219. The Value Set control processes it text according to its window bidi 
  1220. attributes. 
  1221.  
  1222. The SLS_HOMERIGHT style of the Slider control is used to support RtL window 
  1223. orientation for this control. 
  1224.  
  1225.  
  1226. ΓòÉΓòÉΓòÉ 6.14. Spin Button ΓòÉΓòÉΓòÉ
  1227.  
  1228. The entryfield part of the Spin Button control inherits the same bidi 
  1229. attributes as those of the Spin Button window. It behaves in the same way as 
  1230. the 'normal' entry field. 
  1231.  
  1232. When the SpinButton control has RtL window orientation, the location of the 
  1233. "arrow-window" is on the left side of the window. 
  1234.  
  1235.  
  1236. ΓòÉΓòÉΓòÉ 6.15. Static ΓòÉΓòÉΓòÉ
  1237.  
  1238. The Static control processes its text according to its window bidi attributes. 
  1239.  
  1240. The DT_RIGHT flag is the default when the window has RtL orientation. 
  1241.  
  1242. The DT_WORDBREAK is sensitive to the text orientation in the BiDi attributes 
  1243. word. 
  1244.  
  1245. When SS_GROUPBOX is specified in Static controls that have RtL window 
  1246. orientation, the text is right-justified. 
  1247.  
  1248.  
  1249. ΓòÉΓòÉΓòÉ 6.16. Title-Bar ΓòÉΓòÉΓòÉ
  1250.  
  1251. The Title-Bar control processes its text according to its window bidi 
  1252. attributes. 
  1253.  
  1254. When the Title-Bar control has Rtl window orientation: 
  1255.  
  1256.      Text is right-justified. 
  1257.  
  1258.      Text is truncated on the left side. 
  1259.  
  1260.  The same behavior (truncation on the left) is also performed if the titlebar 
  1261.  text is all Arabic or Hebrew (i.e, does not contain any English character). 
  1262.  
  1263.  
  1264. ΓòÉΓòÉΓòÉ 6.17. Value Set ΓòÉΓòÉΓòÉ
  1265.  
  1266. The Value Set control processes it text according to its window bidi 
  1267. attributes. 
  1268.  
  1269. The VS_RIGHTTOLEFT style is used to make the Value Set control have RtL window 
  1270. orientation. 
  1271.  
  1272. Each item in the Value Set can have its own bidirectional attributes. Managing 
  1273. the item bidi attributes is performed by the following window messages: 
  1274.  
  1275.      VM_SETITEMBIDIATTR - Sets a ValueSet Item's bidi attributes. 
  1276.  
  1277.      VM_QUERYITEMBIDIATTR - Queries a ValueSet Item's bidi attributes. 
  1278.  
  1279.  If no item bidi attribute is set using the VM_SETITEMBIDIATTR message the item 
  1280.  uses the window bidi attributes. 
  1281.  
  1282.  Parameters of VM_SETITEMBIDIATTR: 
  1283.  
  1284.  mp1 - MPFROM2SHORT(usLine, usColumn) 
  1285.  
  1286.  mp2 - pointer to the following structure. 
  1287.  
  1288.      typedef struct _BD_ATTR_MASK
  1289.            {
  1290.            ULONG  ulBD_Attr;
  1291.            ULONG  ulBD_Mask;
  1292.            } BD_ATTR_MASK
  1293.  
  1294.  Parameters of VM_QUERYITEMBIDIATTR: 
  1295.  
  1296.  mp1 - MPFROM2SHORT(usLine, usColumn) 
  1297.  
  1298.  mp2 - PULONG pBidiAttr - points to a ULONG where bidi attributes are returned. 
  1299.  
  1300.  
  1301. ΓòÉΓòÉΓòÉ 7. Bidirectional Support in Standard Dialogs ΓòÉΓòÉΓòÉ
  1302.  
  1303. All standard dialogs (File dialog, Font dialog and the Messagebox) support a 
  1304. Right-To-Left/NLS mode. In this mode, their standard text is in the national 
  1305. language  and the general orientation of the dialog is right-to-left. Standard 
  1306. dialogs can be made to work in this mode as a result of an application 
  1307. interface (specific for each standard dialog) or when the the environment 
  1308. variable STDDLGLANG is set to 'NATIONAL'. The following is a description of the 
  1309. Right-To-Left/NLS mode of each of the standard dialogs: 
  1310.  
  1311.  
  1312. ΓòÉΓòÉΓòÉ 7.1. File Dialog ΓòÉΓòÉΓòÉ
  1313.  
  1314. Application interface: The FDS_NATIONAL_LANGUAGE 'style' bit. 
  1315.  
  1316. When the standard file dialog is RtL/NLS: 
  1317.  
  1318.      Orientation is right-to-left. 
  1319.  
  1320.      Field names and buttons are in the National Language. 
  1321.  
  1322.      Data in controls that pertain to filenames and directory names is 
  1323.       implicit. 
  1324.  
  1325.  
  1326. ΓòÉΓòÉΓòÉ 7.2. Font Dialog ΓòÉΓòÉΓòÉ
  1327.  
  1328. Application interface: The FNTS_NATIONAL_LANGUAGE 'style' bit. 
  1329.  
  1330. When the standard font dialog is RtL/NLS: 
  1331.  
  1332.      Orientation is right-to-left. 
  1333.  
  1334.      Field names and buttons are in the National Language. 
  1335.  
  1336.      Data in controls that pertain to font names is VISUAL for Hebrew and 
  1337.       Implicit for Arabic. 
  1338.  
  1339.  
  1340. ΓòÉΓòÉΓòÉ 7.3. Message Box ΓòÉΓòÉΓòÉ
  1341.  
  1342. Application interface: Owner Window orientation is right-to-left. 
  1343.  
  1344. When the message box is RtL/NLS: 
  1345.  
  1346.      Text is right-justified in the titlebar and inside the messagebox. 
  1347.  
  1348.      Icons (if specified) are on the right side of the messagebox. 
  1349.  
  1350.      Push buttons are ordered from right-to-left. 
  1351.  
  1352.      Push buttons have their text in the national language. 
  1353.  
  1354.  
  1355. ΓòÉΓòÉΓòÉ 8. Bidirectional Text Exchange among Applications ΓòÉΓòÉΓòÉ
  1356.  
  1357. The following sections describe bidirectional text exchange among applications. 
  1358.  
  1359.  
  1360. ΓòÉΓòÉΓòÉ 8.1. Clipboard ΓòÉΓòÉΓòÉ
  1361.  
  1362. The clipboard is a mechanism provided by PM to allow the user to transfer data 
  1363. between different applications. To do so, the user selects some data in a 
  1364. window, "copies" (or "cuts") it to the clipboard and then "pastes" the data in 
  1365. the target application. 
  1366.  
  1367. When dealing with bidirectional data, it may be required to transfer text data, 
  1368. that has different bidirectional attributes (i.e, different format of text) 
  1369. between applications. Accordingly, a conversion of the text must be performed, 
  1370. in order to transform the text to a format (identified by bidirectional 
  1371. attributes) which is compatible with the target application (the one that 
  1372. "pastes" the data). 
  1373.  
  1374. The PM bidirectional support provides automatic conversion of text between 
  1375. source and target applications, based on their process bidirectional 
  1376. attributes. In addition, bidi-aware applications can explicitly set the 
  1377. bidirectional attributes managed by the clipboard in order to affect the 
  1378. conversion that is performed on the text. 
  1379.  
  1380. In order to allow the automatic conversion of the clipboard, the following 
  1381. conditions must be met: 
  1382.  
  1383.      Both the source and the target applications have valid process 
  1384.       bidirectional attributes (i.e, their bidi attributes are not 0). 
  1385.  
  1386.      Exchange of CF_TEXT and CF_DSPTEXT format is performed. 
  1387.  
  1388.      The source and target bidi attributes are different. 
  1389.  
  1390.      None of the applications (i.e, neither the source application nor the 
  1391.       target one) have issued any APIs to cancel the conversion provided by the 
  1392.       clipboard. 
  1393.  
  1394.  The clipboard maintains two sets of bidirectional attributes. 
  1395.  
  1396.  The first set is called the 'Clipboard Bidirectional Attributes' and is 
  1397.  associated with the text data that is currently stored in the clipboard. The 
  1398.  default value for this set is inherited from the process bidirectional 
  1399.  attributes of the application that issues WinSetClipbrdData. The source 
  1400.  application can optionally modify this set of attributes by using the 
  1401.  WinSetLangInfo API with the LI_BD_CLIP_ATTR effect. 
  1402.  
  1403.  The second set is called the 'Conversion Bidirectional Attributes'. This set 
  1404.  is associated with the target application, and its default value is inherited 
  1405.  from the process bidirectional attributes of the application that issues the 
  1406.  WinQueryClipbrdData API. The target application can optionally modify these 
  1407.  attributes by using the WinSetLangInfo API with LI_BD_CLIP_CONV_ATTR effect. 
  1408.  
  1409.  When using the WinSetLangInfo API to change the clipboard data, bidi-aware 
  1410.  applications must follow the following rules: 
  1411.  
  1412.      Setting of both the 'Clipboard bidi attributes' and the 'conversion bidi 
  1413.       attributes' must be performed only when an application has access to the 
  1414.       clipboard - i.e, after issuing WinOpenClipbrd and before issuing the 
  1415.       WinCloseClipbrd APIs. 
  1416.  
  1417.      Setting LI_BD_CLIP_ATTR must be done AFTER data has been put into the 
  1418.       clipboard (that is, after issuing WinSetClipbrdData). 
  1419.  
  1420.  The following is a typical scenario. Lines marked with '(BD)' are optional, 
  1421.  and can be issued by bidi-aware applications. 
  1422.  
  1423.     Setting Clipboard Bidirectional Data.
  1424.     -------------------------------------
  1425.  
  1426.     WinOpenClipbrd()
  1427.     WinEmptyClipbrd()
  1428.     WinSetClipbrdData(CF_TEXT)     (clipboard bidi attributes are set -
  1429.                                     inheited from process bidi attributes).
  1430.  
  1431.     (BD) WinSetLangInfo(LI_BD_CLIP_ATTR..) (clipboard bidi attribute are set)
  1432.  
  1433.     WinCloseClipbrd()
  1434.  
  1435.  
  1436.     Querying Clipboard Bidirectional Data
  1437.     --------------------------------------
  1438.  
  1439.      WinOpenClipbrd()
  1440.  
  1441.      (BD) WinQueryLangInfo(LI_BD_CLIP_ATTR...)
  1442.                                     (Queries the current clipboard
  1443.                                      bidi attributes).
  1444.      (BD) WinSetLangInfo(LI_BD_CLIP_CONV_ATTR...)
  1445.                                     (sets the clipboard conversion
  1446.                                      bidi attributes).
  1447.       WinQueryClipbrdData(CF_TEXT)   (clipboard performs conversion on
  1448.                                       the text, using the clipboard
  1449.                                       and the conversion bidi attributes.
  1450.       WinCloseClipbrd()
  1451.  
  1452.  
  1453. ΓòÉΓòÉΓòÉ 8.2. Dynamic Data Exchange (DDE) ΓòÉΓòÉΓòÉ
  1454.  
  1455. Dynamic data exchange is performed between windows. Thus, conversion of 
  1456. bidirectional text, if required, is based on the bidirectional attributes of 
  1457. the windows which are involved in the data exchange. 
  1458.  
  1459.      The conversion is performed at WinDdePostMsg() time, using the hwndTo and 
  1460.       hwndFrom bidi attributes (which are parameters of the WinDdePostMsg API). 
  1461.  
  1462.      Bidi-aware applications can force no conversion by setting the bidi 
  1463.       attributes of any window that is involved in the data exchange to 0. 
  1464.  
  1465.      Conversion is done only for WM_DDE_DATA messages and only when the format 
  1466.       of data being exchanged is DDEFMT_TEXT. 
  1467.  
  1468.  Notes: 
  1469.  
  1470.      It is recommended that application names and item names (that are used by 
  1471.       an application in the process of "making the DDE contact" with other 
  1472.       applications) are in English. This is because conversions occur only at 
  1473.       WM_DDE_DATA and not in WM_DDE_INITIATE time, and also because at 
  1474.       WM_DDE_INITIATE time, there is no window handle from which the system can 
  1475.       deduce the bidi attribute of the application name and item text. 
  1476.  
  1477.      It is recommended that bidi-aware applications use "invisible" windows 
  1478.       (or object windows) as the DDE source and target windows. This gives them 
  1479.       the freedom to set their windows bidi attributes to any value without 
  1480.       having to worry about the visual effect this may have on the display. 
  1481.  
  1482.  
  1483. ΓòÉΓòÉΓòÉ 8.3. Direct Manipulation ΓòÉΓòÉΓòÉ
  1484.  
  1485. There is no specific bidirectional support implemented in the system support 
  1486. for Direct Manipulation. 
  1487.  
  1488. Bidi-Aware applications that add their own type of 'direct manipulation 
  1489. mechanism' (such as a spreadsheet program externalizing its drag & drop 
  1490. mechanism, so that another application can interface with it), must publish, as 
  1491. part of their interface specification, the bidi attributes, so that other 
  1492. applications, which may use different types of text, can do the necessary bidi 
  1493. text conversion, if required. 
  1494.  
  1495.  
  1496. ΓòÉΓòÉΓòÉ 9. Information Presentation Facility ΓòÉΓòÉΓòÉ
  1497.  
  1498. The Bidirectional support in the PM Information Presentation Facility has the 
  1499. following components: 
  1500.  
  1501.      A modified version of the Help Compiler named IPFCBIDI.  This component 
  1502.       provides all the functions of the regular IPFC program, with the addition 
  1503.       of some Bidirectional features. 
  1504.  
  1505.      Runtime support for Bidirectional help documents. 
  1506.  
  1507.  
  1508. ΓòÉΓòÉΓòÉ 9.1. Bidirectional Features of the IPFCBIDI Compiler ΓòÉΓòÉΓòÉ
  1509.  
  1510. The following sections describe the bidirectional features of the IPFCBIDI 
  1511. compiler. 
  1512.  
  1513.  
  1514. ΓòÉΓòÉΓòÉ 9.1.1. Compiler Invocation ΓòÉΓòÉΓòÉ
  1515.  
  1516. IPFCBIDI accepts new values for the "/LANGUAGE" parameter: 
  1517.  
  1518.  ARA       for Arabic 
  1519.  
  1520.  HEB       for Hebrew 
  1521.  
  1522.  Examples using the new values: 
  1523.  
  1524.   IPFCBIDI myfile.txt /INF /COUNTRY=785 /CODEPAGE=864 /LANGUAGE=ARA
  1525.   IPFCBIDI myfile.txt /INF /COUNTRY=972 /CODEPAGE=862 /LANGUAGE=HEB
  1526.  
  1527.  Note that the Bidirectional functionality of the compiler and of the Help 
  1528.  Viewer is only enabled when the language is explicitly specified as Arabic or 
  1529.  Hebrew. 
  1530.  
  1531.  
  1532. ΓòÉΓòÉΓòÉ 9.1.2. Grammar Files ΓòÉΓòÉΓòÉ
  1533.  
  1534. When the new values of "/Language" are used, the corresponding names for the 
  1535. grammar files are: 
  1536.  
  1537.      IPFARA.NLS 
  1538.  
  1539.      IPFHEB.NLS. 
  1540.  
  1541.  When the language is Arabic or Hebrew, it is expected that at least one 
  1542.  statement in the corresponding grammar file will be affected: the "WORD" 
  1543.  statement should define both Latin characters and National (Arabic or Hebrew) 
  1544.  letters. 
  1545.  
  1546.  
  1547. ΓòÉΓòÉΓòÉ 9.1.3. Bidirectional Source File Format ΓòÉΓòÉΓòÉ
  1548.  
  1549. When the language is Arabic or Hebrew, the .IPF source file must have one of 
  1550. the following formats: 
  1551.  
  1552.  Implicit 
  1553.       Latin and National (Arabic or Hebrew) characters are arranged in typing 
  1554.       order in successive positions of the source file. 
  1555.  
  1556.       Arabic characters should be stored in their base shapes. 
  1557.  
  1558.  Visual - left to right 
  1559.       Characters are stored in an order ready for display or printing 
  1560.  
  1561.  Visual - right to left 
  1562.       The order of the characters is the mirror image of the previous format. 
  1563.  
  1564.  It is possible to specify the format of the source file by adding a special 
  1565.  attribute to the "USERDOC" tag, as in the following examples: 
  1566.  
  1567.      :userdoc text=IMPLICIT.
  1568.      :userdoc text=VISUAL_LTR.
  1569.      :userdoc text=VISUAL_RTL.
  1570.  
  1571.  If the text attribute is not specified with the "USERDOC" tag, the default is: 
  1572.  
  1573.      :userdoc text=IMPLICIT.
  1574.  
  1575.  
  1576.  Another attribute that can be added to the "USERDOC" tag is SWAP. This 
  1577.  attribute defines the way symmetric characters (such as '(' and ')', or '<' 
  1578.  and '>') are stored in the .IPF file within right-to-left text. 
  1579.  
  1580.  The valid values for the SWAP attribute are: 
  1581.  
  1582.  ON 
  1583.       This indicates that the .IPF source file has been created with symmetric 
  1584.       swapping. For example, the 'Open parentheses' character within a 
  1585.       right-to-left text is stored as '('. This is the default value for this 
  1586.       attribute. 
  1587.  
  1588.  OFF 
  1589.       This indicates that the .IPF source file has been created without 
  1590.       symmetric swapping. For example, the 'Open parentheses' character within 
  1591.       a right-to-left text is stored as ')'. 
  1592.  
  1593.  Example: 
  1594.  
  1595.      :userdoc text=IMPLICIT swap=OFF.
  1596.  
  1597.  
  1598. ΓòÉΓòÉΓòÉ 9.1.4. Justification ΓòÉΓòÉΓòÉ
  1599.  
  1600. When language is Arabic or Hebrew, the default justification is changed to 
  1601. right justification for the following: 
  1602.  
  1603.    1. line alignment ("align" attribute of the "LINES" tag) 
  1604.  
  1605.    2. figure alignment ("align" attribute of the "FIG" tag) 
  1606.  
  1607.    3. bitmap alignment ("align" attribute of the "ARTWORK" tag) 
  1608.  
  1609.    4. window positioning ("x" attribute of the "H" tag) of a window relatively 
  1610.       to its parent window. 
  1611.  Examples: 
  1612.  
  1613.  The tag below causes a window to be right-justified: 
  1614.  
  1615.      :h1 id=sample1. This is a right-justified Window.
  1616.  
  1617.  The tag below causes a window to be left-justified: 
  1618.  
  1619.      :h1 id=sample21 x=left. This is a left-justified Window.
  1620.  
  1621.  The tag below causes the next lines to be left aligned: 
  1622.  
  1623.      :lines align=left.
  1624.  
  1625.  The tag below causes the next lines to be right aligned: 
  1626.  
  1627.       :lines.
  1628.  
  1629.  
  1630.  
  1631. ΓòÉΓòÉΓòÉ 9.2. Runtime Support for Bidirectional Help Documents ΓòÉΓòÉΓòÉ
  1632.  
  1633. The runtime support for Bidirectional help documents (both .inf and .hlp files) 
  1634. is active only for documents that were compiled with IPFCBIDI using /L=ARA or 
  1635. /L=HEB. Such documents will be referred to as "Bidi documents." 
  1636.  
  1637. Documents compiled with the non-bidi ipfc compiler and documents compiled with 
  1638. IPFCBIDI and any non-bidi language will not be affected by the Bidi runtime 
  1639. support. 
  1640.  
  1641.  
  1642. ΓòÉΓòÉΓòÉ 9.2.1. User Interface ΓòÉΓòÉΓòÉ
  1643.  
  1644. When a Bidi document is loaded, the user interface of the help manager, 
  1645. including menus, dialogs, buttons and help will be in the national language. 
  1646.  
  1647.  
  1648. ΓòÉΓòÉΓòÉ 9.2.2. Display ΓòÉΓòÉΓòÉ
  1649.  
  1650. The reading direction for Bidi documents is from right to left. Help manager 
  1651. structures in general will be displayed as a mirror image of their non-Bidi 
  1652. counterparts. This means they will be right justified instead of left 
  1653. justified. 
  1654.  
  1655. Some examples of such help manager structures include: 
  1656.  
  1657.      Headers 
  1658.      Table of contents 
  1659.      Figures 
  1660.      Footnotes 
  1661.      Index 
  1662.      Paragraphs 
  1663.      Lines 
  1664.      Lists of all kinds 
  1665.      Examples 
  1666.      Tables 
  1667.  
  1668.       Columns within a table go logically from right to left. 
  1669.  
  1670.  
  1671. ΓòÉΓòÉΓòÉ 9.2.3. Concatenation of INF Files ΓòÉΓòÉΓòÉ
  1672.  
  1673. When multiple inf files are viewed together, the helpmanager will behave as if 
  1674. the entire document is Bidi if any one of the inf files was compiled as a Bidi 
  1675. document. 
  1676.  
  1677.  
  1678. ΓòÉΓòÉΓòÉ 10. The Language Viewer ΓòÉΓòÉΓòÉ
  1679.  
  1680. The following sections describe the language viewer. 
  1681.  
  1682.  
  1683. ΓòÉΓòÉΓòÉ 10.1. About the Language Viewer ΓòÉΓòÉΓòÉ
  1684.  
  1685. The Language Viewer is a tool which is provided to help the user identify the 
  1686. current state of the language support, by providing visual indications that 
  1687. represent the current bidirectional state of the window that has the focus. 
  1688.  
  1689. The default Viewer is implemented as a PM/WorkplaceShell application that shows 
  1690. a number of icons that represents the current bidirectional attributes as well 
  1691. as the active keyboard layer of the window that has the PM focus. 
  1692.  
  1693. The Viewer is optional. The PM bidirectional support works even if the viewer 
  1694. application is not active. In addition, the viewer can be replaced by a 
  1695. user-written application. Such an application can modify the visual effect that 
  1696. is provided to the user, allowing for more flexibility of the user-interface. 
  1697.  
  1698.  
  1699. ΓòÉΓòÉΓòÉ 10.2. Setting a New Language Viewer ΓòÉΓòÉΓòÉ
  1700.  
  1701. An application that wishes to act as a Language Viewer uses the 
  1702. WinSetLangViewer API. This allows the application to define a window handle 
  1703. that is known to PM to be the new Language Viewer window. PM supports only one 
  1704. Language Viewer. That is, when WinSetLangViewer is issued, the window handle 
  1705. that is referenced becomes the new viewer, and the old viewer does not function 
  1706. as a viewer anymore. 
  1707.  
  1708. When a window acts as a Language Viewer it receives WM_LANGVIEWINFOCHANGED 
  1709. messages from the system. These messages define the current changes in 
  1710. bidirectional state that are made to the window that has the focus. Also, PM 
  1711. posts a WM_LANGVIEWINFOCHANGED message to the Language Viewer window to notify 
  1712. it that it should update its display, since a new window (probably with a 
  1713. different set of bidi attributes and keyboard layer) becomes the focus window. 
  1714.  
  1715.  
  1716. ΓòÉΓòÉΓòÉ 10.3. Invoking the Options Dialog ΓòÉΓòÉΓòÉ
  1717.  
  1718. The default Viewer invokes the option dialog in response to the 
  1719. WM_LANGOPTIONSDIALOG message. This is sent to the viewer by the system in 
  1720. response to the "Invoke language viewer" hotkey, but may also be sent to the 
  1721. viewer by any application. 
  1722.  
  1723.  
  1724. ΓòÉΓòÉΓòÉ 11. Environment Variables Used for Language Support ΓòÉΓòÉΓòÉ
  1725.  
  1726. The OS/2 Language support for bidirectional languages uses environment 
  1727. variables as a means of configuring specific applications. Setting environment 
  1728. variables is similar to setting the language settings in the Program and 
  1729. ProgramFile Workplace Shell objects. 
  1730.  
  1731. The following environment variables are supported: 
  1732.  
  1733.      BIDIATTR - Defines the Bidirectional Attributes for the session. 
  1734.  
  1735.       Possible values for this keyword: 
  1736.  
  1737.         -  INIT - Initializes a Bidi Attribute. 
  1738.         -  TEXTTYPE_VISUAL - Visual type of text. 
  1739.         -  TEXTTYPE_IMPLICIT - Implicit type of text. 
  1740.         -  WND_ORIENT_LTR - Left-to-right window orientation 
  1741.         -  WND_ORIENT_RTL - Right-to-left window orientation 
  1742.         -  TEXT_ORIENT_LTR - Left-to-right text orientation 
  1743.         -  TEXT_ORIENT_RTL - Right-to-left text orientation 
  1744.         -  TEXT_ORIENT_CONTEXT - Text orientation is determined dynamically 
  1745.            upon the context (based on the actual characters that construct the 
  1746.            text string). 
  1747.         -  SYM_SWAP_OFF - Symmetric swapping of directional characters is not 
  1748.            handled automatically. 
  1749.         -  SYM_SWAP_ON - Symmetric swapping of directional characters is 
  1750.            handled automatically. 
  1751.         -  NUMERALS_NOMINAL   - Display only nominal (i.e. Arabic) numerals 
  1752.         -  NUMERALS_NATIONAL  - Display only national (i.e. Hindi) numerals 
  1753.         -  NUMERALS_CONTEXT   - Display numerals according to surrounding text 
  1754.         -  NUMERALS_PASSTHRU  - Do not process numerals on display 
  1755.         -  TEXT_DISPLAY_SHAPED - Automatically shape text upon display 
  1756.  
  1757.             The following are valid shaping modes, but it is not recommended to 
  1758.            use them as system settings in CONFIG.SYS. 
  1759.         -  TEXT_SAVE_SHAPED   - Assume that text is already shaped, and 
  1760.            automatically shape new text as it is being entered by the user. 
  1761.         -  TEXT_SHAPE_INITIAL  - Assume that text is already shaped and new 
  1762.            text is entered in initial mode 
  1763.         -  TEXT_SHAPE_MIDDLE  - Assume that text is already shaped and new text 
  1764.            is entered in middle mode 
  1765.         -  TEXT_SHAPE_FINAL   - Assume that text is already shaped and new text 
  1766.            is entered in final mode 
  1767.         -  TEXT_SHAPE_ISOLATED - Assume that text is already shaped and new 
  1768.            text is entered in isolated mode 
  1769.         -  TEXT_SHAPE_NOMINAL  - Display and store text in its nominal (base) 
  1770.            shapes. 
  1771.  
  1772.       Example:  SET BIDIATTR=WND_ORIENT_RTL, TEXTTYPE_IMPLICIT 
  1773.  
  1774.      BIDISTAT - determines the configuration of the system support for 
  1775.       bidirectional languages. Allowed values are: 
  1776.  
  1777.         -  DISABLE_INPUT_PROCESSING - disables all processing done by the 
  1778.            system for input (all hotkeys are disabled). 
  1779.         -  HKFLAG_ENG_LAYER - disables the "English Language" hotkey. 
  1780.         -  HKFLAG_NAT_LAYER - disables the "National Language" hotkey. 
  1781.         -  HKFLAG_PUSH - disables the "Start Push" hotkey. 
  1782.         -  HKFLAG_END_PUSH - disables the "End Push" hotkey. 
  1783.         -  HKFLAG_AUTO_PUSH - disables the "AutoPush" toggle hotkey. 
  1784.         -  HKFLAG_FIELD_REV - disables the "Field Reverse" hotkey. 
  1785.         -  HKFLAG_SCREEN_REV - disables the "Window Reverse" hotkey. 
  1786.         -  HKFLAG_STATUS_INDICATOR - disables the "Language Viewer" hotkey. 
  1787.         -  HKFLAG_DISPLAY_SHAPED - disables the "Display Shaped/Automatic" 
  1788.            hotkey. 
  1789.         -  HKFLAG_INITIAL - disables the "Initial" hotkey 
  1790.         -  HKFLAG_MIDDLE - disables the "Middle" hotkey 
  1791.         -  HKFLAG_FINAL - disables the "Final" hotkey 
  1792.         -  HKFLAG_ISOLATED - disables the "Isolated" hotkey 
  1793.         -  HKFLAG_SAVE_SHAPED - disables the "Save shaped" hotkey 
  1794.         -  FAUTOPUSH_RTL_ON - Sets AutoPush for right-to-left fields ON. 
  1795.         -  FAUTOPUSH_LTR_ON - Sets AutoPush for left-to-right fields ON. 
  1796.  
  1797.       Example:  SET BIDISTAT=HKFLAG_STATUS_INDICATOR 
  1798.  
  1799.      STDDLGLANG - configures the language and appearance of standard dialog 
  1800.       (like "Save file" dialog) and message box buttons. Allowed values are: 
  1801.  
  1802.         -  ENGLISH - Language is English and orientation is left-to-right. 
  1803.         -  NATIONAL - Language is National (Hebrew/Arabic) and orientation is 
  1804.            right-to-left. 
  1805.  
  1806.       Example: SET STDDLGLANG=NATIONAL 
  1807.  
  1808.      BIDIUI (For Hebrew ONLY). - configures the default text entry user 
  1809.       interface for the session. 
  1810.  
  1811.       Allowed values are: 
  1812.  
  1813.         -  VISUAL - Default text entry interface is Visual. 
  1814.         -  IMPLICIT - Default text entry interface is Implicit. 
  1815.         -  CONTEXT - Default text entry interface is defined by Context (i.e, 
  1816.            defined by the type of text of the etnry field - Entry fields with 
  1817.            Visual text type will have Visual user interface by default and 
  1818.            entry fields with Implicit text type will have Implicit user 
  1819.            interface by default). 
  1820.  
  1821.       Example: SET BIDIUI=VISUAL 
  1822.  
  1823.  
  1824. ΓòÉΓòÉΓòÉ 12. Building Bidirectional Programs ΓòÉΓòÉΓòÉ
  1825.  
  1826. The following sections tell you how to build bidirectional programs. 
  1827.  
  1828.  
  1829. ΓòÉΓòÉΓòÉ 12.1. Include Files ΓòÉΓòÉΓòÉ
  1830.  
  1831. To be able to use the bidirectional support two include files should be added 
  1832. to your INCLUDE path. They are: 
  1833.  
  1834.      layout.h - This file defines the basic structures as well as the bidi 
  1835.       text conversion APIs. 
  1836.  
  1837.      pmbidi.h - This file is PM-related, and it contains all the definitions 
  1838.       and API prototypes for writing a PM bidirectional program. 
  1839.  
  1840.  
  1841. ΓòÉΓòÉΓòÉ 12.2. How to Use and Link to the Bidirectional Functions ΓòÉΓòÉΓòÉ
  1842.  
  1843. All the bidirectional functions are contained in the executable file 
  1844. PMBIDI.DLL. In order to dynamically link your application with PMBIDI.DLL, you 
  1845. have to use the import library PMBIDI.LIB, which is included in this toolkit. 
  1846.  
  1847.  
  1848. ΓòÉΓòÉΓòÉ 12.3. Sample Applications ΓòÉΓòÉΓòÉ
  1849.  
  1850. Several sample applications are provided with source to demonstrate the use of 
  1851. the bidirectional functions. 
  1852.  
  1853.  
  1854. ΓòÉΓòÉΓòÉ 12.3.1. Style ΓòÉΓòÉΓòÉ
  1855.  
  1856. This sample program demonstrates the use of the Bidi APIs from a Bidi-Aware 
  1857. application. 
  1858.  
  1859. It demonstrates the main techniques that are used by a bidi-aware PM 
  1860. application and integrates the information that is included in this guide. 
  1861.  
  1862. To start the sample program do the following: 
  1863.  
  1864.      Read the README file for a description of the bidi "tasks" that are 
  1865.       handled by this sample. 
  1866.  
  1867.      Run RUNSAMP.CMD or RUNSAMP1.CMD to activate the sample program. 
  1868.  
  1869.  
  1870. ΓòÉΓòÉΓòÉ 12.3.2. Telephone Directory ΓòÉΓòÉΓòÉ
  1871.  
  1872. This is a simple telephone directory application that demonstrates how to use 
  1873. the bidirectional functions to create applications with a bilingual 
  1874. (National/English) user interface. 
  1875.  
  1876. To activate the sample run 'TELDIR'. 
  1877.  
  1878.  
  1879. ΓòÉΓòÉΓòÉ 13. Data Types ΓòÉΓòÉΓòÉ
  1880.  
  1881. This section describes the data types that are used in the Bidi functions. 
  1882. These are in the C language.  For a description of a particular data type, 
  1883. select the + on the Contents to view a list of data types, then select the data 
  1884. type from that list. 
  1885.  
  1886. Implicit Pointer Data Types 
  1887.  
  1888.  Data type names beginning with "P" (for example, PERRORCODE) is likely to be a 
  1889. pointer to another data type (in this instance, ERRORCODE). 
  1890.  
  1891. In the data type summary, (provided by selecting the + in front of Data Types 
  1892. on the Contents), no explicit "typedefs" are shown for pointers. Therefore, if 
  1893. no data type definition can be found in the summary for a data type name 
  1894. "Pxxxxxx", it becomes a pointer to the data type "xxxxxx", for which a 
  1895. definition should be found in the summary. 
  1896.  
  1897. The implicit type definition needed for such a pointer "Pxxxxxx" is: 
  1898.  
  1899. typedef xxxxxx *Pxxxxxx;
  1900.  
  1901. Such definitions are provided by means of the system header file OS2.H. 
  1902.  
  1903. Storage Mapping of Data Types 
  1904.  
  1905. The storage mapping of the data types is dependent on the machine architecture. 
  1906. To be portable, applications must access the data types using the definitions 
  1907. supplied for that environment. 
  1908.  
  1909.  
  1910. ΓòÉΓòÉΓòÉ 13.1. BD_ATTR_MASK ΓòÉΓòÉΓòÉ
  1911.  
  1912. BD_ATTR_MASK Bidi attribute mask structure. 
  1913.  
  1914. typedef struct  _BD_ATTR_MASK {
  1915. ULONG    ulBd_Attr;       /* Bidi attributes */
  1916. ULONG    ulBd_Mask;       /* Bidi attribute mask */
  1917.  } BD_ATTR_MASK;
  1918.  
  1919.  
  1920. ΓòÉΓòÉΓòÉ <hidden> ulBD_Attr ΓòÉΓòÉΓòÉ
  1921.  
  1922.  ulBD_Attr (ULONG) 
  1923.     Bidi attributes. 
  1924.  
  1925.     Contains the BIDIATTR values. 
  1926.  
  1927.  
  1928. ΓòÉΓòÉΓòÉ <hidden> ulBD_Mask ΓòÉΓòÉΓòÉ
  1929.  
  1930.  ulBD_Mask (ULONG) 
  1931.     Bidi attribute mask. 
  1932.  
  1933.     Contains the BIDIATTRM values. 
  1934.  
  1935.  
  1936. ΓòÉΓòÉΓòÉ <hidden> BDA_TEXT_ORIENT_CONTEXT ΓòÉΓòÉΓòÉ
  1937.  
  1938.  #define BDA_TEXT_ORIENT_CONTEXT     0x00020000UL
  1939.  
  1940.  
  1941. ΓòÉΓòÉΓòÉ <hidden> BDA_LEVEL ΓòÉΓòÉΓòÉ
  1942.  
  1943.  #define BDA_LEVEL                   0x30000000UL
  1944.  
  1945.  
  1946. ΓòÉΓòÉΓòÉ <hidden> BDA_INIT ΓòÉΓòÉΓòÉ
  1947.  
  1948.  #define BDA_INIT                    0x80000000UL
  1949.  
  1950.  
  1951. ΓòÉΓòÉΓòÉ <hidden> BDA_DATATYPE_VISUAL ΓòÉΓòÉΓòÉ
  1952.  
  1953.  #define BDA_DATATYPE_VISUAL        0x00000000UL
  1954.  
  1955.  
  1956. ΓòÉΓòÉΓòÉ <hidden> BDA_DATATYPE_IMPLICIT ΓòÉΓòÉΓòÉ
  1957.  
  1958.  #define BDA_DATATYPE_IMPLICIT      0x01000000UL
  1959.  
  1960.  
  1961. ΓòÉΓòÉΓòÉ <hidden> BDA_TEXT_ORIENT_LTR ΓòÉΓòÉΓòÉ
  1962.  
  1963.  #define BDA_TEXT_ORIENT_LTR        0x00000000UL
  1964.  
  1965.  
  1966. ΓòÉΓòÉΓòÉ <hidden> BDA_TEXT_ORIENT_RTL ΓòÉΓòÉΓòÉ
  1967.  
  1968.  #define BDA_TEXT_ORIENT_RTL        0x00010000UL
  1969.  
  1970.  
  1971. ΓòÉΓòÉΓòÉ <hidden> BDA_TEXT_ORIENT_CONTEXT ΓòÉΓòÉΓòÉ
  1972.  
  1973.  #define BDA_TEXT_ORIENT_CONTEXT    0x00020000UL
  1974.  
  1975.  
  1976. ΓòÉΓòÉΓòÉ <hidden> BDA_WND_ORIENT_LTR ΓòÉΓòÉΓòÉ
  1977.  
  1978.  #define BDA_WND_ORIENT_LTR         0x00000000UL
  1979.  
  1980.  
  1981. ΓòÉΓòÉΓòÉ <hidden> BDA_WND_ORIENT_RTL ΓòÉΓòÉΓòÉ
  1982.  
  1983.  #define BDA_WND_ORIENT_RTL         0x00100000UL
  1984.  
  1985.  
  1986. ΓòÉΓòÉΓòÉ <hidden> BDA_NUMERALS_ARABIC ΓòÉΓòÉΓòÉ
  1987.  
  1988.  #define BDA_NUMERALS_ARABIC        0x00000000UL
  1989.  
  1990.  
  1991. ΓòÉΓòÉΓòÉ <hidden> BDA_NUMERALS_PASSTHRU ΓòÉΓòÉΓòÉ
  1992.  
  1993.  #define BDA_NUMERALS_PASSTHRU      0x00001000UL
  1994.  
  1995.  
  1996. ΓòÉΓòÉΓòÉ <hidden> BDA_NUMERALS_HINDI ΓòÉΓòÉΓòÉ
  1997.  
  1998.  #define BDA_NUMERALS_HINDI         0x00002000UL
  1999.  
  2000.  
  2001. ΓòÉΓòÉΓòÉ <hidden> BDA_NUMERALS_CONTEXT ΓòÉΓòÉΓòÉ
  2002.  
  2003.  #define BDA_NUMERALS_CONTEXT       0x00003000UL
  2004.  
  2005.  
  2006. ΓòÉΓòÉΓòÉ <hidden> BDA_WORDBREAK_OFF ΓòÉΓòÉΓòÉ
  2007.  
  2008.  #define BDA_WORDBREAK_OFF          0x00000000UL
  2009.  
  2010.  
  2011. ΓòÉΓòÉΓòÉ <hidden> BDA_WORDBREAK_ON ΓòÉΓòÉΓòÉ
  2012.  
  2013.  #define BDA_WORDBREAK_ON           0x00000200UL
  2014.  
  2015.  
  2016. ΓòÉΓòÉΓòÉ <hidden> BDA_SYM_SWAP_OFF ΓòÉΓòÉΓòÉ
  2017.  
  2018.  #define BDA_SYM_SWAP_OFF           0x00000000UL
  2019.  
  2020.  
  2021. ΓòÉΓòÉΓòÉ <hidden> BDA_SYM_SWAP_ON ΓòÉΓòÉΓòÉ
  2022.  
  2023.  #define BDA_SYM_SWAP_ON            0x00000100UL
  2024.  
  2025.  
  2026. ΓòÉΓòÉΓòÉ <hidden> BDA_CSD_ON ΓòÉΓòÉΓòÉ
  2027.  
  2028.  #define BDA_CSD_ON                 0x00000000UL
  2029.  
  2030.  
  2031. ΓòÉΓòÉΓòÉ <hidden> BDA_CSD_PASSTHRU ΓòÉΓòÉΓòÉ
  2032.  
  2033.  #define BDA_CSD_PASSTHRU           0x00000001UL
  2034.  
  2035.  
  2036. ΓòÉΓòÉΓòÉ <hidden> BDA_CSD_BASE ΓòÉΓòÉΓòÉ
  2037.  
  2038.  #define BDA_CSD_BASE               0x00000010UL
  2039.  
  2040.  
  2041. ΓòÉΓòÉΓòÉ <hidden> BDA_CSD_INITIAL ΓòÉΓòÉΓòÉ
  2042.  
  2043.  #define BDA_CSD_INITIAL            0x00000011UL
  2044.  
  2045.  
  2046. ΓòÉΓòÉΓòÉ <hidden> BDA_CSD_MIDDLE ΓòÉΓòÉΓòÉ
  2047.  
  2048.  #define BDA_CSD_MIDDLE             0x00000012UL
  2049.  
  2050.  
  2051. ΓòÉΓòÉΓòÉ <hidden> BDA_CSD_FINAL ΓòÉΓòÉΓòÉ
  2052.  
  2053.  #define BDA_CSD_FINAL              0x00000013UL
  2054.  
  2055.  
  2056. ΓòÉΓòÉΓòÉ <hidden> BDA_CSD_ISOLATED ΓòÉΓòÉΓòÉ
  2057.  
  2058.  #define BDA_CSD_ISOLATED           0x00000014UL
  2059.  
  2060.  
  2061. ΓòÉΓòÉΓòÉ 13.2. BIDIATTR ΓòÉΓòÉΓòÉ
  2062.  
  2063. The BIDIATTR is a 32-bit word that determines all the aspects of Bidi 
  2064. attributes related processing and window display associated with a specific 
  2065. application. The user controls the behavior of different applications (having 
  2066. different types of Bidi text) by manipulating these. 
  2067.  
  2068. The following is the Bidi attributes structure: 
  2069.  
  2070. --------------------------------------------------------------------------
  2071. BYTE     BIT         EXPLANATION                  VALUE
  2072. --------------------------------------------------------------------------
  2073. BYTE 3  Bit 7      Initialized            BDA_INIT (PM ONLY)
  2074.  
  2075.         Bit 4-6    level                  BDA_LEVEL
  2076.         Bit 0-3    Type of support        BDA_DATATYPE_VISUAL
  2077.                                           BDA_DATATYPE_IMPLICIT
  2078.  
  2079.  
  2080.  
  2081. BYTE 2  Bit 0-1    Orientation(text)      BDA_TEXT_ORIENT_LTR
  2082.                                           BDA_TEXT_ORIENT_RTL
  2083.                                           BDA_TEXT_ORIENT_CONTEXT (PM ONLY)
  2084.         Bit 2-3    Reserved               (must be zero)
  2085.         Bit 4      Window Orientation     BDA_WND_ORIENT_LTR
  2086.                                           BDA_WND_ORIENT_RTL
  2087.  
  2088.         Bit 5-7    Reserved               (must be zero)
  2089.  
  2090. BYTE 1  Bit 4-7    Numeral Shapes         BDA_NUMERALS_ARABIC
  2091.                                           BDA_NUMERALS_PASSTHRU
  2092.                                           BDA_NUMERALS_HINDI
  2093.                                           BDA_NUMERALS_CONTEXT (PM ONLY)
  2094.         Bit 2-3    Reserved               (must be zero)
  2095.         Bit 1      Word Break mode        BDA_WORDBREAK_OFF (PM ONLY)
  2096.                                           BDA_WORDBREAK_ON (PM ONLY)
  2097.         Bit 0      Symmetric Swapping     BDA_SYM_SWAP_OFF (PM ONLY)
  2098.                                           BDA_SYM_SWAP_ON (PM ONLY)
  2099.  
  2100. BYTE 0  Character Shape Determination     BDA_CSD_ON
  2101.                                           BDA_CSD_PASSTHRU
  2102.                                           BDA_CSD_BASE
  2103.                                           BDA_CSD_INITIAL
  2104.                                           BDA_CSD_MIDDLE
  2105.                                           BDA_CSD_FINAL
  2106.                                           BDA_CSD_ISOLATED
  2107.  
  2108.  
  2109. ΓòÉΓòÉΓòÉ 13.3. BIDIATTRM ΓòÉΓòÉΓòÉ
  2110.  
  2111. The BIDIATTRM contains a value that determines which attribute(s) will be 
  2112. changed and which ones are masked. 
  2113.  
  2114. The following are possible Bidi attribute mask values: 
  2115.  
  2116. #define BDAM_INIT               0x80000000UL
  2117. #define BDAM_LEVEL              0x70000000UL
  2118. #define BDAM_WORD_BREAK         0x00000200UL
  2119. #define BDAM_DATATYPE           0x01000000UL
  2120. #define BDAM_TEXT_ORIENTATION   0x00030000UL
  2121. #define BDAM_WND_ORIENTATION    0x00100000UL
  2122. #define BDAM_NUMERALS           0x00003000UL
  2123. #define BDAM_SYM_SWAP           0x00000100UL
  2124. #define BDAM_CSD                0x000000FFUL
  2125.  
  2126. #define BDAM_ALL               (BDAM_DATATYPE         |
  2127.                                 BDAM_TEXT_ORIENTATION |
  2128.                                 BDAM_WND_ORIENTATION  |
  2129.                                 BDAM_NUMERALS         |
  2130.                                 BDAM_SYM_SWAP         |
  2131.                                 BDAM_CSD               )
  2132.  
  2133.  
  2134. ΓòÉΓòÉΓòÉ 13.4. BIDIPARAM ΓòÉΓòÉΓòÉ
  2135.  
  2136. The BIDIPARAM keyword can be used to initially set the Bidirectional attributes 
  2137. (see BIDIATTR) during window creation time. The usage of BIDIPARAM is analogous 
  2138. to that of the PRESPARAMS keyword. 
  2139.  
  2140. Values defined by BIDIPARAM will override any inherited attributes at window 
  2141. creation time. However, it is important to note that the BIDIPARAM cannot be 
  2142. used to dynamicaly set the Bidirectional attributes after creation. Dynamic 
  2143. setting of the Bidirectional should be done using the PM Bidirectional window 
  2144. functions. 
  2145.  
  2146. #define PP_BDATTR_FIRST            0x100L  /* First BidiAttr PresParam  */
  2147.                                            /*                           */
  2148. #define PP_BDATTR_ALL              0x101L  /* Set ALL Bidi attrs        */
  2149.                                            /*                           */
  2150. #define PP_BDATTR_TEXTTYPE         0x102L  /* Text/Data type            */
  2151. #define PP_BDATTR_TEXT_ORIENTATION 0x103L  /* Text Orientation          */
  2152. #define PP_BDATTR_WND_ORIENTATION  0x104L  /* Window Orientation        */
  2153. #define PP_BDATTR_NUMERALS         0x105L  /* Arabic/Hindi Numerals     */
  2154. #define PP_BDATTR_SYM_SWAP         0x106L  /* Symetric Swapping         */
  2155. #define PP_BDATTR_WORD_BREAK       0x107L  /* Word break                */
  2156. #define PP_BDATTR_TEXT_SHAPE       0x108L  /* Text Shape Determination  */
  2157.                                            /*                           */
  2158. #define PP_BDATTR_LAST             0x108L  /* Last BidiAttr PresParam   */
  2159.                                            /*                           */
  2160. #define PP_BDSTATUS                0x110L  /* Bidirectional status flags*/
  2161.  
  2162.  
  2163. ΓòÉΓòÉΓòÉ <hidden> BDS_FAUTOPUSH_RTL_ON ΓòÉΓòÉΓòÉ
  2164.  
  2165. #define BDS_FAUTOPUSH_RTL_ON            0x00000001UL
  2166.  
  2167.  
  2168. ΓòÉΓòÉΓòÉ <hidden> BDS_FAUTOPUSH_LTR_ON ΓòÉΓòÉΓòÉ
  2169.  
  2170. #define BDS_FAUTOPUSH_LTR_ON            0x00000002UL
  2171.  
  2172.  
  2173. ΓòÉΓòÉΓòÉ <hidden> BDS_FPUSH_ON ΓòÉΓòÉΓòÉ
  2174.  
  2175. #define BDS_FPUSH_ON                    0x00000004UL
  2176.  
  2177.  
  2178. ΓòÉΓòÉΓòÉ <hidden> BDS_FKBD_LAYER_IS_NL ΓòÉΓòÉΓòÉ
  2179.  
  2180. #define BDS_FKBD_LAYER_IS_NL            0x00000010UL
  2181.  
  2182.  
  2183. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_FIELD_REV ΓòÉΓòÉΓòÉ
  2184.  
  2185. #define BDS_HKFLAG_FIELD_REV            0x00200000UL
  2186.  
  2187.  
  2188. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_ENG_LAYER ΓòÉΓòÉΓòÉ
  2189.  
  2190. #define BDS_HKFLAG_ENG_LAYER            0x00010000UL
  2191.  
  2192.  
  2193. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_NAT_LAYER ΓòÉΓòÉΓòÉ
  2194.  
  2195. #define BDS_HKFLAG_NAT_LAYER            0x00020000UL
  2196.  
  2197.  
  2198. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_PUSH ΓòÉΓòÉΓòÉ
  2199.  
  2200. #define BDS_HKFLAG_PUSH                 0x00040000UL
  2201.  
  2202.  
  2203. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_END_PUSH ΓòÉΓòÉΓòÉ
  2204.  
  2205. #define BDS_HKFLAG_END_PUSH             0x00080000UL
  2206.  
  2207.  
  2208. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_AUTO_PUSH ΓòÉΓòÉΓòÉ
  2209.  
  2210. #define BDS_HKFLAG_AUTO_PUSH            0x00100000UL
  2211.  
  2212.  
  2213. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_SCREEN_REV ΓòÉΓòÉΓòÉ
  2214.  
  2215. #define BDS_HKFLAG_SCREEN_REV           0x00400000UL
  2216.  
  2217.  
  2218. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_BIDI_POPUP ΓòÉΓòÉΓòÉ
  2219.  
  2220. #define BDS_HKFLAG_BIDI_POPUP           0x02000000UL
  2221.  
  2222.  
  2223. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_AUTOMATIC ΓòÉΓòÉΓòÉ
  2224.  
  2225. #define BDS_HKFLAG_AUTOMATIC            0x04000000UL
  2226.  
  2227.  
  2228. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_INITIAL ΓòÉΓòÉΓòÉ
  2229.  
  2230. #define BDS_HKFLAG_INITIAL              0x08000000UL
  2231.  
  2232.  
  2233. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_MIDDLE ΓòÉΓòÉΓòÉ
  2234.  
  2235. #define BDS_HKFLAG_MIDDLE               0x10000000UL
  2236.  
  2237.  
  2238. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_FINAL ΓòÉΓòÉΓòÉ
  2239.  
  2240. #define BDS_HKFLAG_FINAL                0x20000000UL
  2241.  
  2242.  
  2243. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_ISOLATED ΓòÉΓòÉΓòÉ
  2244.  
  2245. #define BDS_HKFLAG_ISOLATED             0x40000000UL
  2246.  
  2247.  
  2248. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_ISOLATED ΓòÉΓòÉΓòÉ
  2249.  
  2250. #define BDS_HKFLAG_PASSTHRU             0x80000000UL
  2251.  
  2252.  
  2253. ΓòÉΓòÉΓòÉ <hidden> BDS_HKFLAG_ISOLATED ΓòÉΓòÉΓòÉ
  2254.  
  2255. #define BDS_DISABLE_INPUT_PROCESSING    0x00000020UL
  2256.  
  2257.  
  2258. ΓòÉΓòÉΓòÉ 13.5. BIDISTAT ΓòÉΓòÉΓòÉ
  2259.  
  2260. The BIDISTAT is a 32-bit word that determines all the aspects of Bidi status 
  2261. related processing and window display associated with a specific application. 
  2262. The user controls the behavior of different applications (having different 
  2263. types of Bidi text) by manipulating these. 
  2264.  
  2265. The following is the Bidi status structure: 
  2266.  
  2267. Bits 16-31 : Hot Key Enable/Disable Flags
  2268.  
  2269. Bit 31          Passthru shape hot key                    BDS_HKFLAG_PASSTHRU
  2270. Bit 30          Isolated shape hot key                    BDS_HKFLAG_ISOLATED
  2271. Bit 29          Final shapes hot key                      BDS_HKFLAG_FINAL
  2272. Bit 28          Middle shapes hot key                     BDS_HKFLAG_MIDDLE
  2273. Bit 27          Initial shapes hot key                    BDS_HKFLAG_INITIAL
  2274. Bit 26          Automatic/base shapes hot key             BDS_HKFLAG_AUTOMATIC
  2275. Bit 25          Bidi viewer invocation hot key            BDS_HKFLAG_BIDI_POPUP
  2276. Bit 24          RESERVED                                  (must be zero)
  2277. Bit 23          RESERVED                                  (must be zero)
  2278. Bit 22          Window reverse hot key                    BDS_HKFLAG_SCREEN_REV
  2279. Bit 21          RESERVED                                  (must be zero)
  2280. Bit 20          Auto push hot key                         BDS_HKFLAG_AUTO_PUSH
  2281. Bit 19          End  push hot key                         BDS_HKFLAG_END_PUSH
  2282. Bit 18          Start push hot key                        BDS_HKFLAG_PUSH
  2283. Bit 17          Keyboard National layer hot key           BDS_HKFLAG_NAT_LAYER
  2284. Bit 16          Keyboard English layer hot key            BDS_HKFLAG_ENG_LAYER
  2285.  
  2286. Bits 0-15 : Bidi Flags
  2287.  
  2288. Bit 8-15        Reserved                                  (must be zero)
  2289. Bit 7           Refresh flag (refresh PVB in full screen) BDS_HKFLAG_FIELD_REV
  2290. Bit 6           Reserved                                  (must be zero)
  2291. Bit 5           Disable input processing                  BDS_DISABLE_INPUT_PROCESSING
  2292. Bit 4           Reserved                                  (must be zero)
  2293. Bit 2-3         Push state ON/OFF                         BDS_FPUSH_ON
  2294. Bit 1           Autopush ON/OFF in LtR window             BDS_FAUTOPUSH_LTR_ON
  2295. Bit 0           Autopush ON/OFF in RtL window             BDS_FAUTOPUSH_RTL_ON
  2296.  
  2297.  
  2298. ΓòÉΓòÉΓòÉ 13.6. BIDISTATM ΓòÉΓòÉΓòÉ
  2299.  
  2300. The BIDISTATM contains a value that determines which status will be changed and 
  2301. which ones are masked. 
  2302.  
  2303. The following are possible Bidi status mask values: 
  2304.  
  2305. #define BDSM_HKFLAGS                    0x7E7F0000UL
  2306. #define BDSM_AUTOPUSH_RTL               0x00000001UL
  2307. #define BDSM_AUTOPUSH_LTR               0x00000002UL
  2308. #define BDSM_PUSH_ON                    0x00000004UL
  2309. #define BDSM_DISABLE_INPUT_PROCESSING   0x00000020UL
  2310.  
  2311. #define BDSM_ALL                      ( BDSM_HKFLAGS        |
  2312.                                         BDSM_AUTOPUSH_RTL   |
  2313.                                         BDSM_AUTOPUSH_LTR   |
  2314.                                         BDSM_PUSH_ON        |
  2315.                                         BDSM_DISABLE_INPUT_PROCESSING )
  2316.  
  2317.  
  2318. ΓòÉΓòÉΓòÉ <hidden> BOOL ΓòÉΓòÉΓòÉ
  2319.  
  2320. BOOL Boolean. 
  2321.  
  2322. Valid values are FALSE, which is 0, and TRUE, which is 1. 
  2323.  
  2324. typedef unsigned long BOOL;
  2325.  
  2326.  
  2327. ΓòÉΓòÉΓòÉ <hidden> CDATE ΓòÉΓòÉΓòÉ
  2328.  
  2329. CDATE Structure that contains date information for a data element in the 
  2330. details view of a container control. 
  2331.  
  2332. typedef struct _CDATE {
  2333. UCHAR     day;    /* Day  */
  2334. UCHAR     month;  /* Month  */
  2335. USHORT    year;   /* Year  */
  2336.  } CDATE;
  2337.  
  2338.  
  2339. ΓòÉΓòÉΓòÉ <hidden> day ΓòÉΓòÉΓòÉ
  2340.  
  2341.  day (UCHAR) 
  2342.     Day. 
  2343.  
  2344.  
  2345. ΓòÉΓòÉΓòÉ <hidden> month ΓòÉΓòÉΓòÉ
  2346.  
  2347.  month (UCHAR) 
  2348.     Month. 
  2349.  
  2350.  
  2351. ΓòÉΓòÉΓòÉ <hidden> year ΓòÉΓòÉΓòÉ
  2352.  
  2353.  year (USHORT) 
  2354.     Year. 
  2355.  
  2356.  
  2357. ΓòÉΓòÉΓòÉ <hidden> CHAR ΓòÉΓòÉΓòÉ
  2358.  
  2359. CHAR Single-byte character. 
  2360.  
  2361. #define CHAR char
  2362.  
  2363.  
  2364. ΓòÉΓòÉΓòÉ <hidden> CNRINFO ΓòÉΓòÉΓòÉ
  2365.  
  2366. CNRINFO Structure that contains information about the container. 
  2367.  
  2368. typedef struct _CNRINFO {
  2369. ULONG         cb;                  /* Structure size  */
  2370. PVOID         pSortRecord;         /* Pointer or NULL  */
  2371. PFIELDINFO    pFieldInfoLast;      /* Pointer or NULL  */
  2372. PFIELDINFO    pFieldInfoObject;    /* Pointer  */
  2373. PSZ           pszCnrTitle;         /* Title text or NULL  */
  2374. ULONG         flWindowAttr;        /* Window attributes  */
  2375. POINTL        ptlOrigin;           /* Workspace origin  */
  2376. ULONG         cDelta;              /* Threshold  */
  2377. ULONG         cRecords;            /* Number of records  */
  2378. SIZEL         slBitmapOrIcon;      /* Icon/bit-map size  */
  2379. SIZEL         slTreeBitmapOrIcon;  /* Icon/bit-map size  */
  2380. HBITMAP       hbmExpanded;         /* Bit-map handle  */
  2381. HBITMAP       hbmCollapsed;        /* Bit-map handle  */
  2382. HPOINTER      hptrExpanded;        /* Icon handle  */
  2383. HPOINTER      hptrCollapsed;       /* Icon handle  */
  2384. LONG          cyLineSpacing;       /* Vertical space  */
  2385. LONG          cxTreeIndent;        /* Horizontal space  */
  2386. LONG          cxTreeLine;          /* Line width  */
  2387. ULONG         cFields;             /* Number of columns  */
  2388. LONG          xVertSplitbar;       /* Split bar position  */
  2389.  } CNRINFO;
  2390.  
  2391.  
  2392. ΓòÉΓòÉΓòÉ <hidden> cb ΓòÉΓòÉΓòÉ
  2393.  
  2394.  cb (ULONG) 
  2395.     Structure size. 
  2396.  
  2397.     The size (in bytes) of the CNRINFO data structure. 
  2398.  
  2399.  
  2400. ΓòÉΓòÉΓòÉ <hidden> pSortRecord ΓòÉΓòÉΓòÉ
  2401.  
  2402.  pSortRecord (PVOID) 
  2403.     Pointer or NULL. 
  2404.  
  2405.     Pointer to the comparison function for sorting container records. If NULL, 
  2406.     which is the default condition, no sorting is performed. Sorting only 
  2407.     occurs during record insertion and when changing the value of this field. 
  2408.     The third parameter of the comparison function, pStorage, must be NULL. See 
  2409.     CM_SORTRECORD for a further description of the comparison function. 
  2410.  
  2411.  
  2412. ΓòÉΓòÉΓòÉ <hidden> pFieldInfoLast ΓòÉΓòÉΓòÉ
  2413.  
  2414.  pFieldInfoLast (PFIELDINFO) 
  2415.     Pointer or NULL. 
  2416.  
  2417.     Pointer to last column in the left window of the split details view. The 
  2418.     default is NULL, causing all columns to be positioned in the left window. 
  2419.  
  2420.  
  2421. ΓòÉΓòÉΓòÉ <hidden> pFieldInfoObject ΓòÉΓòÉΓòÉ
  2422.  
  2423.  pFieldInfoObject (PFIELDINFO) 
  2424.     Pointer. 
  2425.  
  2426.     Pointer to a column that represents an object in the details view. The data 
  2427.     for this FIELDINFO structure must contain icons or bit maps. In-use 
  2428.     emphasis is applied to this column of icons or bit maps only. The default 
  2429.     is the leftmost column in the unsplit details view, or the leftmost column 
  2430.     in the left window of the split details view. 
  2431.  
  2432.  
  2433. ΓòÉΓòÉΓòÉ <hidden> pszCnrTitle ΓòÉΓòÉΓòÉ
  2434.  
  2435.  pszCnrTitle (PSZ) 
  2436.     Title text or NULL. 
  2437.  
  2438.     Text for the container title. The default is NULL. 
  2439.  
  2440.  
  2441. ΓòÉΓòÉΓòÉ <hidden> flWindowAttr ΓòÉΓòÉΓòÉ
  2442.  
  2443.  flWindowAttr (ULONG) 
  2444.     Window attributes. 
  2445.  
  2446.     Consists of container window attributes. 
  2447.         Specify one of the following container views, which determine the 
  2448.          presentation format of items in a container: 
  2449.  
  2450.          CV_ICON 
  2451.                  In the icon view, the container items are represented as 
  2452.                  icon/text or bit-map/text pairs, with text beneath the icons 
  2453.                  or bit maps. This is the default view. This view can be 
  2454.                  combined with the CV_MINI style bit by using an OR operator 
  2455.                  (|). 
  2456.          CV_NAME 
  2457.                  In the name view, the container items are represented as 
  2458.                  icon/text or bit-map/text pairs, with text to the right of the 
  2459.                  icons or bit maps. This view can be combined with the CV_MINI 
  2460.                  and CV_FLOW style bits by using OR operators (|). 
  2461.          CV_TEXT 
  2462.                  In the text view, the container items are displayed as a list 
  2463.                  of text strings. This view can be combined with the CV_FLOW 
  2464.                  style bit by using an OR operator (|). 
  2465.          CV_TREE 
  2466.                  In the tree view, the container items are represented in a 
  2467.                  hierarchical manner. The tree view has three forms, which are 
  2468.                  defined in the following list. If you specify CV_TREE by 
  2469.                  itself, the tree icon view is used. 
  2470.                    -  Tree icon view 
  2471.                       The tree icon view is specified by using a logical OR 
  2472.                       operator to combine the tree view with the icon view 
  2473.                       (CV_TREE | CV_ICON). Container items in this view are 
  2474.                       represented as icon/text pairs or bit-map/text pairs, 
  2475.                       with text to the right of the icons or bit maps. Also, a 
  2476.                       collapsed or expanded icon or bit map is displayed to the 
  2477.                       left of parent items. If this icon or bit map is a 
  2478.                       collapsed icon or bit map, selecting it will cause the 
  2479.                       parent item to be expanded so that its child items are 
  2480.                       displayed below it. If this icon or bit map is an 
  2481.                       expanded icon or bit map, selecting it will cause the 
  2482.                       parent's child items to be removed from the display. The 
  2483.                       default collapsed and expanded bit maps provided by the 
  2484.                       container use a plus sign (+) and a minus sign (-), 
  2485.                       respectively, to indicate that items can be added to or 
  2486.                       subtracted from the display. 
  2487.  
  2488.                    -  Tree name view 
  2489.                       The tree name view is specified by using a logical OR 
  2490.                       operator to combine the tree view with the name view 
  2491.                       (CV_TREE | CV_NAME). Container items in this view are 
  2492.                       displayed as either icon/text pairs or bit-map/text 
  2493.                       pairs, with text to the right of the icons or bit maps. 
  2494.                       However, the indicator that represents whether an item 
  2495.                       can be collapsed or expanded, such as a plus or minus 
  2496.                       sign, is included in the icon or bit map that represents 
  2497.                       that item, not in a separate icon or bit map as in the 
  2498.                       tree icon and tree text views. The container control does 
  2499.                       not provide default collapsed and expanded bit maps for 
  2500.                       the tree name view. 
  2501.  
  2502.                    -  Tree text view 
  2503.                       The tree text view is specified by using a logical OR 
  2504.                       operator to combine the tree view with the text view 
  2505.                       (CV_TREE | CV_TEXT). Container items in this view are 
  2506.                       displayed as a list of text strings. As in the tree icon 
  2507.                       view, a collapsed or expanded icon or bit map is 
  2508.                       displayed to the left of parent items. 
  2509.          CV_DETAIL 
  2510.                  In the details view, the container items are presented in 
  2511.                  columns. Each column can contain icons or bit maps, text, 
  2512.                  numbers, dates, or times. 
  2513.  
  2514.         Specify one or both of the following view styles by using an OR 
  2515.          operator (|) to combine them with the specified view. These view 
  2516.          styles are optional. 
  2517.  
  2518.          CV_MINI 
  2519.                  Produces a mini-icon whose size is based on the Presentation 
  2520.                  Manager (PM) SV_CYMENU system value to produce a 
  2521.                  device-dependent mini-icon. 
  2522.                  The CV_MINI view style bit is ignored when: 
  2523.                    -  The text view (CV_TEXT), tree view (CV_TREE), or details 
  2524.                       view (CV_DETAIL) are displayed 
  2525.  
  2526.                    -  The CCS_MINIRECORDCORE style bit is specified. 
  2527.                  If this style bit is not specified and the icon view (CV_ICON) 
  2528.                  or name view (CV_NAME) is used, the default, regular-sized 
  2529.                  icon is used. The size of regular-sized icons is based on the 
  2530.                  value in the slBitmapOrIcon field of the CNRINFO data 
  2531.                  structure. If this field is equal to 0, the PM SV_CXICON and 
  2532.                  SV_CYICON system values for width and height, respectively, 
  2533.                  are used. Icon sizes are consistent with PM-defined icon sizes 
  2534.                  for all devices. 
  2535.          CV_FLOW 
  2536.                  Dynamically arranges container items in columns in the name 
  2537.                  and text views. These are called flowed name and flowed text 
  2538.                  views. If this style bit is set for the name view (CV_NAME) or 
  2539.                  text view (CV_TEXT), the container items are placed in a 
  2540.                  single column until the bottom of the client area is reached. 
  2541.                  The next container item is placed in the adjacent column to 
  2542.                  the right of the filled column. This process is repeated until 
  2543.                  all of the container items are positioned in the container. 
  2544.                  The width of each column is determined by the longest text 
  2545.                  string in that column. The size of the window determines the 
  2546.                  depth of the client area. 
  2547.                  If this style bit is not specified, the default condition for 
  2548.                  the name and text views is to vertically fill the container in 
  2549.                  a single column without flowing the container items. If this 
  2550.                  style bit is set for the icon view (CV_ICON) or details view 
  2551.                  (CV_DETAIL), it is ignored. 
  2552.  
  2553.         Specify either of the following to indicate whether the container will 
  2554.          display icons or bit maps: 
  2555.  
  2556.          CA_DRAWICON 
  2557.                  Icons are used for the icon, name, tree, or details views. 
  2558.                  This is the default. This container attribute should be used 
  2559.                  with the hptrIcon and hptrMiniIcon fields of the RECORDCORE 
  2560.                  data structure. 
  2561.          CA_DRAWBITMAP 
  2562.                  Bit maps are used for the icon, name, tree, or details views. 
  2563.                  This container attribute can be used with the hbmBitmap and 
  2564.                  hbmMiniBitmap fields of the RECORDCORE data structure. 
  2565.                  Notes 
  2566.                    1. If both the CA_DRAWICON and CA_DRAWBITMAP attributes are 
  2567.                       specified, the CA_DRAWICON attribute is used. 
  2568.  
  2569.                    2. If the CCS_MINIRECORDCORE style bit is specified when a 
  2570.                       container is created, the hptrIcon field of the 
  2571.                       MINIRECORDCORE data structure is used. 
  2572.  
  2573.         Specify one of the following attributes to provide target emphasis for 
  2574.          the name, text, and details views. If neither ordered nor mixed target 
  2575.          emphasis is specified, the emphasis is drawn around the record. 
  2576.  
  2577.          CA_ORDEREDTARGETEMPH 
  2578.                  Shows where a container record can be dropped during direct 
  2579.                  manipulation by drawing a line beneath the record. Ordered 
  2580.                  target emphasis does not apply to the icon and tree views. 
  2581.          CA_MIXEDTARGETEMPH 
  2582.                  Shows where a container record can be dropped during direct 
  2583.                  manipulation either by drawing a line between two items or by 
  2584.                  drawing lines around the container record. Mixed target 
  2585.                  emphasis does not apply to the icon and tree views. 
  2586.  
  2587.         Specify the following attribute to draw lines that show the 
  2588.          relationship between items in the tree view. 
  2589.  
  2590.          CA_TREELINE 
  2591.                  Shows the relationship between all items in the tree view. 
  2592.  
  2593.         Specify the following to draw container records, paint the background 
  2594.          of the container, or both: 
  2595.  
  2596.          CA_OWNERDRAW 
  2597.                  Ownerdraw for the container, which allows the application to 
  2598.                  draw container records. 
  2599.          CA_OWNERPAINTBACKGROUND 
  2600.                  Allows the application to subclass the container and paint the 
  2601.                  background. If specified, and the container is subclassed, the 
  2602.                  application receives the CM_PAINTBACKGROUND message in the 
  2603.                  subclass procedure. Otherwise, the container paints the 
  2604.                  background using the color specified by SYSCLR_WINDOW, which 
  2605.                  can be changed by using the PP_BACKGROUNDCOLOR or 
  2606.                  PP_BACKGROUNDCOLORINDEX presentation parameter in the 
  2607.                  WM_PRESPARAMCHANGED (in Container Controls) message. 
  2608.  
  2609.         Specify the following if the container is to have a title: 
  2610.  
  2611.          CA_CONTAINERTITLE 
  2612.                  Allows you to include a container title. The default is no 
  2613.                  container title. 
  2614.  
  2615.         Specify one or both of the following container title attributes. These 
  2616.          are valid only if the CA_CONTAINERTITLE attribute is specified. 
  2617.  
  2618.          CA_TITLEREADONLY 
  2619.                  Prevents the container title from being edited directly. The 
  2620.                  default is to allow the container title to be edited. 
  2621.          CA_TITLESEPARATOR 
  2622.                  Puts a separator line between the container title and the 
  2623.                  records beneath it. The default is no separator line. 
  2624.  
  2625.         Specify one of the following to position the container title. These 
  2626.          are valid only if the CA_CONTAINERTITLE attribute is specified. 
  2627.  
  2628.          CA_TITLECENTER 
  2629.                  Centers the container title. This is the default. 
  2630.          CA_TITLELEFT 
  2631.                  Left-justifies the container title. 
  2632.          CA_TITLERIGHT 
  2633.                  Right-justifies the container title. 
  2634.  
  2635.         Specify the following to display column headings in the details view: 
  2636.  
  2637.          CA_DETAILSVIEWTITLES 
  2638.                  Allows you to include column headings in the details view. The 
  2639.                  default is no column headings. 
  2640.  
  2641.  
  2642. ΓòÉΓòÉΓòÉ <hidden> ptlOrigin ΓòÉΓòÉΓòÉ
  2643.  
  2644.  ptlOrigin (POINTL) 
  2645.     Workspace origin. 
  2646.  
  2647.     Lower-left origin of the workspace in virtual coordinates, used in the icon 
  2648.     view. The default origin is (0,0). 
  2649.  
  2650.  
  2651. ΓòÉΓòÉΓòÉ <hidden> cDelta ΓòÉΓòÉΓòÉ
  2652.  
  2653.  cDelta (ULONG) 
  2654.     Threshold 
  2655.  
  2656.     An application-defined threshold, or number of records, from either end of 
  2657.     the list of available records. Used when a container needs to handle large 
  2658.     amounts of data. The default is 0. Refer to the OS/2 Programming Guide for 
  2659.     more information about specifying deltas. 
  2660.  
  2661.  
  2662. ΓòÉΓòÉΓòÉ <hidden> cRecords ΓòÉΓòÉΓòÉ
  2663.  
  2664.  cRecords (ULONG) 
  2665.     Number of records. 
  2666.  
  2667.     The number of records in the container. Initially this field is 0. 
  2668.  
  2669.  
  2670. ΓòÉΓòÉΓòÉ <hidden> slBitmapOrIcon ΓòÉΓòÉΓòÉ
  2671.  
  2672.  slBitmapOrIcon (SIZEL) 
  2673.     Icon/bit-map size. 
  2674.  
  2675.     The size (in pels) of icons or bit maps. The default is the system size. 
  2676.  
  2677.  
  2678. ΓòÉΓòÉΓòÉ <hidden> slTreeBitmapOrIcon ΓòÉΓòÉΓòÉ
  2679.  
  2680.  slTreeBitmapOrIcon (SIZEL) 
  2681.     Icon/bit-map size. 
  2682.  
  2683.     The size (in pels) of the expanded and collapsed icons or bit maps used in 
  2684.     the tree icon and tree text views. 
  2685.  
  2686.  
  2687. ΓòÉΓòÉΓòÉ <hidden> hbmExpanded ΓòÉΓòÉΓòÉ
  2688.  
  2689.  hbmExpanded (HBITMAP) 
  2690.     Bit-map handle. 
  2691.  
  2692.     The handle of the bit map to be used to represent an expanded parent item 
  2693.     in the tree icon and tree text views. If neither an icon handle (see 
  2694.     hptrExpanded) nor a bit-map handle is specified, a default bit map with a 
  2695.     minus sign (-) is provided. 
  2696.  
  2697.  
  2698. ΓòÉΓòÉΓòÉ <hidden> hbmCollapsed ΓòÉΓòÉΓòÉ
  2699.  
  2700.  hbmCollapsed (HBITMAP) 
  2701.     Bit-map handle. 
  2702.  
  2703.     The handle of the bit map to be used to represent a collapsed parent item 
  2704.     in the tree icon and tree text views. If neither an icon handle (see 
  2705.     hptrCollapsed) nor a bit-map handle is specified, a default bit map with a 
  2706.     plus sign (+) is provided. 
  2707.  
  2708.  
  2709. ΓòÉΓòÉΓòÉ <hidden> hptrExpanded ΓòÉΓòÉΓòÉ
  2710.  
  2711.  hptrExpanded (HPOINTER) 
  2712.     Icon handle. 
  2713.  
  2714.     The handle of the icon to be used to represent an expanded parent item in 
  2715.     the tree icon and tree text views. If neither an icon handle nor a bit-map 
  2716.     handle (see hbmExpanded) is specified, a default bit map with a minus sign 
  2717.     (-) is provided. 
  2718.  
  2719.  
  2720. ΓòÉΓòÉΓòÉ <hidden> hptrCollapsed ΓòÉΓòÉΓòÉ
  2721.  
  2722.  hptrCollapsed (HPOINTER) 
  2723.     Icon handle. 
  2724.  
  2725.     The handle of the icon to be used to represent a collapsed parent item in 
  2726.     the tree icon and tree text views. If neither an icon handle nor a bit-map 
  2727.     handle (see hbmCollapsed) is specified, a default bit map with a plus sign 
  2728.     (+) is provided. 
  2729.  
  2730.  
  2731. ΓòÉΓòÉΓòÉ <hidden> cyLineSpacing ΓòÉΓòÉΓòÉ
  2732.  
  2733.  cyLineSpacing (LONG) 
  2734.     Vertical space. 
  2735.  
  2736.     The amount of vertical space (in pels) between the records. If you specify 
  2737.     a value that is less than 0, a default value is used. 
  2738.  
  2739.  
  2740. ΓòÉΓòÉΓòÉ <hidden> cxTreeIndent ΓòÉΓòÉΓòÉ
  2741.  
  2742.  cxTreeIndent (LONG) 
  2743.     Horizontal space. 
  2744.  
  2745.     The amount of horizontal space (in pels) between levels in the tree view. 
  2746.     If you specify a value that is less than 0, a default value is used. 
  2747.  
  2748.  
  2749. ΓòÉΓòÉΓòÉ <hidden> cxTreeLine ΓòÉΓòÉΓòÉ
  2750.  
  2751.  cxTreeLine (LONG) 
  2752.     Line width. 
  2753.  
  2754.     The width of the lines (in pels) that show the relationship between tree 
  2755.     items. If you specify a value that is less than 0, a default value is used. 
  2756.     Also, if the CA_TREELINE container attribute of the flWindowAttr field is 
  2757.     not specified, these lines are not drawn. 
  2758.  
  2759.  
  2760. ΓòÉΓòÉΓòÉ <hidden> cFields ΓòÉΓòÉΓòÉ
  2761.  
  2762.  cFields (ULONG) 
  2763.     Number of columns. 
  2764.  
  2765.     The number of FIELDINFO structures in the container. Initially this field 
  2766.     is 0. 
  2767.  
  2768.  
  2769. ΓòÉΓòÉΓòÉ <hidden> xVertSplitbar ΓòÉΓòÉΓòÉ
  2770.  
  2771.  xVertSplitbar (LONG) 
  2772.     Split bar position. 
  2773.  
  2774.     The initial position of the split bar relative to the container, used in 
  2775.     the details view. If this value is less than 0, the split bar is not used. 
  2776.     The default value is negative one (-1). 
  2777.  
  2778.  
  2779. ΓòÉΓòÉΓòÉ 13.7. LAYOUT_EDIT_SIZE ΓòÉΓòÉΓòÉ
  2780.  
  2781. LAYOUT_EDIT_SIZE Defines number of surrounding code elements that need to be 
  2782. considered when performing edit shaping. 
  2783.  
  2784. typedef struct  _LAYOUT_EDIT_SIZE {
  2785. ULONG    front;      /* Previous characters */
  2786. ULONG    back;       /* Succeeding characters */
  2787.  } LAYOUT_EDIT_SIZE;
  2788.  
  2789.  
  2790. ΓòÉΓòÉΓòÉ <hidden> front ΓòÉΓòÉΓòÉ
  2791.  
  2792.  front (ULONG) 
  2793.     Previous characters. 
  2794.  
  2795.     Number of code elements in front of the substring. 
  2796.  
  2797.  
  2798. ΓòÉΓòÉΓòÉ <hidden> back ΓòÉΓòÉΓòÉ
  2799.  
  2800.  back (ULONG) 
  2801.     Succeeding characters. 
  2802.  
  2803.     Number of code elements behind the substring. 
  2804.  
  2805.  
  2806. ΓòÉΓòÉΓòÉ <hidden> LAYOUT_OBJECT ΓòÉΓòÉΓòÉ
  2807.  
  2808. LAYOUT_OBJECT Bit-map handle. 
  2809.  
  2810. typedef PVOID  LAYOUT_OBJECT;
  2811.  
  2812.  
  2813. ΓòÉΓòÉΓòÉ 13.8. LAYOUT_TEXT_DESCRIPTOR ΓòÉΓòÉΓòÉ
  2814.  
  2815. LAYOUT_TEXT_DESCRIPTOR Identifies the attributes of the source and target text. 
  2816.  
  2817. typedef struct  _LAYOUT_TEXT_DESCRIPTOR {
  2818. ULONG    in;      /* Input buffer description */
  2819. ULONG    out;     /* Output description */
  2820.  } LAYOUT_TEXT_DESCRIPTOR;
  2821.  
  2822.  
  2823. ΓòÉΓòÉΓòÉ <hidden> front ΓòÉΓòÉΓòÉ
  2824.  
  2825.  in (ULONG) 
  2826.     Input buffer description. 
  2827.  
  2828.     Attributes that describe the input buffer. 
  2829.  
  2830.  
  2831. ΓòÉΓòÉΓòÉ <hidden> back ΓòÉΓòÉΓòÉ
  2832.  
  2833.  out (ULONG) 
  2834.     Output description. 
  2835.  
  2836.     Attributes that describe the required ouput buffer. 
  2837.  
  2838.  
  2839. ΓòÉΓòÉΓòÉ 13.9. LAYOUT_VALUES ΓòÉΓòÉΓòÉ
  2840.  
  2841. LAYOUT_VALUES Layout object default values. 
  2842.  
  2843. These values are automatically associated with the layout object at creation 
  2844. time. 
  2845.  
  2846. typedef struct  _LAYOUT_VALUES {
  2847. ULONG    name;        /* Name of Layout Value Item */
  2848. PVOID    value;       /* Data of Layout Value Item */
  2849.  } LAYOUT_VALUES;
  2850.  
  2851.  
  2852. ΓòÉΓòÉΓòÉ <hidden> name ΓòÉΓòÉΓòÉ
  2853.  
  2854.  name (ULONG) 
  2855.     Name of Layout Value Item. 
  2856.  
  2857.     The following are possible names: 
  2858.  
  2859.     For a more detailed explaination please refer to the section on Layout 
  2860.     Values . 
  2861.  
  2862.              Value Name                Value Type             Set/Get
  2863.              ___________               ___________             _____
  2864.          ActiveBidirection         BOOL                      G
  2865.          ActiveShapeEditing        BOOL                      G
  2866.          ShapeContextSize          LAYOUT_EDIT_SIZE          G
  2867.          Cellsize                  ULONG                    SG
  2868.          InputMode                 BOOL                     SG
  2869.          CallerAllocMem            BOOL                     SG
  2870.          QueryValueSize            ULONG                    SG
  2871.          InOutTextDescrMask        ULONG                    SG
  2872.          InOnlyTextDescr           ULONG                    SG
  2873.          OutOnlyTextDescr          ULONG                    SG
  2874.          Orientation               LAYOUT_TEXT_DESCRIPTOR   SG
  2875.          TypeOfText                LAYOUT_TEXT_DESCRIPTOR   SG
  2876.          Swapping                  LAYOUT_TEXT_DESCRIPTOR   SG
  2877.          Numerals                  LAYOUT_TEXT_DESCRIPTOR   SG
  2878.          TextShaping               LAYOUT_TEXT_DESCRIPTOR   SG
  2879.          WordBreak                 LAYOUT_TEXT_DESCRIPTOR   SG
  2880.  
  2881.     All of the above can be ORed together except the following. 
  2882.  
  2883.          ActiveShapeEditing
  2884.          ActiveBidirection
  2885.          ShapeContextSize
  2886.  
  2887.          CellSize
  2888.          InputMode
  2889.          InOnlyTextDescr
  2890.          OutOnlyTextDescr
  2891.          InOutTextDescrMask
  2892.          CallerAllocMem
  2893.  
  2894.  
  2895. ΓòÉΓòÉΓòÉ <hidden> value ΓòÉΓòÉΓòÉ
  2896.  
  2897.  value (PVOID) 
  2898.     Data of Layout Value Item. 
  2899.  
  2900.  Each value element of a LAYOUT_VALUES record must contain a pointer to the 
  2901.  type of the layout value that is being set or get. That is, if the layout 
  2902.  value is for type T, the arguement must be of type T*. 
  2903.  
  2904.  
  2905. ΓòÉΓòÉΓòÉ <hidden> ActiveBidirection ΓòÉΓòÉΓòÉ
  2906.  
  2907.  #define ActiveBidirection       (0x0002<<16)
  2908.  
  2909.  
  2910. ΓòÉΓòÉΓòÉ <hidden> ActiveShapeEditing ΓòÉΓòÉΓòÉ
  2911.  
  2912.  #define ActiveShapeEditing      (0x0001<<16)
  2913.  
  2914.  
  2915. ΓòÉΓòÉΓòÉ <hidden> ShapeContextSize ΓòÉΓòÉΓòÉ
  2916.  
  2917.  #define ShapeContextSize        (0x0005<<16)
  2918.  
  2919.  
  2920. ΓòÉΓòÉΓòÉ <hidden> CellSize ΓòÉΓòÉΓòÉ
  2921.  
  2922.  #define CellSize                (0x0006<<16)
  2923.  
  2924.  
  2925. ΓòÉΓòÉΓòÉ <hidden> InputMode ΓòÉΓòÉΓòÉ
  2926.  
  2927.  #define InputMode               (0x0007<<16)
  2928.  
  2929.  
  2930. ΓòÉΓòÉΓòÉ <hidden> CallerAllocMem ΓòÉΓòÉΓòÉ
  2931.  
  2932.  #define CallerAllocMem          (0x000b<<16)
  2933.  
  2934.  
  2935. ΓòÉΓòÉΓòÉ <hidden> QueryValueSize ΓòÉΓòÉΓòÉ
  2936.  
  2937.  #define QueryValueSize          (0x8000<<16)
  2938.  
  2939.  
  2940. ΓòÉΓòÉΓòÉ <hidden> InOutTextDescrMask ΓòÉΓòÉΓòÉ
  2941.  
  2942.  #define InOutTextDescrMask      (0x000a<<16)
  2943.  
  2944.  
  2945. ΓòÉΓòÉΓòÉ <hidden> InOnlyTextDescr ΓòÉΓòÉΓòÉ
  2946.  
  2947.  #define InOnlyTextDescr         (0x0008<<16)
  2948.  
  2949.  
  2950. ΓòÉΓòÉΓòÉ <hidden> OutOnlyTextDescr ΓòÉΓòÉΓòÉ
  2951.  
  2952.  #define OutOnlyTextDescr        (0x0009<<16)
  2953.  
  2954.  
  2955. ΓòÉΓòÉΓòÉ <hidden> Orientation ΓòÉΓòÉΓòÉ
  2956.  
  2957.  #define Orientation             0x00000001
  2958.  
  2959.  
  2960. ΓòÉΓòÉΓòÉ <hidden> TypeOfText ΓòÉΓòÉΓòÉ
  2961.  
  2962.  #define TypeOfText              0x00000002
  2963.  
  2964.  
  2965. ΓòÉΓòÉΓòÉ <hidden> Swapping ΓòÉΓòÉΓòÉ
  2966.  
  2967.  #define Swapping                0x00000004
  2968.  
  2969.  
  2970. ΓòÉΓòÉΓòÉ <hidden> Numerals ΓòÉΓòÉΓòÉ
  2971.  
  2972.  #define Numerals                0x00000008
  2973.  
  2974.  
  2975. ΓòÉΓòÉΓòÉ <hidden> TextShaping ΓòÉΓòÉΓòÉ
  2976.  
  2977.  #define TextShaping             0x00000010
  2978.  
  2979.  
  2980. ΓòÉΓòÉΓòÉ <hidden> Word_Break ΓòÉΓòÉΓòÉ
  2981.  
  2982.  #define Word_Break              0x00000080
  2983.  
  2984.  
  2985. ΓòÉΓòÉΓòÉ <hidden> QueryValueSize ΓòÉΓòÉΓòÉ
  2986.  
  2987. #define QueryValueSize          (0x8000<<16)
  2988.  
  2989.  
  2990. ΓòÉΓòÉΓòÉ <hidden> PLAYOUT_OBJECT ΓòÉΓòÉΓòÉ
  2991.  
  2992. PLAYOUT_OBJECT Bit-map handle. 
  2993.  
  2994. typedef PVOID  FAR *  PLAYOUT_OBJECT;
  2995.  
  2996.  
  2997. ΓòÉΓòÉΓòÉ <hidden> PLAYOUT_VALUES ΓòÉΓòÉΓòÉ
  2998.  
  2999. PLAYOUT_VALUES Bit-map handle. 
  3000.  
  3001. typedef LAYOUT_VALUES FAR *  PLAYOUT_VALUES;
  3002.  
  3003.  
  3004. ΓòÉΓòÉΓòÉ <hidden> CTIME ΓòÉΓòÉΓòÉ
  3005.  
  3006. CTIME Structure that contains time information for a data element in the 
  3007. details view of a container control. 
  3008.  
  3009. typedef struct _CTIME {
  3010. UCHAR    hours;       /* Hour  */
  3011. UCHAR    minutes;     /* Minute  */
  3012. UCHAR    seconds;     /* Second  */
  3013. UCHAR    ucReserved;  /* Reserved  */
  3014.  } CTIME;
  3015.  
  3016.  
  3017. ΓòÉΓòÉΓòÉ <hidden> hours ΓòÉΓòÉΓòÉ
  3018.  
  3019.  hours (UCHAR) 
  3020.     Hour. 
  3021.  
  3022.  
  3023. ΓòÉΓòÉΓòÉ <hidden> minutes ΓòÉΓòÉΓòÉ
  3024.  
  3025.  minutes (UCHAR) 
  3026.     Minute. 
  3027.  
  3028.  
  3029. ΓòÉΓòÉΓòÉ <hidden> seconds ΓòÉΓòÉΓòÉ
  3030.  
  3031.  seconds (UCHAR) 
  3032.     Second. 
  3033.  
  3034.  
  3035. ΓòÉΓòÉΓòÉ <hidden> ucReserved ΓòÉΓòÉΓòÉ
  3036.  
  3037.  ucReserved (UCHAR) 
  3038.     Reserved. 
  3039.  
  3040.  
  3041. ΓòÉΓòÉΓòÉ <hidden> FIELDINFO ΓòÉΓòÉΓòÉ
  3042.  
  3043. FIELDINFO Structure that contains information about column data in the details 
  3044. view of the container control. The details view displays each FIELDINFO 
  3045. structure as a column of data that contains specific information about each 
  3046. container record. For example, one FIELDINFO structure, or column, might 
  3047. contain icons or bit maps that represent each container record. Another 
  3048. FIELDINFO structure might contain the date or time that each container record 
  3049. was created. 
  3050.  
  3051. typedef struct _FIELDINFO {
  3052. ULONG         cb;              /* Structure size  */
  3053. ULONG         flData;          /* Data attributes  */
  3054. ULONG         flTitle;         /* Attributes of column headings  */
  3055. PVOID         pTitleData;      /* Column heading data  */
  3056. ULONG         offStruct;       /* Structure offset  */
  3057. PVOID         pUserData;       /* Pointer  */
  3058. PFIELDINFO    pNextFieldInfo;  /* Pointer  */
  3059. ULONG         cxWidth;         /* Column width  */
  3060.  } FIELDINFO;
  3061.  
  3062.  
  3063. ΓòÉΓòÉΓòÉ <hidden> cb ΓòÉΓòÉΓòÉ
  3064.  
  3065.  cb (ULONG) 
  3066.     Structure size. 
  3067.  
  3068.     The size (in bytes) of the FIELDINFO structure. 
  3069.  
  3070.  
  3071. ΓòÉΓòÉΓòÉ <hidden> flData ΓòÉΓòÉΓòÉ
  3072.  
  3073.  flData (ULONG) 
  3074.     Data attributes. 
  3075.  
  3076.     Attributes of the data in a field. 
  3077.         Specify one of the following for each column to choose the type of 
  3078.          data that is displayed in each column: 
  3079.  
  3080.          CFA_BITMAPORICON 
  3081.                  The column contains bit-map or icon data. 
  3082.          CFA_STRING 
  3083.                  Character or text data is displayed in this column. 
  3084.          CFA_ULONG 
  3085.                  Unsigned number data is displayed in this column. National 
  3086.                  Language Support (NLS) is enabled for number format. 
  3087.          CFA_DATE 
  3088.                  The data in the column is displayed in date format. National 
  3089.                  Language Support (NLS) is enabled for date format. Use the 
  3090.                  data structure described in CDATE. 
  3091.          CFA_TIME 
  3092.                  The data in the column is displayed in time format. National 
  3093.                  Language Support (NLS) is enabled for time format. Use the 
  3094.                  data structure described in CTIME. 
  3095.  
  3096.         Specify any or all of the following column attributes: 
  3097.  
  3098.          CFA_HORZSEPARATOR 
  3099.                  A horizontal separator is provided beneath column headings. 
  3100.          CFA_SEPARATOR 
  3101.                  A vertical separator is drawn after this column. 
  3102.          CFA_OWNER 
  3103.                  Ownerdraw is enabled for this container column. 
  3104.          CFA_INVISIBLE 
  3105.                  Invisible container column. The default is visible. 
  3106.          CFA_FIREADONLY 
  3107.                  Prevents text in a FIELDINFO data structure (text in a column) 
  3108.                  from being edited directly. This attribute applies only to 
  3109.                  columns for which the CFA_STRING attribute has been specified. 
  3110.  
  3111.         Specify one of the following for each column to vertically position 
  3112.          data in that column: 
  3113.  
  3114.          CFA_TOP 
  3115.                  Top-justifies field data. 
  3116.          CFA_BOTTOM 
  3117.                  Bottom-justifies field data. 
  3118.          CFA_VCENTER 
  3119.                  Vertically centers field data. This is the default. 
  3120.  
  3121.         Specify one of the following for each column to horizontally position 
  3122.          data in that column. These attributes can be combined with the 
  3123.          attributes used for vertical positioning of column data by using an OR 
  3124.          operator (|). 
  3125.  
  3126.          CFA_CENTER 
  3127.                  Horizontally centers field data. 
  3128.          CFA_LEFT 
  3129.                  Left-justifies field data. This is the default. 
  3130.          CFA_RIGHT 
  3131.                  Right-justifies field data. 
  3132.  
  3133.  
  3134. ΓòÉΓòÉΓòÉ <hidden> flTitle ΓòÉΓòÉΓòÉ
  3135.  
  3136.  flTitle (ULONG) 
  3137.     Attributes of column headings. 
  3138.  
  3139.  
  3140.         Specify the following if icon or bit-map data is to be displayed in 
  3141.          the column heading: 
  3142.  
  3143.          CFA_BITMAPORICON 
  3144.                  The column heading contains icon or bit-map data. If 
  3145.                  CFA_BITMAPORICON is not specified, any data that is assigned 
  3146.                  to the column heading is assumed to be text or character data. 
  3147.  
  3148.         Specify the following to prevent direct editing of a column heading: 
  3149.  
  3150.          CFA_FITITLEREADONLY 
  3151.                  Prevents a column heading from being edited directly. 
  3152.  
  3153.         Specify one of the following for each column heading to vertically 
  3154.          position data in that column heading: 
  3155.  
  3156.          CFA_TOP 
  3157.                  Top-justifies column headings. 
  3158.          CFA_BOTTOM 
  3159.                  Bottom-justifies column headings. 
  3160.          CFA_VCENTER 
  3161.                  Vertically centers column headings. This is the default. 
  3162.  
  3163.         Specify one of the following for each column heading to horizontally 
  3164.          position data in that column heading. These attributes can be combined 
  3165.          with the attributes used for vertical positioning of column heading 
  3166.          data by using an OR operator (|). 
  3167.  
  3168.          CFA_CENTER 
  3169.                  Horizontally centers column headings. 
  3170.          CFA_LEFT 
  3171.                  Left-justifies column headings. This is the default. 
  3172.          CFA_RIGHT 
  3173.                  Right-justifies column headings. 
  3174.  
  3175.  
  3176. ΓòÉΓòÉΓòÉ <hidden> pTitleData ΓòÉΓòÉΓòÉ
  3177.  
  3178.  pTitleData (PVOID) 
  3179.     Column heading data. 
  3180.  
  3181.     Column heading data, which can be a text string, or an icon or bit map. The 
  3182.     default is a text string. If the flTitle field is set to the 
  3183.     CFA_BITMAPORICON attribute, this must be an icon or bit map. 
  3184.  
  3185.  
  3186. ΓòÉΓòÉΓòÉ <hidden> offStruct ΓòÉΓòÉΓòÉ
  3187.  
  3188.  offStruct (ULONG) 
  3189.     Structure offset. 
  3190.  
  3191.     Offset from the beginning of a RECORDCORE structure to the data that is 
  3192.     displayed in this column. 
  3193.  
  3194.     Note:  If the CCS_MINIRECORDCORE style bit is specified when a container is 
  3195.     created, then MINIRECORDCORE should be used instead of RECORDCORE and 
  3196.     PMINIRECORDCORE should be used instead of PRECORDCORE in all applicable 
  3197.     data structures and messages. 
  3198.  
  3199.  
  3200. ΓòÉΓòÉΓòÉ <hidden> pUserData ΓòÉΓòÉΓòÉ
  3201.  
  3202.  pUserData (PVOID) 
  3203.     Pointer. 
  3204.  
  3205.     Pointer to user data. 
  3206.  
  3207.  
  3208. ΓòÉΓòÉΓòÉ <hidden> pNextFieldInfo ΓòÉΓòÉΓòÉ
  3209.  
  3210.  pNextFieldInfo (PFIELDINFO) 
  3211.     Pointer. 
  3212.  
  3213.     Pointer to the next linked FIELDINFO data structure. 
  3214.  
  3215.  
  3216. ΓòÉΓòÉΓòÉ <hidden> cxWidth ΓòÉΓòÉΓòÉ
  3217.  
  3218.  cxWidth (ULONG) 
  3219.     Column width. 
  3220.  
  3221.     Used to specify the width of a column. The default is an automatically 
  3222.     sized column that is always the width of its widest element. If this field 
  3223.     is set and the data is too wide, the data is truncated. 
  3224.  
  3225.  
  3226. ΓòÉΓòÉΓòÉ <hidden> ulFlags ΓòÉΓòÉΓòÉ
  3227.  
  3228.  ulFlags (ULONG) 
  3229.     FNTF_* flags. 
  3230.     FNTF_NOVIEWPRINTERFONTS 
  3231.             This flag is initialized only when both hpsScreen and hpsPrinter 
  3232.             are not NULLHANDLE. On input, this parameter determines whether the 
  3233.             printer fonts are to be included in the font list box. The user 
  3234.             controls this with a check box. 
  3235.     FNTF_NOVIEWSCREENFONTS 
  3236.             This flag is initialized only when both hpsScreen and hpsPrinter 
  3237.             are not NULLHANDLE. On input, this parameter determines whether the 
  3238.             screen fonts should be included in the font list box. The user 
  3239.             controls this with a check box. 
  3240.     FNTF_PRINTERFONTSELECTED 
  3241.             This determines if a printer-specific font is selected by the user. 
  3242.             The application should make an approximation of this printer font 
  3243.             when outputting to the screen. This is an output-only flag and is 
  3244.             ignored on input. 
  3245.     FNTF_SCREENFONTSELECTED 
  3246.             This determines if a screen-specific font is selected by the user. 
  3247.             The application should make an approximation of this screen font 
  3248.             when outputting to the screen. This is an output-only flag and is 
  3249.             ignored on input. 
  3250.  
  3251.  
  3252. ΓòÉΓòÉΓòÉ <hidden> HBITMAP ΓòÉΓòÉΓòÉ
  3253.  
  3254. HBITMAP Bit-map handle. 
  3255.  
  3256. typedef LHANDLE HBITMAP;
  3257.  
  3258.  
  3259. ΓòÉΓòÉΓòÉ <hidden> HWND ΓòÉΓòÉΓòÉ
  3260.  
  3261. HWND Window handle. 
  3262.  
  3263. typedef LHANDLE HWND;
  3264.  
  3265.  
  3266. ΓòÉΓòÉΓòÉ <hidden> HFILE ΓòÉΓòÉΓòÉ
  3267.  
  3268. HFILE Resource handle. 
  3269.  
  3270. typedef LHANDLE HFILE;
  3271.  
  3272.  
  3273. ΓòÉΓòÉΓòÉ <hidden> HPOINTER ΓòÉΓòÉΓòÉ
  3274.  
  3275. HPOINTER Pointer handle. 
  3276.  
  3277. typedef LHANDLE HPOINTER;
  3278.  
  3279.  
  3280. ΓòÉΓòÉΓòÉ <hidden> LONG ΓòÉΓòÉΓòÉ
  3281.  
  3282. LONG Signed integer in the range -2 147 483 648 through 2 147 483 647. 
  3283.  
  3284. Note:  Where this data type represents a graphic coordinate in world or model 
  3285.        space, its value is restricted to -134 217 728 through 134 217 727. 
  3286.  
  3287. A graphic coordinate in device or screen coordinates is restricted to -32 768 
  3288. through 32 767. 
  3289.  
  3290. The value of a graphic coordinate may be further restricted by any transforms 
  3291. currently in force, including the positioning of the origin of the window on 
  3292. the screen. In particular, coordinates in world or model space must not 
  3293. generate coordinate values after transformation (that is, in device or screen 
  3294. space) outside the range -32 768 through 32 767. 
  3295.  
  3296.   #define LONG long
  3297.  
  3298.  
  3299. ΓòÉΓòÉΓòÉ <hidden> MINIRECORDCORE ΓòÉΓòÉΓòÉ
  3300.  
  3301. MINIRECORDCORE Structure that contains information for smaller records than 
  3302. those defined by the RECORDCORE data structure. This data structure is used if 
  3303. the CCS_MINIRECORDCORE style bit is specified when a container is created. 
  3304.  
  3305. typedef struct _MINIRECORDCORE {
  3306. ULONG              cb;               /* Structure size  */
  3307. ULONG              flRecordAttr;     /* Attributes of container records  */
  3308. POINTL             ptlIcon;          /* Record position  */
  3309. PMINIRECORDCORE    preccNextRecord;  /* Pointer  */
  3310. PSZ                pszIcon;          /* Record text  */
  3311. HPOINTER           hptrIcon;         /* Record icon  */
  3312.  } MINIRECORDCORE;
  3313.  
  3314.  
  3315. ΓòÉΓòÉΓòÉ <hidden> cb ΓòÉΓòÉΓòÉ
  3316.  
  3317.  cb (ULONG) 
  3318.     Structure size. 
  3319.  
  3320.     The size (in bytes) of the MINIRECORDCORE structure. 
  3321.  
  3322.  
  3323. ΓòÉΓòÉΓòÉ <hidden> flRecordAttr ΓòÉΓòÉΓòÉ
  3324.  
  3325.  flRecordAttr (ULONG) 
  3326.     Attributes of container records. 
  3327.  
  3328.     Contains any or all of the following: 
  3329.     CRA_COLLAPSED 
  3330.             Specifies that a record is collapsed. 
  3331.     CRA_CURSORED 
  3332.             Specifies that a record will be drawn with a selection cursor. 
  3333.     CRA_DROPONABLE 
  3334.             Specifies that a record can be a target for direct manipulation. 
  3335.     CRA_EXPANDED 
  3336.             Specifies that a record is expanded. 
  3337.     CRA_FILTERED 
  3338.             Specifies that a record is filtered, and therefore hidden from 
  3339.             view. 
  3340.     CRA_INUSE 
  3341.             Specifies that a record will be drawn with in-use emphasis. 
  3342.     CRA_RECORDREADONLY 
  3343.             Prevents a record from being edited directly. 
  3344.     CRA_SELECTED 
  3345.             Specifies that a record will be drawn with selected-state emphasis. 
  3346.     CRA_TARGET 
  3347.             Specifies that a record will be drawn with target emphasis. 
  3348.  
  3349.  
  3350. ΓòÉΓòÉΓòÉ <hidden> ptlIcon ΓòÉΓòÉΓòÉ
  3351.  
  3352.  ptlIcon (POINTL) 
  3353.     Record position. 
  3354.  
  3355.     Position of a container record in the icon view. 
  3356.  
  3357.  
  3358. ΓòÉΓòÉΓòÉ <hidden> preccNextRecord ΓòÉΓòÉΓòÉ
  3359.  
  3360.  preccNextRecord (PMINIRECORDCORE) 
  3361.     Pointer. 
  3362.  
  3363.     Pointer to the next linked record. 
  3364.  
  3365.  
  3366. ΓòÉΓòÉΓòÉ <hidden> pszIcon ΓòÉΓòÉΓòÉ
  3367.  
  3368.  pszIcon (PSZ) 
  3369.     Record text. 
  3370.  
  3371.     Text for the container record. 
  3372.  
  3373.  
  3374. ΓòÉΓòÉΓòÉ <hidden> hptrIcon ΓòÉΓòÉΓòÉ
  3375.  
  3376.  hptrIcon (HPOINTER) 
  3377.     Record icon. 
  3378.  
  3379.     Icon that is displayed for the container record. 
  3380.  
  3381.  
  3382. ΓòÉΓòÉΓòÉ <hidden> MLE_SEARCHDATA ΓòÉΓòÉΓòÉ
  3383.  
  3384. MLE_SEARCHDATA Search structure for multiline entry field. 
  3385.  
  3386. typedef struct _SEARCH {
  3387. USHORT    cb;          /* Size of structure  */
  3388. PCHAR     pchFind;     /* Logical string to search for  */
  3389. PCHAR     pchReplace;  /* Logical string to replace with  */
  3390. SHORT     cchFind;     /* Length of pchFind string  */
  3391. SHORT     cchReplace;  /* Length of pchReplace string  */
  3392. IPT       iptStart;    /* Visual point at which to start search, or point where string was found  */
  3393. IPT       iptStop;     /* Visual point at which to stop search  */
  3394. USHORT    cchFound;    /* Length of string found at iptStart  */
  3395.  } MLE_SEARCHDATA;
  3396.  
  3397.  
  3398. ΓòÉΓòÉΓòÉ <hidden> cb ΓòÉΓòÉΓòÉ
  3399.  
  3400.  cb (USHORT) 
  3401.     Size of MLE_SEARCHDATA structure. 
  3402.  
  3403.  
  3404. ΓòÉΓòÉΓòÉ <hidden> pchFind ΓòÉΓòÉΓòÉ
  3405.  
  3406.  pchFind (PCHAR) 
  3407.     Logical string to search for. 
  3408.  
  3409.  
  3410. ΓòÉΓòÉΓòÉ <hidden> pchReplace ΓòÉΓòÉΓòÉ
  3411.  
  3412.  pchReplace (PCHAR) 
  3413.     Logical string to replace with. 
  3414.  
  3415.  
  3416. ΓòÉΓòÉΓòÉ <hidden> cchFind ΓòÉΓòÉΓòÉ
  3417.  
  3418.  cchFind (SHORT) 
  3419.     Length of pchFind string. 
  3420.  
  3421.  
  3422. ΓòÉΓòÉΓòÉ <hidden> cchReplace ΓòÉΓòÉΓòÉ
  3423.  
  3424.  cchReplace (SHORT) 
  3425.     Length of pchReplace string. 
  3426.  
  3427.  
  3428. ΓòÉΓòÉΓòÉ <hidden> iptStart ΓòÉΓòÉΓòÉ
  3429.  
  3430.  iptStart (IPT) 
  3431.     Visual point at which to start search, or point where string was found. 
  3432.     non-negative 
  3433.             Visual point at which to start search. 
  3434.     negative 
  3435.             Start search from current visual cursor location. 
  3436.  
  3437.  
  3438. ΓòÉΓòÉΓòÉ <hidden> iptStop ΓòÉΓòÉΓòÉ
  3439.  
  3440.  iptStop (IPT) 
  3441.     Visual point at which to stop search. 
  3442.     non-negative 
  3443.             Visual point at which to stop search. 
  3444.     negative 
  3445.             Stop search at end of text. 
  3446.  
  3447.  
  3448. ΓòÉΓòÉΓòÉ <hidden> cchFound ΓòÉΓòÉΓòÉ
  3449.  
  3450.  cchFound (USHORT) 
  3451.     Length of string found at iptStart. 
  3452.  
  3453.  
  3454. ΓòÉΓòÉΓòÉ 13.10. PBD_ATTR_MASK ΓòÉΓòÉΓòÉ
  3455.  
  3456. PBD_ATTR_MASK Pointer to a BD_ATTR_MASK data structure. 
  3457.  
  3458. typedef BD_ATTR_MASK *PBD_ATTR_MASK;
  3459.  
  3460.  
  3461. ΓòÉΓòÉΓòÉ <hidden> pBD_Attr_Mask ΓòÉΓòÉΓòÉ
  3462.  
  3463. pBD_Attr_Mask (PBD_ATTR_MASK) pointer. 
  3464.  
  3465. Pointer to the BD_ATTR_MASK data structure. 
  3466.  
  3467.  
  3468. ΓòÉΓòÉΓòÉ <hidden> PCHAR ΓòÉΓòÉΓòÉ
  3469.  
  3470. PCHAR Pointer to CHAR. 
  3471.  
  3472. typedef CHAR *PCHAR;
  3473.  
  3474.  
  3475. ΓòÉΓòÉΓòÉ <hidden> PFIELDINFO ΓòÉΓòÉΓòÉ
  3476.  
  3477. PFIELDINFO Pointer to a FIELDINFO data structure. 
  3478.  
  3479. typedef FIELDINFO *PFIELDINFO;
  3480.  
  3481.  
  3482. ΓòÉΓòÉΓòÉ <hidden> POINTL ΓòÉΓòÉΓòÉ
  3483.  
  3484. POINTL Point structure (long integer). 
  3485.  
  3486. typedef struct _POINTL {
  3487. LONG    x;  /* x-coordinate  */
  3488. LONG    y;  /* y-coordinate  */
  3489.  } POINTL;
  3490.  
  3491.  
  3492. ΓòÉΓòÉΓòÉ <hidden> x ΓòÉΓòÉΓòÉ
  3493.  
  3494.  x (LONG) 
  3495.     x-coordinate. 
  3496.  
  3497.  
  3498. ΓòÉΓòÉΓòÉ <hidden> y ΓòÉΓòÉΓòÉ
  3499.  
  3500.  y (LONG) 
  3501.     y-coordinate. 
  3502.  
  3503.  
  3504. ΓòÉΓòÉΓòÉ <hidden> PSZ ΓòÉΓòÉΓòÉ
  3505.  
  3506. PSZ Pointer to a null-terminated string. 
  3507.  
  3508. typedef char *PSZ;
  3509.  
  3510.  
  3511. ΓòÉΓòÉΓòÉ <hidden> PTREEITEMDESC ΓòÉΓòÉΓòÉ
  3512.  
  3513. PTREEITEMDESC Pointer to a TREEITEMDESC data structure. 
  3514.  
  3515. typedef TREEITEMDESC *PTREEITEMDESC;
  3516.  
  3517.  
  3518. ΓòÉΓòÉΓòÉ <hidden> pFieldInfo ΓòÉΓòÉΓòÉ
  3519.  
  3520.  pFieldInfo (PFIELDINFO) 
  3521.     Pointer. 
  3522.  
  3523.     Pointer to the FIELDINFO structure for the container column that is being 
  3524.     drawn in the details view. For all other views, this field is NULL. 
  3525.  
  3526.  
  3527. ΓòÉΓòÉΓòÉ <hidden> PMINIRECORDCORE ΓòÉΓòÉΓòÉ
  3528.  
  3529. PMINIRECORDCORE Pointer to a MINIRECORDCORE data structure. 
  3530.  
  3531. typedef MINIRECORDCORE *PMINIRECORDCORE;
  3532.  
  3533.  
  3534. ΓòÉΓòÉΓòÉ <hidden> PRECORDCORE ΓòÉΓòÉΓòÉ
  3535.  
  3536. PRECORDCORE Pointer to a RECORDCORE data structure. 
  3537.  
  3538. typedef RECORDCORE *PRECORDCORE;
  3539.  
  3540.  
  3541. ΓòÉΓòÉΓòÉ <hidden> pRecordcore ΓòÉΓòÉΓòÉ
  3542.  
  3543. pRecordcore  (PRECORDCORE) pointer 
  3544.  
  3545. Pointer to the RECORDCORE data structure. 
  3546.  
  3547.  
  3548. ΓòÉΓòÉΓòÉ <hidden> PUCHAR ΓòÉΓòÉΓòÉ
  3549.  
  3550. PUCHAR Pointer to UCHAR. 
  3551.  
  3552. typedef UCHAR *PUCHAR;
  3553.  
  3554.  
  3555. ΓòÉΓòÉΓòÉ <hidden> pulAttr ΓòÉΓòÉΓòÉ
  3556.  
  3557. pulAttr Pointer to a BIDIATTR data structure. 
  3558.  
  3559.  
  3560. ΓòÉΓòÉΓòÉ <hidden> PULONG ΓòÉΓòÉΓòÉ
  3561.  
  3562. PULONG Pointer to ULONG. 
  3563.  
  3564. typedef ULONG *PULONG;
  3565.  
  3566.  
  3567. ΓòÉΓòÉΓòÉ <hidden> PVOID ΓòÉΓòÉΓòÉ
  3568.  
  3569. PVOID Pointer to a data type of undefined format. 
  3570.  
  3571. typedef VOID *PVOID;
  3572.  
  3573.  
  3574. ΓòÉΓòÉΓòÉ <hidden> RECORDCORE ΓòÉΓòÉΓòÉ
  3575.  
  3576. RECORDCORE Structure that contains information for records in a container 
  3577. control. This data structure is used if the CCS_MINIRECORDCORE style bit is not 
  3578. specified when a container is created. 
  3579.  
  3580. typedef struct _RECORDCORE {
  3581. ULONG            cb;               /* Structure size  */
  3582. ULONG            flRecordAttr;     /* Record attributes  */
  3583. POINTL           ptlIcon;          /* Record position  */
  3584. PRECORDCORE      preccNextRecord;  /* Pointer  */
  3585. PSZ              pszIcon;          /* Text  */
  3586. HPOINTER         hptrIcon;         /* Icon  */
  3587. HPOINTER         hptrMiniIcon;     /* Mini-icon  */
  3588. HBITMAP          hbmBitmap;        /* Bit map  */
  3589. HBITMAP          hbmMiniBitmap;    /* Mini-bit map  */
  3590. PTREEITEMDESC    pTreeItemDesc;    /* Pointer  */
  3591. PSZ              pszText;          /* Text view text  */
  3592. PSZ              pszName;          /* Name view text  */
  3593. PSZ              pszTree;          /* Tree view text  */
  3594.  } RECORDCORE;
  3595.  
  3596.  
  3597. ΓòÉΓòÉΓòÉ <hidden> cb ΓòÉΓòÉΓòÉ
  3598.  
  3599.  cb (ULONG) 
  3600.     Structure size. 
  3601.  
  3602.     The size (in bytes) of the RECORDCORE structure. 
  3603.  
  3604.  
  3605. ΓòÉΓòÉΓòÉ <hidden> flRecordAttr ΓòÉΓòÉΓòÉ
  3606.  
  3607.  flRecordAttr (ULONG) 
  3608.     Record attributes. 
  3609.  
  3610.     Attributes of container records. Contains any or all of the following: 
  3611.     CRA_COLLAPSED 
  3612.             Specifies that a record is collapsed. 
  3613.     CRA_CURSORED 
  3614.             Specifies that a record will be drawn with a selection cursor. 
  3615.     CRA_DROPONABLE 
  3616.             Specifies that a record can be a target for direct manipulation. 
  3617.     CRA_EXPANDED 
  3618.             Specifies that a record is expanded. 
  3619.     CRA_FILTERED 
  3620.             Specifies that a record is filtered, and therefore hidden from 
  3621.             view. 
  3622.     CRA_INUSE 
  3623.             Specifies that a record will be drawn with in-use emphasis. 
  3624.     CRA_RECORDREADONLY 
  3625.             Prevents a record from being edited directly. 
  3626.     CRA_SELECTED 
  3627.             Specifies that a record will be drawn with selected-state emphasis. 
  3628.     CRA_TARGET 
  3629.             Specifies that a record will be drawn with target emphasis. 
  3630.  
  3631.  
  3632. ΓòÉΓòÉΓòÉ <hidden> ptlIcon ΓòÉΓòÉΓòÉ
  3633.  
  3634.  ptlIcon (POINTL) 
  3635.     Record position. 
  3636.  
  3637.     Position of a container record in the icon view. 
  3638.  
  3639.  
  3640. ΓòÉΓòÉΓòÉ <hidden> preccNextRecord ΓòÉΓòÉΓòÉ
  3641.  
  3642.  preccNextRecord (PRECORDCORE) 
  3643.     Pointer. 
  3644.  
  3645.     Pointer to the next linked record. 
  3646.  
  3647.  
  3648. ΓòÉΓòÉΓòÉ <hidden> pszIcon ΓòÉΓòÉΓòÉ
  3649.  
  3650.  pszIcon (PSZ) 
  3651.     Text. 
  3652.  
  3653.     Text for the icon view (CV_ICON). 
  3654.  
  3655.  
  3656. ΓòÉΓòÉΓòÉ <hidden> hptrIcon ΓòÉΓòÉΓòÉ
  3657.  
  3658.  hptrIcon (HPOINTER) 
  3659.     Icon. 
  3660.  
  3661.     Icon that is displayed when the CV_MINI style bit is not specified. This 
  3662.     field is used when the CA_DRAWICON container attribute of the CNRINFO data 
  3663.     structure is set. 
  3664.  
  3665.  
  3666. ΓòÉΓòÉΓòÉ <hidden> hptrMiniIcon ΓòÉΓòÉΓòÉ
  3667.  
  3668.  hptrMiniIcon (HPOINTER) 
  3669.     Mini-icon. 
  3670.  
  3671.     Icon that is displayed when the CV_MINI style bit is specified. This field 
  3672.     is used when the CA_DRAWICON container attribute of the CNRINFO data 
  3673.     structure is set. 
  3674.  
  3675.  
  3676. ΓòÉΓòÉΓòÉ <hidden> hbmBitmap ΓòÉΓòÉΓòÉ
  3677.  
  3678.  hbmBitmap (HBITMAP) 
  3679.     Bit map. 
  3680.  
  3681.     Bit map that is displayed when the CV_MINI style bit is not specified. This 
  3682.     field is used when the CA_DRAWBITMAP container attribute of the CNRINFO 
  3683.     data structure is set. 
  3684.  
  3685.  
  3686. ΓòÉΓòÉΓòÉ <hidden> hbmMiniBitmap ΓòÉΓòÉΓòÉ
  3687.  
  3688.  hbmMiniBitmap (HBITMAP) 
  3689.     Mini-bit map. 
  3690.  
  3691.     Bit map that is displayed when the CV_MINI style bit is specified. This 
  3692.     field is used when the CA_DRAWBITMAP container attribute of the CNRINFO 
  3693.     data structure is set. 
  3694.  
  3695.  
  3696. ΓòÉΓòÉΓòÉ <hidden> pTreeItemDesc ΓòÉΓòÉΓòÉ
  3697.  
  3698.  pTreeItemDesc (PTREEITEMDESC) 
  3699.     Pointer. 
  3700.  
  3701.     Pointer to a TREEITEMDESC structure, which contains the icons and bit maps 
  3702.     used to represent the state of an expanded or collapsed parent item in the 
  3703.     tree name view. 
  3704.  
  3705.  
  3706. ΓòÉΓòÉΓòÉ <hidden> pszText ΓòÉΓòÉΓòÉ
  3707.  
  3708.  pszText (PSZ) 
  3709.     Text view text. 
  3710.  
  3711.     Text for the text view (CV_TEXT). 
  3712.  
  3713.  
  3714. ΓòÉΓòÉΓòÉ <hidden> pszName ΓòÉΓòÉΓòÉ
  3715.  
  3716.  pszName (PSZ) 
  3717.     Name view text. 
  3718.  
  3719.     Text for the name view (CV_NAME). 
  3720.  
  3721.  
  3722. ΓòÉΓòÉΓòÉ <hidden> pszTree ΓòÉΓòÉΓòÉ
  3723.  
  3724.  pszTree (PSZ) 
  3725.     Tree view text. 
  3726.  
  3727.     Text for the tree view (CV_TREE). 
  3728.  
  3729.  
  3730. ΓòÉΓòÉΓòÉ <hidden> SIZEL ΓòÉΓòÉΓòÉ
  3731.  
  3732. SIZEL Size structure. 
  3733.  
  3734. typedef struct _SIZEL {
  3735. LONG    cx;  /* Width  */
  3736. LONG    cy;  /* Height  */
  3737.  } SIZEL;
  3738.  
  3739.  
  3740. ΓòÉΓòÉΓòÉ <hidden> cx ΓòÉΓòÉΓòÉ
  3741.  
  3742.  cx (LONG) 
  3743.     Width. 
  3744.  
  3745.  
  3746. ΓòÉΓòÉΓòÉ <hidden> cy ΓòÉΓòÉΓòÉ
  3747.  
  3748.  cy (LONG) 
  3749.     Height. 
  3750.  
  3751.  
  3752. ΓòÉΓòÉΓòÉ <hidden> TREEITEMDESC ΓòÉΓòÉΓòÉ
  3753.  
  3754. TREEITEMDESC Structure that contains icons and bit maps used to represent the 
  3755. state of an expanded or collapsed parent item in the tree name view of a 
  3756. container control. 
  3757.  
  3758. typedef struct _TREEITEMDESC {
  3759. HBITMAP     hbmExpanded;    /* Expanded bit-map handle  */
  3760. HBITMAP     hbmCollapsed;   /* Collapsed bit-map handle  */
  3761. HPOINTER    hptrExpanded;   /* Expanded icon handle  */
  3762. HPOINTER    hptrCollapsed;  /* Collapsed icon handle  */
  3763.  } TREEITEMDESC;
  3764.  
  3765.  
  3766. ΓòÉΓòÉΓòÉ <hidden> HAB ΓòÉΓòÉΓòÉ
  3767.  
  3768. HAB Anchor-block handle. 
  3769.  
  3770. typedef LHANDLE HAB;
  3771.  
  3772.  
  3773. ΓòÉΓòÉΓòÉ <hidden> hbmExpanded ΓòÉΓòÉΓòÉ
  3774.  
  3775.  hbmExpanded (HBITMAP) 
  3776.     Expanded bit-map handle. 
  3777.  
  3778.     The handle of the bit map to be used to represent an expanded parent item 
  3779.     in the tree name view. 
  3780.  
  3781.  
  3782. ΓòÉΓòÉΓòÉ <hidden> hbmCollapsed ΓòÉΓòÉΓòÉ
  3783.  
  3784.  hbmCollapsed (HBITMAP) 
  3785.     Collapsed bit-map handle. 
  3786.  
  3787.     The handle of the bit map to be used to represent a collapsed parent item 
  3788.     in the tree name view. 
  3789.  
  3790.  
  3791. ΓòÉΓòÉΓòÉ <hidden> hptrExpanded ΓòÉΓòÉΓòÉ
  3792.  
  3793.  hptrExpanded (HPOINTER) 
  3794.     Expanded icon handle. 
  3795.  
  3796.     The handle of the icon to be used to represent an expanded parent item in 
  3797.     the tree name view. 
  3798.  
  3799.  
  3800. ΓòÉΓòÉΓòÉ <hidden> hptrCollapsed ΓòÉΓòÉΓòÉ
  3801.  
  3802.  hptrCollapsed (HPOINTER) 
  3803.     Collapsed icon handle. 
  3804.  
  3805.     The handle of the icon to be used to represent a collapsed parent item in 
  3806.     the tree name view. 
  3807.  
  3808.  
  3809. ΓòÉΓòÉΓòÉ <hidden> HWND ΓòÉΓòÉΓòÉ
  3810.  
  3811. HWND Window handle. 
  3812.  
  3813. typedef LHANDLE HWND;
  3814.  
  3815.  
  3816. ΓòÉΓòÉΓòÉ <hidden> UCHAR ΓòÉΓòÉΓòÉ
  3817.  
  3818. UCHAR Unsigned integer in the range 0 through 255. 
  3819.  
  3820. typedef unsigned char UCHAR;
  3821.  
  3822.  
  3823. ΓòÉΓòÉΓòÉ <hidden> ulData ΓòÉΓòÉΓòÉ
  3824.  
  3825.  ulData (ULONG) 
  3826.  
  3827.     User-defined value. 
  3828.  
  3829.  
  3830. ΓòÉΓòÉΓòÉ <hidden> ULONG ΓòÉΓòÉΓòÉ
  3831.  
  3832. ULONG Unsigned integer in the range 0 through 4 294 967 295. 
  3833.  
  3834. typedef unsigned long ULONG;
  3835.  
  3836.  
  3837. ΓòÉΓòÉΓòÉ <hidden> ulNotify ΓòÉΓòÉΓòÉ
  3838.  
  3839.  The following is a list of possible values for these events: 
  3840.  
  3841. LVI_WND_ATTR       - Window Bidi attributes changed.
  3842. LVI_WND_STAT       - Window Bidi status changed.
  3843. LVI_FOCUS_CHANGED  - The focus window has changed.
  3844. LVI_KBD_LAYER      - The system keyboard layer has changed.
  3845. LVI_ALL            - All information in the viewer must be updated.
  3846. LVI_HIDE           - This value is used when the system notifies the
  3847.                      viewer to hide itself (such as when another viewer
  3848.                      is the active one).
  3849.  
  3850.  
  3851. ΓòÉΓòÉΓòÉ <hidden> ulPageId ΓòÉΓòÉΓòÉ
  3852.  
  3853.  ulPageId (ULONG) 
  3854.     Page identifier. 
  3855.  
  3856.     Page identifier used for placement of the inserted page. 
  3857.  
  3858.  
  3859. ΓòÉΓòÉΓòÉ <hidden> ulPageId ΓòÉΓòÉΓòÉ
  3860.  
  3861.  ulPageId (ULONG) 
  3862.     Page id 
  3863.  
  3864.     Page identifier of the page whose tab text is requested. 
  3865.  
  3866.  
  3867. ΓòÉΓòÉΓòÉ <hidden> ulPageId ΓòÉΓòÉΓòÉ
  3868.  
  3869.  ulPageId (ULONG) 
  3870.     Page id 
  3871.  
  3872.     Page identifier of the page whose Status line text is requested. 
  3873.  
  3874.  
  3875. ΓòÉΓòÉΓòÉ <hidden> USHORT ΓòÉΓòÉΓòÉ
  3876.  
  3877. USHORT Unsigned integer in the range 0 through 65 535. 
  3878.  
  3879. typedef unsigned short USHORT;
  3880.  
  3881.  
  3882. ΓòÉΓòÉΓòÉ <hidden> CM_SHORTRECORD ΓòÉΓòÉΓòÉ
  3883.  
  3884. PLEASE REFER TO THE PM REFERNCE. 
  3885.  
  3886.  
  3887. ΓòÉΓòÉΓòÉ <hidden> WM_PRESPARAMCHANGED ΓòÉΓòÉΓòÉ
  3888.  
  3889. PLEASE REFER TO THE PM REFERNCE. 
  3890.  
  3891.  
  3892. ΓòÉΓòÉΓòÉ <hidden> CM_PAINTBACKGROUND ΓòÉΓòÉΓòÉ
  3893.  
  3894. PLEASE REFER TO THE PM REFERNCE. 
  3895.  
  3896.  
  3897. ΓòÉΓòÉΓòÉ <hidden> WinGetLastError ΓòÉΓòÉΓòÉ
  3898.  
  3899. PLEASE REFER TO THE PM REFERNCE. 
  3900.  
  3901.  
  3902. ΓòÉΓòÉΓòÉ <hidden> ERROR_INVALID_LENGTH ΓòÉΓòÉΓòÉ
  3903.  
  3904. PLEASE REFER TO THE PM REFERNCE. 
  3905.  
  3906.  
  3907. ΓòÉΓòÉΓòÉ <hidden> BIDI_STAT_VALUES ΓòÉΓòÉΓòÉ
  3908.  
  3909. Possible value for Bidi Status :
  3910.  
  3911. #define BDS_HKFLAG_ENG_LAYER            0x00010000UL
  3912. #define BDS_HKFLAG_NAT_LAYER            0x00020000UL
  3913. #define BDS_HKFLAG_PUSH                 0x00040000UL
  3914. #define BDS_HKFLAG_END_PUSH             0x00080000UL
  3915. #define BDS_HKFLAG_AUTO_PUSH            0x00100000UL
  3916. #define BDS_HKFLAG_FIELD_REV            0x00200000UL
  3917. #define BDS_HKFLAG_SCREEN_REV           0x00400000UL
  3918. #define BDS_HKFLAG_BIDI_POPUP           0x02000000UL
  3919. #define BDS_HKFLAG_AUTOMATIC            0x04000000UL
  3920. #define BDS_HKFLAG_INITIAL              0x08000000UL
  3921. #define BDS_HKFLAG_MIDDLE               0x10000000UL
  3922. #define BDS_HKFLAG_FINAL                0x20000000UL
  3923. #define BDS_HKFLAG_ISOLATED             0x40000000UL
  3924.  
  3925. #define BDS_FAUTOPUSH_RTL_ON            0x00000001UL
  3926. #define BDS_FAUTOPUSH_LTR_ON            0x00000002UL
  3927. #define BDS_FPUSH_ON                    0x00000004UL
  3928. #define BDS_FKBD_LAYER_IS_NL            0x00000010UL
  3929.  
  3930.  
  3931. ΓòÉΓòÉΓòÉ <hidden> LI_BD_CLIP_ATTR ΓòÉΓòÉΓòÉ
  3932.  
  3933.  When ulEffect is set to LI_BD_CLIP_ATTR the ulMask value is ignored and ulData 
  3934. may be set to the following attributes that describe the text in the clipboard: 
  3935.  
  3936.      uldata 
  3937.  
  3938.              #define BDA_LEVEL                   0x30000000UL
  3939.              #define BDA_INIT                    0x80000000UL
  3940.  
  3941.              #define BDA_DATATYPE_VISUAL        0x00000000UL
  3942.              #define BDA_DATATYPE_IMPLICIT      0x01000000UL
  3943.  
  3944.              #define BDA_TEXT_ORIENT_LTR        0x00000000UL
  3945.              #define BDA_TEXT_ORIENT_RTL        0x00010000UL
  3946.              #define BDA_TEXT_ORIENT_CONTEXT    0x00020000UL
  3947.  
  3948.              #define BDA_WND_ORIENT_LTR         0x00000000UL
  3949.              #define BDA_WND_ORIENT_RTL         0x00100000UL
  3950.  
  3951.              #define BDA_NUMERALS_ARABIC        0x00000000UL
  3952.              #define BDA_NUMERALS_WESTERN       0x00000000UL
  3953.              #define BDA_NUMERALS_PASSTHRU      0x00001000UL
  3954.              #define BDA_NUMERALS_HINDI         0x00002000UL
  3955.              #define BDA_NUMERALS_CONTEXT       0x00003000UL
  3956.  
  3957.              #define BDA_WORDBREAK_OFF          0x00000000UL
  3958.              #define BDA_WORDBREAK_ON           0x00000200UL
  3959.              #define BDA_SYM_SWAP_OFF           0x00000000UL
  3960.              #define BDA_SYM_SWAP_ON            0x00000100UL
  3961.  
  3962.              #define BDA_CSD_ON                 0x00000000UL
  3963.              #define BDA_CSD_PASSTHRU           0x00000001UL
  3964.              #define BDA_CSD_BASE               0x00000010UL
  3965.              #define BDA_CSD_INITIAL            0x00000011UL
  3966.              #define BDA_CSD_MIDDLE             0x00000012UL
  3967.              #define BDA_CSD_FINAL              0x00000013UL
  3968.              #define BDA_CSD_ISOLATED           0x00000014UL
  3969.  
  3970.  
  3971. ΓòÉΓòÉΓòÉ <hidden> LI_BD_CLIP_CONV_ATTR ΓòÉΓòÉΓòÉ
  3972.  
  3973. When ulEffect is set to LI_BD_CLIP_CONV_ATTR the ulMask value is ignored and 
  3974. ulData may be set to the following attributes of the window that queries text 
  3975. data from the clipboard: 
  3976.  
  3977.      uldata 
  3978.  
  3979.              #define BDA_LEVEL                   0x30000000UL
  3980.              #define BDA_INIT                    0x80000000UL
  3981.  
  3982.              #define BDA_DATATYPE_VISUAL        0x00000000UL
  3983.              #define BDA_DATATYPE_IMPLICIT      0x01000000UL
  3984.  
  3985.              #define BDA_TEXT_ORIENT_LTR        0x00000000UL
  3986.              #define BDA_TEXT_ORIENT_RTL        0x00010000UL
  3987.              #define BDA_TEXT_ORIENT_CONTEXT    0x00020000UL
  3988.  
  3989.              #define BDA_WND_ORIENT_LTR         0x00000000UL
  3990.              #define BDA_WND_ORIENT_RTL         0x00100000UL
  3991.  
  3992.              #define BDA_NUMERALS_ARABIC        0x00000000UL
  3993.              #define BDA_NUMERALS_WESTERN       0x00000000UL
  3994.              #define BDA_NUMERALS_PASSTHRU      0x00001000UL
  3995.              #define BDA_NUMERALS_HINDI         0x00002000UL
  3996.              #define BDA_NUMERALS_CONTEXT       0x00003000UL
  3997.  
  3998.              #define BDA_WORDBREAK_OFF          0x00000000UL
  3999.              #define BDA_WORDBREAK_ON           0x00000200UL
  4000.              #define BDA_SYM_SWAP_OFF           0x00000000UL
  4001.              #define BDA_SYM_SWAP_ON            0x00000100UL
  4002.  
  4003.              #define BDA_CSD_ON                 0x00000000UL
  4004.              #define BDA_CSD_PASSTHRU           0x00000001UL
  4005.              #define BDA_CSD_BASE               0x00000010UL
  4006.              #define BDA_CSD_INITIAL            0x00000011UL
  4007.              #define BDA_CSD_MIDDLE             0x00000012UL
  4008.              #define BDA_CSD_FINAL              0x00000013UL
  4009.              #define BDA_CSD_ISOLATED           0x00000014UL
  4010.  
  4011.  
  4012. ΓòÉΓòÉΓòÉ <hidden> LI_BD_PROCESS_ATTR ΓòÉΓòÉΓòÉ
  4013.  
  4014. When ulEffect is set to LI_BD_PROCESS_ATTR the ulMask value is ignored and 
  4015. ulData may be set to the following process attributes: 
  4016.  
  4017.      uldata 
  4018.  
  4019.              #define BDA_LEVEL                   0x30000000UL
  4020.              #define BDA_INIT                    0x80000000UL
  4021.  
  4022.              #define BDA_DATATYPE_VISUAL        0x00000000UL
  4023.              #define BDA_DATATYPE_IMPLICIT      0x01000000UL
  4024.  
  4025.              #define BDA_TEXT_ORIENT_LTR        0x00000000UL
  4026.              #define BDA_TEXT_ORIENT_RTL        0x00010000UL
  4027.              #define BDA_TEXT_ORIENT_CONTEXT    0x00020000UL
  4028.  
  4029.              #define BDA_WND_ORIENT_LTR         0x00000000UL
  4030.              #define BDA_WND_ORIENT_RTL         0x00100000UL
  4031.  
  4032.              #define BDA_NUMERALS_ARABIC        0x00000000UL
  4033.              #define BDA_NUMERALS_WESTERN       0x00000000UL
  4034.              #define BDA_NUMERALS_PASSTHRU      0x00001000UL
  4035.              #define BDA_NUMERALS_HINDI         0x00002000UL
  4036.              #define BDA_NUMERALS_CONTEXT       0x00003000UL
  4037.  
  4038.              #define BDA_WORDBREAK_OFF          0x00000000UL
  4039.              #define BDA_WORDBREAK_ON           0x00000200UL
  4040.              #define BDA_SYM_SWAP_OFF           0x00000000UL
  4041.              #define BDA_SYM_SWAP_ON            0x00000100UL
  4042.  
  4043.              #define BDA_CSD_ON                 0x00000000UL
  4044.              #define BDA_CSD_PASSTHRU           0x00000001UL
  4045.              #define BDA_CSD_BASE               0x00000010UL
  4046.              #define BDA_CSD_INITIAL            0x00000011UL
  4047.              #define BDA_CSD_MIDDLE             0x00000012UL
  4048.              #define BDA_CSD_FINAL              0x00000013UL
  4049.              #define BDA_CSD_ISOLATED           0x00000014UL
  4050.  
  4051.  
  4052. ΓòÉΓòÉΓòÉ <hidden> LI_BD_PROCESS_STAT ΓòÉΓòÉΓòÉ
  4053.  
  4054. When ulEffect is set to LI_BD_PROCESS_STAT the ulMask value is ignored and 
  4055. ulData may be set to the following process status: 
  4056.  
  4057.      uldata 
  4058.  
  4059.  
  4060.             #define BDS_HKFLAG_ENG_LAYER            0x00010000UL
  4061.             #define BDS_HKFLAG_NAT_LAYER            0x00020000UL
  4062.             #define BDS_HKFLAG_PUSH                 0x00040000UL
  4063.             #define BDS_HKFLAG_END_PUSH             0x00080000UL
  4064.             #define BDS_HKFLAG_AUTO_PUSH            0x00100000UL
  4065.             #define BDS_HKFLAG_FIELD_REV            0x00200000UL
  4066.             #define BDS_HKFLAG_SCREEN_REV           0x00400000UL
  4067.             #define BDS_HKFLAG_BIDI_POPUP           0x02000000UL
  4068.             #define BDS_HKFLAG_AUTOMATIC            0x04000000UL
  4069.             #define BDS_HKFLAG_INITIAL              0x08000000UL
  4070.             #define BDS_HKFLAG_MIDDLE               0x10000000UL
  4071.             #define BDS_HKFLAG_FINAL                0x20000000UL
  4072.             #define BDS_HKFLAG_ISOLATED             0x40000000UL
  4073.  
  4074.             #define BDS_FAUTOPUSH_RTL_ON            0x00000001UL
  4075.             #define BDS_FAUTOPUSH_LTR_ON            0x00000002UL
  4076.             #define BDS_FPUSH_ON                    0x00000004UL
  4077.             #define BDS_FKBD_LAYER_IS_NL            0x00000010UL
  4078.  
  4079.  
  4080. ΓòÉΓòÉΓòÉ <hidden> LI_BD_WND_ATTR ΓòÉΓòÉΓòÉ
  4081.  
  4082.  When ulEffect is set to BD_WND_ATTR the possible values of uldata and ulMask 
  4083. are  set to the following: 
  4084.  
  4085.      uldata 
  4086.  
  4087.              #define BDA_LEVEL                   0x30000000UL
  4088.              #define BDA_INIT                    0x80000000UL
  4089.  
  4090.              #define BDA_DATATYPE_VISUAL        0x00000000UL
  4091.              #define BDA_DATATYPE_IMPLICIT      0x01000000UL
  4092.  
  4093.              #define BDA_TEXT_ORIENT_LTR        0x00000000UL
  4094.              #define BDA_TEXT_ORIENT_RTL        0x00010000UL
  4095.              #define BDA_TEXT_ORIENT_CONTEXT    0x00020000UL
  4096.  
  4097.              #define BDA_WND_ORIENT_LTR         0x00000000UL
  4098.              #define BDA_WND_ORIENT_RTL         0x00100000UL
  4099.  
  4100.              #define BDA_NUMERALS_ARABIC        0x00000000UL
  4101.              #define BDA_NUMERALS_WESTERN       0x00000000UL
  4102.              #define BDA_NUMERALS_PASSTHRU      0x00001000UL
  4103.              #define BDA_NUMERALS_HINDI         0x00002000UL
  4104.              #define BDA_NUMERALS_CONTEXT       0x00003000UL
  4105.  
  4106.              #define BDA_WORDBREAK_OFF          0x00000000UL
  4107.              #define BDA_WORDBREAK_ON           0x00000200UL
  4108.              #define BDA_SYM_SWAP_OFF           0x00000000UL
  4109.              #define BDA_SYM_SWAP_ON            0x00000100UL
  4110.  
  4111.              #define BDA_CSD_ON                 0x00000000UL
  4112.              #define BDA_CSD_PASSTHRU           0x00000001UL
  4113.              #define BDA_CSD_BASE               0x00000010UL
  4114.              #define BDA_CSD_INITIAL            0x00000011UL
  4115.              #define BDA_CSD_MIDDLE             0x00000012UL
  4116.              #define BDA_CSD_FINAL              0x00000013UL
  4117.              #define BDA_CSD_ISOLATED           0x00000014UL
  4118.  
  4119.      ulmask 
  4120.  
  4121.             #define BDAM_INIT               0x80000000UL
  4122.             #define BDAM_DATATYPE           0x01000000UL
  4123.             #define BDAM_TEXT_ORIENTATION   0x00030000UL
  4124.             #define BDAM_WND_ORIENTATION    0x00100000UL
  4125.             #define BDAM_NUMERALS           0x00003000UL
  4126.             #define BDAM_SYM_SWAP           0x00000100UL
  4127.             #define BDAM_CSD                0x000000FFUL
  4128.  
  4129.             #define BDAM_ALL               (BDAM_DATATYPE         |
  4130.                                             BDAM_TEXT_ORIENTATION |
  4131.                                             BDAM_WND_ORIENTATION  |
  4132.                                             BDAM_NUMERALS         |
  4133.                                             BDAM_SYM_SWAP         |
  4134.                                             BDAM_CSD               )
  4135.  
  4136.  
  4137. ΓòÉΓòÉΓòÉ <hidden> LI_BD_WND_STAT ΓòÉΓòÉΓòÉ
  4138.  
  4139.  When ulEffect is set to LI_BD_WND_STAT the possible values of uldata and 
  4140. ulMask are  set to the following: 
  4141.  
  4142.      uldata 
  4143.  
  4144.  
  4145.             #define BDS_HKFLAG_ENG_LAYER            0x00010000UL
  4146.             #define BDS_HKFLAG_NAT_LAYER            0x00020000UL
  4147.             #define BDS_HKFLAG_PUSH                 0x00040000UL
  4148.             #define BDS_HKFLAG_END_PUSH             0x00080000UL
  4149.             #define BDS_HKFLAG_AUTO_PUSH            0x00100000UL
  4150.             #define BDS_HKFLAG_FIELD_REV            0x00200000UL
  4151.             #define BDS_HKFLAG_SCREEN_REV           0x00400000UL
  4152.             #define BDS_HKFLAG_BIDI_POPUP           0x02000000UL
  4153.             #define BDS_HKFLAG_AUTOMATIC            0x04000000UL
  4154.             #define BDS_HKFLAG_INITIAL              0x08000000UL
  4155.             #define BDS_HKFLAG_MIDDLE               0x10000000UL
  4156.             #define BDS_HKFLAG_FINAL                0x20000000UL
  4157.             #define BDS_HKFLAG_ISOLATED             0x40000000UL
  4158.  
  4159.             #define BDS_FAUTOPUSH_RTL_ON            0x00000001UL
  4160.             #define BDS_FAUTOPUSH_LTR_ON            0x00000002UL
  4161.             #define BDS_FPUSH_ON                    0x00000004UL
  4162.             #define BDS_FKBD_LAYER_IS_NL            0x00000010UL
  4163.  
  4164.      ulMask 
  4165.  
  4166.             #define BDSM_HKFLAGS                    0x7E7F0000UL
  4167.  
  4168.             #define BDSM_AUTOPUSH_RTL               0x00000001UL
  4169.             #define BDSM_AUTOPUSH_LTR               0x00000002UL
  4170.             #define BDSM_PUSH_ON                    0x00000004UL
  4171.             #define BDSM_KBD_LAYER                  0x00000010UL
  4172.  
  4173.             #define BDSM_ALL                        0x7E7F0017UL
  4174.  
  4175.  
  4176. ΓòÉΓòÉΓòÉ <hidden> ulMask ΓòÉΓòÉΓòÉ
  4177.  
  4178.  ulMask (ULONG) 
  4179.  
  4180.     Contains one of the following Bidi attribute mask values: 
  4181.  
  4182.         #define BDAM_DATATYPE           0x01000000UL
  4183.         #define BDAM_TEXT_ORIENTATION   0x00030000UL
  4184.         #define BDAM_WND_ORIENTATION    0x00100000UL
  4185.         #define BDAM_NUMERALS           0x00003000UL
  4186.         #define BDAM_SYM_SWAP           0x00000100UL
  4187.         #define BDAM_CSD                0x000000FFUL
  4188.  
  4189.         #define BDAM_ALL               (BDAM_DATATYPE         |
  4190.                                         BDAM_TEXT_ORIENTATION |
  4191.                                         BDAM_WND_ORIENTATION  |
  4192.                                         BDAM_NUMERALS         |
  4193.                                         BDAM_SYM_SWAP         |
  4194.                                         BDAM_CSD               )
  4195.  
  4196.  
  4197. ΓòÉΓòÉΓòÉ <hidden> ulMask ΓòÉΓòÉΓòÉ
  4198.  
  4199.  ulMask (ULONG) 
  4200.  
  4201.     Contains one of the following Bidi status mask values: 
  4202.  
  4203.         #define BDSM_HKFLAGS                    0x7E7F0000UL
  4204.  
  4205.         #define BDSM_AUTOPUSH_RTL               0x00000001UL
  4206.         #define BDSM_AUTOPUSH_LTR               0x00000002UL
  4207.         #define BDSM_PUSH_ON                    0x00000004UL
  4208.         #define BDSM_KBD_LAYER                  0x00000010UL
  4209.  
  4210.         #define BDSM_ALL                        0x7E7F0017UL
  4211.  
  4212.  
  4213. ΓòÉΓòÉΓòÉ <hidden> BIDIFLAGS ΓòÉΓòÉΓòÉ
  4214.  
  4215.  ulFlags (ULONG) 
  4216.  
  4217.     Contains one of the following flag values: 
  4218.  
  4219.         #define LIF_NO_SENDMSG        0x00000001UL
  4220.         #define LIF_CHILD_INHERIT     0x00000002UL
  4221.         #define LIF_WND_REFRESH       0x00000004UL
  4222.  
  4223.  
  4224. ΓòÉΓòÉΓòÉ <hidden> BIDIFLAGS ΓòÉΓòÉΓòÉ
  4225.  
  4226.  ulFlags (ULONG) 
  4227.  
  4228.     Contains one of the following flag values: 
  4229.  OL 
  4230.     When this is specified the function sends (internally) a WM_QUERYBIDIATTR 
  4231.     (or WM_QUERYBIDISTAT) message to the return value procedure. If the return 
  4232.     value of the message is other than zero this is the value Returned. 
  4233.  LIF_NO_SENDMSG 
  4234.     When this value is specified, the WinQueryBidiInfo function, does not send 
  4235.     a WM_QUERYBIDIATTR (or WM_QUERYBIDISTAT) message to the window procedure of 
  4236.     hwnd. Instead, it returns the Bidi attributes/status as it is stored in the 
  4237.     window internal strucrure. 
  4238.  
  4239.  
  4240. ΓòÉΓòÉΓòÉ <hidden> ulBD_ATTR ΓòÉΓòÉΓòÉ
  4241.  
  4242. ulBD_ATTR can take any of the values in the BIDIATTR. 
  4243.  
  4244.  
  4245. ΓòÉΓòÉΓòÉ <hidden> ulBD_STAT ΓòÉΓòÉΓòÉ
  4246.  
  4247. ulBD_STAT can take any of the values in the BIDI_STAT. 
  4248.  
  4249.  
  4250. ΓòÉΓòÉΓòÉ <hidden> ulBD_Mask ΓòÉΓòÉΓòÉ
  4251.  
  4252. ulBD_Mask can take any of the following values When used in the 
  4253. WM_LANGVIEWINFOCHANGED message. 
  4254.  
  4255. #define BDAM_DATATYPE           0x01000000UL
  4256. #define BDAM_TEXT_ORIENTATION   0x00030000UL
  4257. #define BDAM_WND_ORIENTATION    0x00100000UL
  4258. #define BDAM_NUMERALS           0x00003000UL
  4259. #define BDAM_SYM_SWAP           0x00000100UL
  4260. #define BDAM_CSD                0x000000FFUL
  4261.  
  4262. #define BDAM_ALL               (BDAM_DATATYPE         |
  4263.                                 BDAM_TEXT_ORIENTATION |
  4264.                                 BDAM_WND_ORIENTATION  |
  4265.                                 BDAM_NUMERALS         |
  4266.                                 BDAM_SYM_SWAP         |
  4267.                                 BDAM_CSD               )
  4268.  
  4269.  
  4270. ΓòÉΓòÉΓòÉ <hidden> usColumn ΓòÉΓòÉΓòÉ
  4271.  
  4272. usColumn (USHORT) 
  4273.  
  4274. Column index 
  4275.  
  4276. The index of the column over which the direct manipulation action occurred. 
  4277.  
  4278.  
  4279. ΓòÉΓòÉΓòÉ <hidden> usRow ΓòÉΓòÉΓòÉ
  4280.  
  4281. usRow (USHORT) 
  4282.  
  4283. Row index 
  4284.  
  4285. The index of the row over which the direct manipulation action occurred. 
  4286.  
  4287.  
  4288. ΓòÉΓòÉΓòÉ <hidden> ulData ΓòÉΓòÉΓòÉ
  4289.  
  4290.  ulData (ULONG) 
  4291.  
  4292.     Contains one of the values inBIDIATTR. 
  4293.  
  4294.  
  4295. ΓòÉΓòÉΓòÉ <hidden> ulData ΓòÉΓòÉΓòÉ
  4296.  
  4297.  ulData (ULONG) 
  4298.  
  4299.     Contains one of the values inBIDI_STAT. 
  4300.  
  4301.  
  4302. ΓòÉΓòÉΓòÉ 13.11. BOOKPAGEBIDIINFO ΓòÉΓòÉΓòÉ
  4303.  
  4304. BOOKPAGEBIDIINFO 
  4305.  
  4306. The BOOKPAGEBIDIINFO structure contains the Bidi attributes of the notebook 
  4307. major and minor tabs and of the status line. 
  4308.  
  4309.    typedef struct _BOOKPAGEBIDIINFO
  4310.    {
  4311.       BD_ATTR_MASK  bamMajorTab;
  4312.       BD_ATTR_MASK  bamMinorTab;
  4313.       BD_ATTR_MASK  bamStatusLine;
  4314.    } BOOKPAGEBIDIINFO;
  4315.  
  4316.  
  4317. ΓòÉΓòÉΓòÉ 13.12. PBOOKPAGEBIDIINFO ΓòÉΓòÉΓòÉ
  4318.  
  4319. PBOOKPAGEBIDIINFO 
  4320.  
  4321. Pointer to BOOKPAGEBIDIINFO. 
  4322.  
  4323.    typedef BOOKPAGEBIDIINFO * PBOOKPAGEBIDIINFO;
  4324.  
  4325.  
  4326. ΓòÉΓòÉΓòÉ <hidden> PVSCDATA ΓòÉΓòÉΓòÉ
  4327.  
  4328. PVSCDATA Pointer to VSCDATA. 
  4329.  
  4330. typedef VSCDATA *PVSCDATA;
  4331.  
  4332.  
  4333. ΓòÉΓòÉΓòÉ <hidden> VSCDATA ΓòÉΓòÉΓòÉ
  4334.  
  4335. VSCDATA Structure that contains information about the value set control. 
  4336.  
  4337. typedef struct _VSCDATA {
  4338. ULONG     cbSize;         /* Data length  */
  4339. USHORT    usRowCount;     /* Number of rows  */
  4340. USHORT    usColumnCount;  /* Number of columns  */
  4341.  } VSCDATA;
  4342.  
  4343.  
  4344. ΓòÉΓòÉΓòÉ <hidden> cbSize ΓòÉΓòÉΓòÉ
  4345.  
  4346.  cbSize (ULONG) 
  4347.     Data length. 
  4348.  
  4349.     Length of the control data in bytes. 
  4350.  
  4351.  
  4352. ΓòÉΓòÉΓòÉ <hidden> usRowCount ΓòÉΓòÉΓòÉ
  4353.  
  4354.  usRowCount (USHORT) 
  4355.     Number of rows. 
  4356.  
  4357.     The number of rows in the value set control. The minimum number of rows is 
  4358.     1 and the maximum number of rows is 65,535. 
  4359.  
  4360.  
  4361. ΓòÉΓòÉΓòÉ <hidden> usColumnCount ΓòÉΓòÉΓòÉ
  4362.  
  4363.  usColumnCount (USHORT) 
  4364.     Number of columns. 
  4365.  
  4366.     The number of columns in the value set control. The minimum number of 
  4367.     columns is 1 and the maximum number of columns is 65,535. 
  4368.  
  4369.  
  4370. ΓòÉΓòÉΓòÉ <hidden> USHORT ΓòÉΓòÉΓòÉ
  4371.  
  4372. USHORT Unsigned integer in the range 0 through 65 535. 
  4373.  
  4374. typedef unsigned USHORT UUSHORT;
  4375.  
  4376.  
  4377. ΓòÉΓòÉΓòÉ <hidden> IPT ΓòÉΓòÉΓòÉ
  4378.  
  4379. IPT Insertion point for multi-line entry field. 
  4380.  
  4381. typedef LONG IPT;
  4382.  
  4383.  
  4384. ΓòÉΓòÉΓòÉ <hidden> PBUFFER ΓòÉΓòÉΓòÉ
  4385.  
  4386. PBUFFER Pointer to PBYTE. 
  4387.  
  4388. typedef BUFFER *PBUFFER;
  4389.  
  4390.  
  4391. ΓòÉΓòÉΓòÉ <hidden> PFATTRS ΓòÉΓòÉΓòÉ
  4392.  
  4393. PFATTRS Pointer to FATTRS 
  4394.  
  4395. typedef FATTRS *PFATTRS;
  4396.  
  4397.  
  4398. ΓòÉΓòÉΓòÉ <hidden> PIPT ΓòÉΓòÉΓòÉ
  4399.  
  4400. PIPT Pointer to IPT 
  4401.  
  4402. typedef IPT *PIPT;
  4403.  
  4404.  
  4405. ΓòÉΓòÉΓòÉ <hidden> PIX ΓòÉΓòÉΓòÉ
  4406.  
  4407. PIX Pel count for multi-line entry field. 
  4408.  
  4409. typedef LONG PIX;
  4410.  
  4411.  
  4412. ΓòÉΓòÉΓòÉ <hidden> PMLE_SEARCHDATA ΓòÉΓòÉΓòÉ
  4413.  
  4414. PMLE_SEARCHDATA Pointer to an MLE_SEARCHDATA data structure. 
  4415.  
  4416. typedef LONG *PMLE_SEARCHDATA;
  4417.  
  4418.  
  4419. ΓòÉΓòÉΓòÉ <hidden> PPOINTL ΓòÉΓòÉΓòÉ
  4420.  
  4421. PPOINTL Pointer to a POINTL data structure. 
  4422.  
  4423. typedef POINTL *POINTL;
  4424.  
  4425.  
  4426. ΓòÉΓòÉΓòÉ 14. Message Processing ΓòÉΓòÉΓòÉ
  4427.  
  4428. Window Messages in the PM Bidirectional environment are processed by window and 
  4429. dialog procedures. Please refer to the explanation of message processing in the 
  4430. PM reference. 
  4431.  
  4432.  
  4433. ΓòÉΓòÉΓòÉ 14.1. Container Control ΓòÉΓòÉΓòÉ
  4434.  
  4435. Processing of the Container control messages in the PM Bidirectional 
  4436. environment is the same as in the Non-Bidirectional PM environment. However, 
  4437. the Container control is sensitive to its Bidirectional attributes and handles 
  4438. formatting and presentation accordingly. 
  4439.  
  4440. The container supports all text Bidi attributes. This support is done in a 
  4441. hierarchy so that every level (class) of container sub-levels inherits the 
  4442. container attributes by default. These defaults attributes may be overridden by 
  4443. a Bidi-Aware application. 
  4444.  
  4445. The bidi attributes hierarchy of the container controls works as follows: 
  4446.  
  4447.       The Container Field bidi attributes can be set by sending a 
  4448.       CM_SETFIELDBIDIATTR message to the container. If the field bidi 
  4449.       attributes word is not specifially set by sending the message - the field 
  4450.       uses its (parent) record bidi attributes. 
  4451.  
  4452.       The Container Record bidi attributes can be set by sending the 
  4453.       CM_SETITEMBIDIATTR message. If the record bidi attributes are not 
  4454.       specifically set by sending the message - the record uses the container 
  4455.       window bidi attributes. 
  4456.  
  4457.  The above inheritance chain defines the effective bidi attribute that is used 
  4458.  in processing of a container object. 
  4459.  
  4460.  
  4461. ΓòÉΓòÉΓòÉ 14.1.1. CM_QUERYFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4462.  
  4463.  
  4464. ΓòÉΓòÉΓòÉ <hidden> Topics - CM_QUERYFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4465.  
  4466. Select an item: 
  4467.  
  4468.       Main Panel 
  4469.       Parameters 
  4470.       Return Values 
  4471.       Default Processing 
  4472.  
  4473.  
  4474. ΓòÉΓòÉΓòÉ <hidden> MAIN - CM_QUERYFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4475.  
  4476. Cause: 
  4477.  
  4478. This message queries the bidirectional attributes of a specific Container 
  4479. Field. 
  4480.  
  4481. Parameters: 
  4482.  
  4483.  
  4484. param1
  4485.     PFIELDINFO  pFieldInfo    Pointer.
  4486.  
  4487. param2
  4488.     PULONG      pBidiAttr     Pointer.
  4489.  
  4490. returns
  4491.     BOOL        fSuccess      Success indicator.
  4492.  
  4493.  
  4494. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - CM_QUERYFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4495.  
  4496.  pFieldInfo (PFIELDINFO) 
  4497.     Pointer. 
  4498.  
  4499.     Pointer to the FIELDINFO data structure. 
  4500.  
  4501.  pBidiAttr (PULONG) 
  4502.     Pointer. 
  4503.  
  4504.     Pointer to the values of the Bidi attributes that are returned. Possible 
  4505.     values  are in the BIDIATTR data structure. 
  4506.  
  4507.  
  4508. ΓòÉΓòÉΓòÉ <hidden> pFieldInfo ΓòÉΓòÉΓòÉ
  4509.  
  4510.  pFieldInfo (PFIELDINFO) 
  4511.     Pointer. 
  4512.  
  4513.     Pointer to the FIELDINFO data structure. 
  4514.  
  4515.  
  4516. ΓòÉΓòÉΓòÉ <hidden> pBidiAttr ΓòÉΓòÉΓòÉ
  4517.  
  4518.  pBidiAttr (PULONG) 
  4519.     Pointer. 
  4520.  
  4521.     Pointer to the values of the Bidi attributes that are returned. Possible 
  4522.     values  are in the BIDIATTR data structure. 
  4523.  
  4524.  
  4525. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - CM_QUERYFIELDBIDIINFO ΓòÉΓòÉΓòÉ
  4526.  
  4527.  fSuccess(BOOL) 
  4528.     Success indicator. 
  4529.     TRUE 
  4530.             Query of the container bidi information succeeded. 
  4531.  
  4532.     FALSE 
  4533.             An error occurred. The WinGetLastError function may return the 
  4534.             following error: 
  4535.  
  4536.                 PMERR_INVALID_PARAMETERS 
  4537.  
  4538.  
  4539. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  4540.  
  4541.  fSuccess(BOOL) 
  4542.     Success indicator. 
  4543.     TRUE 
  4544.             Query of the container bidi information succeeded. 
  4545.  
  4546.     FALSE 
  4547.             An error occurred. The WinGetLastError function may return the 
  4548.             following error: 
  4549.  
  4550.                 PMERR_INVALID_PARAMETERS 
  4551.  
  4552.  
  4553. ΓòÉΓòÉΓòÉ <hidden> NOTES - CM_QUERYFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4554.  
  4555.  This is the main expl.of cm NOTES 
  4556.  
  4557.  
  4558. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - CM_QUERYFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4559.  
  4560.  The Default window procedure does not expect to receive this message and 
  4561. therefore takes no action on it other than to return FALSE 
  4562.  
  4563.  
  4564. ΓòÉΓòÉΓòÉ 14.1.2. CM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4565.  
  4566.  
  4567. ΓòÉΓòÉΓòÉ <hidden> Topics - CM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4568.  
  4569. Select an item: 
  4570.  
  4571.       Main Panel 
  4572.       Parameters 
  4573.       Return Values 
  4574.       Default Processing 
  4575.  
  4576.  
  4577. ΓòÉΓòÉΓòÉ <hidden> MAIN - CM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4578.  
  4579. Cause: 
  4580.  
  4581. This message queries the bidirectional attributes of a specific Container Item 
  4582. (record). 
  4583.  
  4584. Parameters: 
  4585.  
  4586.  
  4587. param1
  4588.     PRECORDCORE  precordcore    Pointer.
  4589.  
  4590. param2
  4591.     PULONG       pBidiAttr      Pointer.
  4592.  
  4593. returns
  4594.     BOOL         fsuccess       Success indicator.
  4595.  
  4596.  
  4597. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - CM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4598.  
  4599.  pRecordCore (PRECORDCORE) 
  4600.     Pointer. 
  4601.  
  4602.     Pointer to the RECORDINFO data structure. 
  4603.  
  4604.  pBidiAttr (PULONG) 
  4605.     Pointer. 
  4606.  
  4607.     Pointer to the values of the Bidi attributes that are returned. Possible 
  4608.     values  are in the BIDIATTR data structure. 
  4609.  
  4610.  
  4611. ΓòÉΓòÉΓòÉ <hidden> pRecordCore ΓòÉΓòÉΓòÉ
  4612.  
  4613.  pRecordCore (PRECORDCORE) 
  4614.     Pointer. 
  4615.  
  4616.     Pointer to the RECORDINFO data structure. 
  4617.  
  4618.  
  4619. ΓòÉΓòÉΓòÉ <hidden> pBidiAttr ΓòÉΓòÉΓòÉ
  4620.  
  4621.  pBidiAttr (PULONG) 
  4622.     Pointer. 
  4623.  
  4624.     Pointer to the values of the Bidi attributes that are returned. Possible 
  4625.     values  are in the BIDIATTR data structure. 
  4626.  
  4627.  
  4628. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  4629.  
  4630.  fSuccess(BOOL) 
  4631.     Success indicator. 
  4632.     TRUE 
  4633.             Query of the bidi item information succeeded. 
  4634.  
  4635.     FALSE 
  4636.             An error occurred. The WinGetLastError function may return the 
  4637.             following error: 
  4638.  
  4639.                 PMERR_INVALID_PARAMETERS 
  4640.  
  4641.  
  4642. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - CM_QUERYITEMBIDIINFO ΓòÉΓòÉΓòÉ
  4643.  
  4644.  fSuccess(BOOL) 
  4645.     Success indicator. 
  4646.     TRUE 
  4647.             Query of the bidi item information succeeded. 
  4648.  
  4649.     FALSE 
  4650.             An error occurred. The WinGetLastError function may return the 
  4651.             following error: 
  4652.  
  4653.                 PMERR_INVALID_PARAMETERS 
  4654.  
  4655.  
  4656. ΓòÉΓòÉΓòÉ <hidden> NOTES - CM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4657.  
  4658.  This is the main expl.of cm NOTES 
  4659.  
  4660.  
  4661. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - CM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4662.  
  4663.  The Default window procedure does not expect to receive this message and 
  4664. therefore takes no action on it other than to return FALSE 
  4665.  
  4666.  
  4667. ΓòÉΓòÉΓòÉ 14.1.3. CM_SETFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4668.  
  4669.  
  4670. ΓòÉΓòÉΓòÉ <hidden> Topics - CM_SETFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4671.  
  4672. Select an item: 
  4673.  
  4674.       Main Panel 
  4675.       Parameters 
  4676.       Return Values 
  4677.       Default Processing 
  4678.  
  4679.  
  4680. ΓòÉΓòÉΓòÉ <hidden> MAIN - CM_SETFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4681.  
  4682. Cause: 
  4683.  
  4684. This message sets the bidirectional attributes of a specific Container Field. 
  4685.  
  4686. Parameters: 
  4687.  
  4688.  
  4689. param1
  4690.     PFIELDINFO        pFieldInfo        Pointer.
  4691.  
  4692. param2
  4693.     PBD_ATTR_MASK     pBD_Attr_Mask     Pointer.
  4694.  
  4695. returns
  4696.     BOOL              fsuccess          Success indicator.
  4697.  
  4698.  
  4699. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - CM_SETFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4700.  
  4701.  pFieldInfo (PFIELDINFO) 
  4702.     Pointer. 
  4703.  
  4704.     Pointer to the FIELDINFO data structure. 
  4705.  
  4706.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  4707.     Pointer. 
  4708.  
  4709.     Pointer to the BD_ATTR_MASK data structure. 
  4710.  
  4711.  
  4712. ΓòÉΓòÉΓòÉ <hidden> pFieldInfo ΓòÉΓòÉΓòÉ
  4713.  
  4714.  pFieldInfo (PFIELDINFO) 
  4715.     Pointer. 
  4716.  
  4717.     Pointer to the FIELDINFO data structure. 
  4718.  
  4719.  
  4720. ΓòÉΓòÉΓòÉ <hidden> pBD_Attr_Mask ΓòÉΓòÉΓòÉ
  4721.  
  4722.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  4723.     Pointer. 
  4724.  
  4725.     Pointer to the BD_ATTR_MASK data structure. 
  4726.  
  4727.  
  4728. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - CM_SETFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4729.  
  4730.  fSuccess(BOOL) 
  4731.     Success indicator. 
  4732.     TRUE 
  4733.             Setting of the field bidi attribute succeeded. 
  4734.     FALSE 
  4735.             An error occurred. The WinGetLastError function may return the 
  4736.             following error: 
  4737.                 PMERR_INVALID_PARAMETERS 
  4738.  
  4739.  
  4740. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  4741.  
  4742.  fSuccess(BOOL) 
  4743.     Success indicator. 
  4744.     TRUE 
  4745.             Setting of the field bidi attribute succeeded. 
  4746.     FALSE 
  4747.             An error occurred. The WinGetLastError function may return the 
  4748.             following error: 
  4749.                 PMERR_INVALID_PARAMETERS 
  4750.  
  4751.  
  4752. ΓòÉΓòÉΓòÉ <hidden> NOTES - CM_SETFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4753.  
  4754.  This is the main expl.of cm NOTES 
  4755.  
  4756.  
  4757. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - CM_SETFIELDBIDIATTR ΓòÉΓòÉΓòÉ
  4758.  
  4759.  The Default window procedure does not expect to receive this message and 
  4760. therefore takes no action on it other than to return FALSE 
  4761.  
  4762.  
  4763. ΓòÉΓòÉΓòÉ 14.1.4. CM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4764.  
  4765.  
  4766. ΓòÉΓòÉΓòÉ <hidden> Topics - CM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4767.  
  4768. Select an item: 
  4769.  
  4770.       Main Panel 
  4771.       Parameters 
  4772.       Return Values 
  4773.       Default Processing 
  4774.  
  4775.  
  4776. ΓòÉΓòÉΓòÉ <hidden> MAIN - CM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4777.  
  4778. Cause: 
  4779.  
  4780. This message sets the bidirectional attributes of a specific Container Item 
  4781. (record). 
  4782.  
  4783. Parameters: 
  4784.  
  4785.  
  4786. param1
  4787.     PRECORDCORE     precordcore     Pointer.
  4788.  
  4789. param2
  4790.     PBD_ATTR_MASK   pBD_Attr_Mask   Pointer.
  4791.  
  4792. returns
  4793.     BOOL            fsuccess        Success indicator.
  4794.  
  4795.  
  4796. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - CM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4797.  
  4798.  pRecordCore (PRECORDCORE) 
  4799.     Pointer. 
  4800.  
  4801.     Pointer to the RECORDCORE data structure. 
  4802.  
  4803.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  4804.     Pointer. 
  4805.  
  4806.     Pointer to the BD_ATTR_MASK data structure. 
  4807.  
  4808.  
  4809. ΓòÉΓòÉΓòÉ <hidden> pRecordCore ΓòÉΓòÉΓòÉ
  4810.  
  4811.  pRecordCore (PRECORDCORE) 
  4812.     Pointer. 
  4813.  
  4814.     Pointer to the RECORDCORE data structure. 
  4815.  
  4816.  
  4817. ΓòÉΓòÉΓòÉ <hidden> pBD_Attr_Mask ΓòÉΓòÉΓòÉ
  4818.  
  4819.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  4820.     Pointer. 
  4821.  
  4822.     Pointer to the BD_ATTR_MASK data structure. 
  4823.  
  4824.  
  4825. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - CM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4826.  
  4827.  fSuccess(BOOL) 
  4828.     Success indicator. 
  4829.     TRUE 
  4830.             Setting of the bidi item attributes succeeded. 
  4831.  
  4832.     FALSE 
  4833.             An error occurred. The WinGetLastError function may return the 
  4834.             following error: 
  4835.  
  4836.                 PMERR_INVALID_PARAMETERS 
  4837.  
  4838.  
  4839. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  4840.  
  4841.  fSuccess(BOOL) 
  4842.     Success indicator. 
  4843.     TRUE 
  4844.             Setting of the bidi item attributes succeeded. 
  4845.  
  4846.     FALSE 
  4847.             An error occurred. The WinGetLastError function may return the 
  4848.             following error: 
  4849.  
  4850.                 PMERR_INVALID_PARAMETERS 
  4851.  
  4852.  
  4853. ΓòÉΓòÉΓòÉ <hidden> NOTES - CM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4854.  
  4855.  This is the main expl.of cm NOTES 
  4856.  
  4857.  
  4858. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - CM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  4859.  
  4860.  The Default window procedure does not expect to receive this message and 
  4861. therefore takes no action on it other than to return FALSE 
  4862.  
  4863.  
  4864. ΓòÉΓòÉΓòÉ 14.2. Multi-Line Entry Field Control ΓòÉΓòÉΓòÉ
  4865.  
  4866. Processing of Multi-Line Entry Field control messages in the PM Bidirectional 
  4867. environment is the same as in the non-bidirectional PM environment. However, 
  4868. the Multi-Line Entry Field control is sensitive to its Bidirectional attributes 
  4869. and handles formatting and presentation accordingly. 
  4870.  
  4871.  
  4872. ΓòÉΓòÉΓòÉ 14.2.1. MLM_CLEAR ΓòÉΓòÉΓòÉ
  4873.  
  4874.  
  4875. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_CLEAR ΓòÉΓòÉΓòÉ
  4876.  
  4877. Select an item: 
  4878.  
  4879.       Main Panel 
  4880.       Parameters 
  4881.       Return Values 
  4882.       Notes 
  4883.       Default Processing 
  4884.  
  4885.  
  4886. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_CLEAR ΓòÉΓòÉΓòÉ
  4887.  
  4888. Cause: 
  4889.  
  4890. This message clears the currently selected text. When the text type of the MLE 
  4891. is implicit, the characters affected may not necessarily be adjacent in the 
  4892. text buffer : the action is taken on the visually selected text which is 
  4893. continous on the screen. 
  4894.  
  4895. Parameters: 
  4896.  
  4897. param1
  4898.     ULONG param1  Reserved.
  4899.  
  4900. param2
  4901.     ULONG param2  Reserved.
  4902.  
  4903. returns
  4904.     ULONG ulClear Number of bytes deleted, counted in CF_TEXT format.
  4905.  
  4906.  
  4907. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_CLEAR ΓòÉΓòÉΓòÉ
  4908.  
  4909. The multi-line entry field control window procedure responds to this message by 
  4910. clearing the current visual selection and returning the number of bytes 
  4911. cleared. 
  4912.  
  4913.  
  4914. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_CLEAR ΓòÉΓòÉΓòÉ
  4915.  
  4916. The default window procedure takes no action on this message, other than to set 
  4917. ulClear to 0. 
  4918.  
  4919.  
  4920. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_CLEAR ΓòÉΓòÉΓòÉ
  4921.  
  4922.  param1 (ULONG) 
  4923.     Reserved. 
  4924.     0 
  4925.             Reserved value, 0. 
  4926.  
  4927.  param2 (ULONG) 
  4928.     Reserved. 
  4929.     0 
  4930.             Reserved value, 0. 
  4931.  
  4932.  
  4933. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_CLEAR ΓòÉΓòÉΓòÉ
  4934.  
  4935.  ulClear (ULONG) 
  4936.     Number of bytes deleted, counted in CF_TEXT format. 
  4937.  
  4938.  
  4939. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  4940.  
  4941.  param1 (ULONG) 
  4942.     Reserved. 
  4943.     0 
  4944.             Reserved value, 0. 
  4945.  
  4946.  
  4947. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  4948.  
  4949.  param2 (ULONG) 
  4950.     Reserved. 
  4951.     0 
  4952.             Reserved value, 0. 
  4953.  
  4954.  
  4955. ΓòÉΓòÉΓòÉ <hidden> ulClear ΓòÉΓòÉΓòÉ
  4956.  
  4957.  ulClear (ULONG) 
  4958.     Number of bytes deleted, counted in CF_TEXT format. 
  4959.  
  4960.  
  4961. ΓòÉΓòÉΓòÉ 14.2.2. MLM_COPY ΓòÉΓòÉΓòÉ
  4962.  
  4963.  
  4964. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_COPY ΓòÉΓòÉΓòÉ
  4965.  
  4966. Select an item: 
  4967.  
  4968.       Main Panel 
  4969.       Parameters 
  4970.       Return Values 
  4971.       Notes 
  4972.       Default Processing 
  4973.  
  4974.  
  4975. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_COPY ΓòÉΓòÉΓòÉ
  4976.  
  4977. Cause: 
  4978.  
  4979. This message copies the currently selected text to the clipboard. When the text 
  4980. type of the MLE is implicit, the characters affected may not necessarily be 
  4981. adjacent in the text buffer : the action is taken on the visually selected text 
  4982. which is continous on the screen. 
  4983.  
  4984. Parameters: 
  4985.  
  4986. param1
  4987.     ULONG param1 Reserved.
  4988.  
  4989. param2
  4990.     ULONG param2 Reserved.
  4991.  
  4992. returns
  4993.     ULONG ulCopy Number of bytes transferred, counted in CF_TEXT format.
  4994.  
  4995.  
  4996. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_COPY ΓòÉΓòÉΓòÉ
  4997.  
  4998. The multi-line entry field control window procedure responds to this message by 
  4999. copying the visually selected text to the clipboard.  The text is translated to 
  5000. standard clipboard format, which is the same as exporting with MLE_CFTEXT 
  5001. format. 
  5002.  
  5003. The text is placed on the clipboard as a single contiguous data segment. This 
  5004. restricts the amount to the maximum segment size (64KB). 
  5005.  
  5006. This may cause an overflow, see MLN_OVERFLOW. 
  5007.  
  5008.  
  5009. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_COPY ΓòÉΓòÉΓòÉ
  5010.  
  5011. The default window procedure takes no action on this message, other than to set 
  5012. ulCopy to 0. 
  5013.  
  5014.  
  5015. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_COPY ΓòÉΓòÉΓòÉ
  5016.  
  5017.  param1 (ULONG) 
  5018.     Reserved. 
  5019.     0 
  5020.             Reserved value, 0. 
  5021.  
  5022.  param2 (ULONG) 
  5023.     Reserved. 
  5024.     0 
  5025.             Reserved value, 0. 
  5026.  
  5027.  
  5028. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_COPY ΓòÉΓòÉΓòÉ
  5029.  
  5030.  ulCopy (ULONG) 
  5031.     Number of bytes transferred, counted in CF_TEXT format. 
  5032.  
  5033.  
  5034. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  5035.  
  5036.  param1 (ULONG) 
  5037.     Reserved. 
  5038.     0 
  5039.             Reserved value, 0. 
  5040.  
  5041.  
  5042. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  5043.  
  5044.  param2 (ULONG) 
  5045.     Reserved. 
  5046.     0 
  5047.             Reserved value, 0. 
  5048.  
  5049.  
  5050. ΓòÉΓòÉΓòÉ <hidden> ulCopy ΓòÉΓòÉΓòÉ
  5051.  
  5052.  ulCopy (ULONG) 
  5053.     Number of bytes transferred, counted in CF_TEXT format. 
  5054.  
  5055.  
  5056. ΓòÉΓòÉΓòÉ 14.2.3. MLM_CUT ΓòÉΓòÉΓòÉ
  5057.  
  5058.  
  5059. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_CUT ΓòÉΓòÉΓòÉ
  5060.  
  5061. Select an item: 
  5062.  
  5063.       Main Panel 
  5064.       Parameters 
  5065.       Return Values 
  5066.       Notes 
  5067.       Default Processing 
  5068.  
  5069.  
  5070. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_CUT ΓòÉΓòÉΓòÉ
  5071.  
  5072. Cause: 
  5073.  
  5074. This message copies the text that forms the currently selected text to the 
  5075. clipboard and then deletes it from the MLE control.  When the text type of the 
  5076. MLE is implicit, the characters affected may not necessarily be adjacent in the 
  5077. text buffer : the action is taken on the visually selected text which is 
  5078. continous on the screen. 
  5079.  
  5080. Parameters: 
  5081.  
  5082. param1
  5083.     ULONG param1 Reserved.
  5084.  
  5085. param2
  5086.     ULONG param2 Reserved.
  5087.  
  5088. returns
  5089.     ULONG ulCopy Number of bytes transferred, counted in CF_TEXT format.
  5090.  
  5091.  
  5092. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_CUT ΓòÉΓòÉΓòÉ
  5093.  
  5094. The multi-line entry field control window procedure responds to this message by 
  5095. copying the selected text to the clipboard and then deleting it. The text is 
  5096. translated to standard clipboard format, which is the same as exporting with 
  5097. MLE_CFTEXT format. 
  5098.  
  5099. The text is placed on the clipboard as a single contiguous data segment. This 
  5100. restricts the amount to the maximum segment size (64KB). 
  5101.  
  5102. This may cause an overflow, see MLN_OVERFLOW. 
  5103.  
  5104.  
  5105. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_CUT ΓòÉΓòÉΓòÉ
  5106.  
  5107. The default window procedure takes no action on this message, other than to set 
  5108. ulCopy to 0. 
  5109.  
  5110.  
  5111. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_CUT ΓòÉΓòÉΓòÉ
  5112.  
  5113.  param1 (ULONG) 
  5114.     Reserved. 
  5115.     0 
  5116.             Reserved value, 0. 
  5117.  
  5118.  param2 (ULONG) 
  5119.     Reserved. 
  5120.     0 
  5121.             Reserved value, 0. 
  5122.  
  5123.  
  5124. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_CUT ΓòÉΓòÉΓòÉ
  5125.  
  5126.  ulCopy (ULONG) 
  5127.     Number of bytes transferred, counted in CF_TEXT format. 
  5128.  
  5129.  
  5130. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  5131.  
  5132.  param1 (ULONG) 
  5133.     Reserved. 
  5134.     0 
  5135.             Reserved value, 0. 
  5136.  
  5137.  
  5138. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  5139.  
  5140.  param2 (ULONG) 
  5141.     Reserved. 
  5142.     0 
  5143.             Reserved value, 0. 
  5144.  
  5145.  
  5146. ΓòÉΓòÉΓòÉ <hidden> ulCopy ΓòÉΓòÉΓòÉ
  5147.  
  5148.  ulCopy (ULONG) 
  5149.     Number of bytes transferred, counted in CF_TEXT format. 
  5150.  
  5151.  
  5152. ΓòÉΓòÉΓòÉ 14.2.4. MLM_DELETE ΓòÉΓòÉΓòÉ
  5153.  
  5154.  
  5155. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_DELETE ΓòÉΓòÉΓòÉ
  5156.  
  5157. Select an item: 
  5158.  
  5159.       Main Panel 
  5160.       Parameters 
  5161.       Return Values 
  5162.       Notes 
  5163.       Default Processing 
  5164.  
  5165.  
  5166. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_DELETE ΓòÉΓòÉΓòÉ
  5167.  
  5168. Cause: 
  5169.  
  5170. This message deletes text based on the VISUAL selection. 
  5171.  
  5172. Parameters: 
  5173.  
  5174. param1
  5175.     IPT   iptBegin  VISUAL Starting point of deletion.
  5176.  
  5177. param2
  5178.     ULONG ulDel     Number of bytes to delete.
  5179.  
  5180. returns
  5181.     ULONG ulSuccess Number of bytes successfully deleted.
  5182.  
  5183.  
  5184. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_DELETE ΓòÉΓòÉΓòÉ
  5185.  
  5186. This message takes an insertion point and a length, and deletes that number of 
  5187. characters from the text.  If the insertion point is -1, the selection is used 
  5188. and the effect is identical to the MLM_CLEAR message. 
  5189.  
  5190. This may cause an overflow, see MLN_OVERFLOW. 
  5191.  
  5192.  
  5193. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_DELETE ΓòÉΓòÉΓòÉ
  5194.  
  5195. The default window procedure takes no action on this message, other than to set 
  5196. ulSuccess to 0. 
  5197.  
  5198.  
  5199. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_DELETE ΓòÉΓòÉΓòÉ
  5200.  
  5201.  iptBegin (IPT) 
  5202.     Visual starting point of deletion. 
  5203.  
  5204.  ulDel (ULONG) 
  5205.     Number of bytes to delete. 
  5206.  
  5207.  
  5208. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_DELETE ΓòÉΓòÉΓòÉ
  5209.  
  5210.  ulSuccess (ULONG) 
  5211.     Number of bytes successfully deleted. 
  5212.  
  5213.  
  5214. ΓòÉΓòÉΓòÉ <hidden> iptBegin ΓòÉΓòÉΓòÉ
  5215.  
  5216.  iptBegin (IPT) 
  5217.     Visual starting point of deletion. 
  5218.  
  5219.  
  5220. ΓòÉΓòÉΓòÉ <hidden> ulDel ΓòÉΓòÉΓòÉ
  5221.  
  5222.  ulDel (ULONG) 
  5223.     Number of bytes to delete. 
  5224.  
  5225.  
  5226. ΓòÉΓòÉΓòÉ <hidden> ulSuccess ΓòÉΓòÉΓòÉ
  5227.  
  5228.  ulSuccess (ULONG) 
  5229.     Number of bytes successfully deleted. 
  5230.  
  5231.  
  5232. ΓòÉΓòÉΓòÉ 14.2.5. MLM_EXPORT ΓòÉΓòÉΓòÉ
  5233.  
  5234.  
  5235. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_EXPORT ΓòÉΓòÉΓòÉ
  5236.  
  5237. Select an item: 
  5238.  
  5239.       Main Panel 
  5240.       Parameters 
  5241.       Return Values 
  5242.       Notes 
  5243.       Default Processing 
  5244.  
  5245.  
  5246. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_EXPORT ΓòÉΓòÉΓòÉ
  5247.  
  5248. Cause: 
  5249.  
  5250. This message exports VISUALLY selected text to a buffer. 
  5251.  
  5252. Parameters: 
  5253.  
  5254. param1
  5255.     PIPT   pBegin    Visual starting point.
  5256.  
  5257. param2
  5258.     PULONG pCopy     Number of bytes being exported.
  5259.  
  5260. returns
  5261.     ULONG  ulSuccess Number of bytes successfully exported.
  5262.  
  5263.  
  5264. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_EXPORT ΓòÉΓòÉΓòÉ
  5265.  
  5266. This message takes a visual insertion point and length as parameters, and 
  5267. copies text, starting from that insertion point, into the buffer set by 
  5268. MLM_SETIMPORTEXPORT. Text is in the format set by MLM_FORMAT. If the insertion 
  5269. point is -1, the selection is used for both pBegin and pCopy. 
  5270.  
  5271. On return, pBegin is updated to follow the last byte exported, and the number 
  5272. of bytes to be exported is decremented by the number actually exported.  This 
  5273. is done to prepare those parameter values for the next export.  The return 
  5274. value indicates the number of bytes actually put into the buffer.  This number 
  5275. is less than, or equal to, the buffer size (see MLM_SETIMPORTEXPORT). 
  5276.  
  5277. Note:  All exports are done in full characters.  Therefore, if either the 
  5278.        length of the buffer or the number of bytes to be exported result in the 
  5279.        last byte transferred being only half of a DBCS character, the MLE will 
  5280.        not transfer that byte. 
  5281.  
  5282.  It returns the number of bytes placed in the export buffer. 
  5283.  
  5284.  
  5285. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_EXPORT ΓòÉΓòÉΓòÉ
  5286.  
  5287. The default window procedure takes no action on this message, other than to set 
  5288. ulSuccess to 0. 
  5289.  
  5290.  
  5291. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_EXPORT ΓòÉΓòÉΓòÉ
  5292.  
  5293.  pBegin (PIPT) 
  5294.     Visual starting point. 
  5295.  
  5296.     Updated to follow the last character exported. 
  5297.  
  5298.  pCopy (PULONG) 
  5299.     Number of bytes being exported. 
  5300.  
  5301.     Decremented by the number of bytes actually exported. 
  5302.  
  5303.  
  5304. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_EXPORT ΓòÉΓòÉΓòÉ
  5305.  
  5306.  ulSuccess (ULONG) 
  5307.     Number of bytes successfully exported. 
  5308.  
  5309.  
  5310. ΓòÉΓòÉΓòÉ <hidden> pBegin ΓòÉΓòÉΓòÉ
  5311.  
  5312.  pBegin (PIPT) 
  5313.     Visual starting point. 
  5314.  
  5315.     Updated to follow the last character exported. 
  5316.  
  5317.  
  5318. ΓòÉΓòÉΓòÉ <hidden> pCopy ΓòÉΓòÉΓòÉ
  5319.  
  5320.  pCopy (PULONG) 
  5321.     Number of bytes being exported. 
  5322.  
  5323.     Decremented by the number of bytes actually exported. 
  5324.  
  5325.  
  5326. ΓòÉΓòÉΓòÉ <hidden> ulSuccess ΓòÉΓòÉΓòÉ
  5327.  
  5328.  ulSuccess (ULONG) 
  5329.     Number of bytes successfully exported. 
  5330.  
  5331.  
  5332. ΓòÉΓòÉΓòÉ 14.2.6. MLM_IMPORT ΓòÉΓòÉΓòÉ
  5333.  
  5334.  
  5335. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_IMPORT ΓòÉΓòÉΓòÉ
  5336.  
  5337. Select an item: 
  5338.  
  5339.       Main Panel 
  5340.       Parameters 
  5341.       Return Values 
  5342.       Notes 
  5343.       Default Processing 
  5344.  
  5345.  
  5346. ΓòÉΓòÉΓòÉ 14.2.7. MLM_INSERT ΓòÉΓòÉΓòÉ
  5347.  
  5348.  
  5349. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_INSERT ΓòÉΓòÉΓòÉ
  5350.  
  5351. Select an item: 
  5352.  
  5353.       Main Panel 
  5354.       Parameters 
  5355.       Return Values 
  5356.       Notes 
  5357.       Default Processing 
  5358.  
  5359.  
  5360. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_INSERT ΓòÉΓòÉΓòÉ
  5361.  
  5362. Cause: 
  5363.  
  5364. This message deletes the currently selected text and replaces it with a text 
  5365. string. When the text type of the MLE is implicit, the characters affected may 
  5366. not necessarily be adjacent in the text buffer : the action is taken on the 
  5367. visually selected text which is continous on the screen. 
  5368.  
  5369. Parameters: 
  5370.  
  5371. param1
  5372.     PSTRL pText   Null-terminated text string.
  5373.  
  5374. param2
  5375.     ULONG param2  Reserved.
  5376.  
  5377. returns
  5378.     ULONG ulCount  Number of bytes actually inserted.
  5379.  
  5380.  
  5381. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_INSERT ΓòÉΓòÉΓòÉ
  5382.  
  5383. This message inserts the text string at the currently selected text, visually 
  5384. deleting that selection. Unlike in the English mode, deletion does not occur in 
  5385. the same manner as typing at the keyboard would. This is because typing Arabic 
  5386. in overwrite mode would replace characters in logical order not visual order. 
  5387.  
  5388. The text string must be in CF_TEXT format (or one of the formats acceptable to 
  5389. MLM_IMPORT) and null-terminated. The line-break (CR LF, LF, and so on) is 
  5390. counted as one byte, regardless of the number of bytes occupied in the buffer, 
  5391. and the null terminator is not counted. 
  5392.  
  5393. This interacts with the format rectangle and text limits, and a return of less 
  5394. than the full count can be the result.  If so, a notification message is sent. 
  5395.  
  5396.  
  5397. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_INSERT ΓòÉΓòÉΓòÉ
  5398.  
  5399. The default window procedure takes no action on this message, other than to set 
  5400. ulCount to 0. 
  5401.  
  5402.  
  5403. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_INSERT ΓòÉΓòÉΓòÉ
  5404.  
  5405.  pText (PSTRL) 
  5406.     Null-terminated text string. 
  5407.  
  5408.  param2 (ULONG) 
  5409.     Reserved. 
  5410.     0 
  5411.             Reserved value, 0. 
  5412.  
  5413.  
  5414. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_INSERT ΓòÉΓòÉΓòÉ
  5415.  
  5416.  ulCount (ULONG) 
  5417.      Number of bytes actually inserted. 
  5418.  
  5419.  
  5420. ΓòÉΓòÉΓòÉ <hidden> pText ΓòÉΓòÉΓòÉ
  5421.  
  5422.  pText (PSTRL) 
  5423.     Null-terminated text string. 
  5424.  
  5425.  
  5426. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  5427.  
  5428.  param2 (ULONG) 
  5429.     Reserved. 
  5430.     0 
  5431.             Reserved value, 0. 
  5432.  
  5433.  
  5434. ΓòÉΓòÉΓòÉ <hidden> ulCount ΓòÉΓòÉΓòÉ
  5435.  
  5436.  ulCount (ULONG) 
  5437.      Number of bytes actually inserted. 
  5438.  
  5439.  
  5440. ΓòÉΓòÉΓòÉ 14.2.8. MLM_LINEFROMCHAR ΓòÉΓòÉΓòÉ
  5441.  
  5442.  
  5443. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_LINEFROMCHAR ΓòÉΓòÉΓòÉ
  5444.  
  5445. Select an item: 
  5446.  
  5447.       Main Panel 
  5448.       Parameters 
  5449.       Return Values 
  5450.       Notes 
  5451.       Default Processing 
  5452.  
  5453.  
  5454. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_LINEFROMCHAR ΓòÉΓòÉΓòÉ
  5455.  
  5456. Cause: 
  5457.  
  5458. This message returns the line number corresponding to a given VISUAL insertion 
  5459. point. 
  5460.  
  5461. Parameters: 
  5462.  
  5463. param1
  5464.     IPT   iptFirst VISUAL insertion point of interest
  5465.  
  5466. param2
  5467.     ULONG param2   Reserved.
  5468.  
  5469. returns
  5470.     LONG  lLineNum Line number of insertion point.
  5471.  
  5472.  
  5473. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_LINEFROMCHAR ΓòÉΓòÉΓòÉ
  5474.  
  5475. For any visual insertion point, the corresponding line number is returned.  If 
  5476. the insertion point is -1, the number of the line containing the first 
  5477. insertion point of the visual selection is returned. 
  5478.  
  5479. The term line means a line on the display after the application of word-wrap. 
  5480. It does not mean a line as defined by the CR LF line-break sequence. 
  5481.  
  5482.  
  5483. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_LINEFROMCHAR ΓòÉΓòÉΓòÉ
  5484.  
  5485. The default window procedure takes no action on this message, other than to set 
  5486. lLineNum to 0. 
  5487.  
  5488.  
  5489. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_LINEFROMCHAR ΓòÉΓòÉΓòÉ
  5490.  
  5491.  iptFirst (IPT) 
  5492.     Visual insertion point of interest. 
  5493.  
  5494.  param2 (ULONG) 
  5495.     Reserved. 
  5496.     0 
  5497.             Reserved value, 0. 
  5498.  
  5499.  
  5500. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_LINEFROMCHAR ΓòÉΓòÉΓòÉ
  5501.  
  5502.  lLineNum (LONG) 
  5503.     Line number of visual insertion point. 
  5504.  
  5505.  
  5506. ΓòÉΓòÉΓòÉ <hidden> iptFirst ΓòÉΓòÉΓòÉ
  5507.  
  5508.  iptFirst (IPT) 
  5509.     Visual insertion point of interest. 
  5510.  
  5511.  
  5512. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  5513.  
  5514.  param2 (ULONG) 
  5515.     Reserved. 
  5516.     0 
  5517.             Reserved value, 0. 
  5518.  
  5519.  
  5520. ΓòÉΓòÉΓòÉ <hidden> lLineNum ΓòÉΓòÉΓòÉ
  5521.  
  5522.  lLineNum (LONG) 
  5523.     Line number of visual insertion point. 
  5524.  
  5525.  
  5526. ΓòÉΓòÉΓòÉ 14.2.9. MLM_PASTE ΓòÉΓòÉΓòÉ
  5527.  
  5528.  
  5529. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_PASTE ΓòÉΓòÉΓòÉ
  5530.  
  5531. Select an item: 
  5532.  
  5533.       Main Panel 
  5534.       Parameters 
  5535.       Return Values 
  5536.       Notes 
  5537.       Default Processing 
  5538.  
  5539.  
  5540. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_PASTE ΓòÉΓòÉΓòÉ
  5541.  
  5542. Cause: 
  5543.  
  5544. This message replaces the text that forms the current VISUAL selection, with 
  5545. text from the clipboard. When the text type of the MLE is implicit, the 
  5546. characters affected may not necessarily be adjacent in the text buffer : the 
  5547. action is taken on the visually selected text which is continous on the screen. 
  5548.  
  5549. Parameters: 
  5550.  
  5551. param1
  5552.     ULONG param1 Reserved.
  5553.  
  5554. param2
  5555.     ULONG param2 Reserved.
  5556.  
  5557. returns
  5558.     ULONG ulCopy Number of bytes transferred, counted in CF_TEXT format.
  5559.  
  5560.  
  5561. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_PASTE ΓòÉΓòÉΓòÉ
  5562.  
  5563. The multi-line entry field control window procedure responds to this message by 
  5564. replacing the selected text with text from the clipboard.  The text is 
  5565. translated from standard clipboard format, which is the same as importing with 
  5566. MLE_CFTEXT format. 
  5567.  
  5568. The text is assumed to be in the clipboard as a single contiguous data segment. 
  5569. This restricts the amount to the maximum segment size (64Kb). 
  5570.  
  5571. This can cause an overflow, see MLN_OVERFLOW. 
  5572.  
  5573.  
  5574. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_PASTE ΓòÉΓòÉΓòÉ
  5575.  
  5576. The default window procedure takes no action on this message, other than to set 
  5577. ulCopy to 0. 
  5578.  
  5579.  
  5580. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_PASTE ΓòÉΓòÉΓòÉ
  5581.  
  5582.  param1 (ULONG) 
  5583.     Reserved. 
  5584.     0 
  5585.             Reserved value, 0. 
  5586.  
  5587.  param2 (ULONG) 
  5588.     Reserved. 
  5589.     0 
  5590.             Reserved value, 0. 
  5591.  
  5592.  
  5593. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_PASTE ΓòÉΓòÉΓòÉ
  5594.  
  5595.  ulCopy (ULONG) 
  5596.     Number of bytes transferred, counted in CF_TEXT format. 
  5597.  
  5598.  
  5599. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  5600.  
  5601.  param1 (ULONG) 
  5602.     Reserved. 
  5603.     0 
  5604.             Reserved value, 0. 
  5605.  
  5606.  
  5607. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  5608.  
  5609.  param2 (ULONG) 
  5610.     Reserved. 
  5611.     0 
  5612.             Reserved value, 0. 
  5613.  
  5614.  
  5615. ΓòÉΓòÉΓòÉ <hidden> ulCopy ΓòÉΓòÉΓòÉ
  5616.  
  5617.  ulCopy (ULONG) 
  5618.     Number of bytes transferred, counted in CF_TEXT format. 
  5619.  
  5620.  
  5621. ΓòÉΓòÉΓòÉ 14.2.10. MLM_QUERYFORMATLINELENGTH ΓòÉΓòÉΓòÉ
  5622.  
  5623.  
  5624. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_QUERYFORMATLINELENGTH ΓòÉΓòÉΓòÉ
  5625.  
  5626. Select an item: 
  5627.  
  5628.       Main Panel 
  5629.       Parameters 
  5630.       Return Values 
  5631.       Notes 
  5632.       Default Processing 
  5633.  
  5634.  
  5635. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_QUERYFORMATLINELENGTH ΓòÉΓòÉΓòÉ
  5636.  
  5637. Cause: 
  5638.  
  5639. This message returns the number of bytes to end of line after formatting has 
  5640. been applied. 
  5641.  
  5642. Parameters: 
  5643.  
  5644. param1
  5645.     IPT   iptStart VISUAL insertion point to count from.
  5646.  
  5647. param2
  5648.     ULONG param2   Reserved.
  5649.  
  5650. returns
  5651.     IPT   iptLine  Count of bytes to end of line.
  5652.  
  5653.  
  5654. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_QUERYFORMATLINELENGTH ΓòÉΓòÉΓòÉ
  5655.  
  5656. For any insertion point, the number of bytes between that insertion point and 
  5657. the end of the line is returned, after the current formatting is applied. This 
  5658. is done visually not logically. If the insertion point is -1, the cursor 
  5659. position is used.  This message differs from MLM_QUERYLINELENGTH in that the 
  5660. byte count returned reflects the effects of the current formatting set by 
  5661. MLM_FORMAT. 
  5662.  
  5663.  
  5664. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_QUERYFORMATLINELENGTH ΓòÉΓòÉΓòÉ
  5665.  
  5666. The default window procedure takes no action on this message, other than to set 
  5667. iptLine to 0. 
  5668.  
  5669.  
  5670. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_QUERYFORMATLINELENGTH ΓòÉΓòÉΓòÉ
  5671.  
  5672.  iptStart (IPT) 
  5673.     Insertion point to count from. 
  5674.  
  5675.  param2 (ULONG) 
  5676.     Reserved. 
  5677.     0 
  5678.             Reserved value, 0. 
  5679.  
  5680.  
  5681. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_QUERYFORMATLINELENGTH ΓòÉΓòÉΓòÉ
  5682.  
  5683.  iptLine (IPT) 
  5684.     Count of bytes to end of line. 
  5685.  
  5686.  
  5687. ΓòÉΓòÉΓòÉ <hidden> iptStart ΓòÉΓòÉΓòÉ
  5688.  
  5689.  iptStart (IPT) 
  5690.     Visual insertion point to count from. 
  5691.  
  5692.  
  5693. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  5694.  
  5695.  param2 (ULONG) 
  5696.     Reserved. 
  5697.     0 
  5698.             Reserved value, 0. 
  5699.  
  5700.  
  5701. ΓòÉΓòÉΓòÉ <hidden> iptLine ΓòÉΓòÉΓòÉ
  5702.  
  5703.  iptLine (IPT) 
  5704.     Count of bytes to end of line. 
  5705.  
  5706.  
  5707. ΓòÉΓòÉΓòÉ 14.2.11. MLM_QUERYFORMATTEXTLENGTH ΓòÉΓòÉΓòÉ
  5708.  
  5709.  
  5710. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_QUERYFORMATTEXTLENGTH ΓòÉΓòÉΓòÉ
  5711.  
  5712. Select an item: 
  5713.  
  5714.       Main Panel 
  5715.       Parameters 
  5716.       Return Values 
  5717.       Notes 
  5718.       Default Processing 
  5719.  
  5720.  
  5721. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_QUERYFORMATTEXTLENGTH ΓòÉΓòÉΓòÉ
  5722.  
  5723. Cause: 
  5724.  
  5725. This message returns the length of a specified range of characters after the 
  5726. current formatting has been applied. 
  5727.  
  5728. Parameters: 
  5729.  
  5730. param1
  5731.     IPT   iptStart VISUAL insertion point to start from.
  5732.  
  5733. param2
  5734.     ULONG ulScan   Number of characters to convert to bytes.
  5735.  
  5736. returns
  5737.     ULONG ulText   Count of bytes in text after formatting.
  5738.  
  5739.  
  5740. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_QUERYFORMATTEXTLENGTH ΓòÉΓòÉΓòÉ
  5741.  
  5742. This message returns the length in bytes of a range of characters after the 
  5743. current formatting is applied. This is done visually not logically. This 
  5744. differs from MLM_QUERYTEXTLENGTH in that: 
  5745.  
  5746.      A range of insertion points can be queried. 
  5747.      The byte count returned reflects the effects of the current formatting 
  5748.       set by MLM_FORMAT. 
  5749.  
  5750.  
  5751. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_QUERYFORMATTEXTLENGTH ΓòÉΓòÉΓòÉ
  5752.  
  5753. The default window procedure takes no action on this message, other than to set 
  5754. ulText to 0. 
  5755.  
  5756.  
  5757. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_QUERYFORMATTEXTLENGTH ΓòÉΓòÉΓòÉ
  5758.  
  5759.  iptStart (IPT) 
  5760.     Insertion point to start from. 
  5761.  
  5762.  ulScan (ULONG) 
  5763.     Number of characters to convert to bytes. 
  5764.     0xFFFFFFFF 
  5765.             Convert until end of line 
  5766.  
  5767.     other 
  5768.             Convert specified number of characters. 
  5769.  
  5770.  
  5771. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_QUERYFORMATTEXTLENGTH ΓòÉΓòÉΓòÉ
  5772.  
  5773.  ulText (ULONG) 
  5774.     Count of bytes in text after formatting. 
  5775.  
  5776.  
  5777. ΓòÉΓòÉΓòÉ <hidden> iptStart ΓòÉΓòÉΓòÉ
  5778.  
  5779.  iptStart (IPT) 
  5780.     Insertion point to start from. 
  5781.  
  5782.  
  5783. ΓòÉΓòÉΓòÉ <hidden> ulScan ΓòÉΓòÉΓòÉ
  5784.  
  5785.  ulScan (ULONG) 
  5786.     Number of characters to convert to bytes. 
  5787.     0xFFFFFFFF 
  5788.             Convert until end of line 
  5789.  
  5790.     other 
  5791.             Convert specified number of characters. 
  5792.  
  5793.  
  5794. ΓòÉΓòÉΓòÉ <hidden> ulText ΓòÉΓòÉΓòÉ
  5795.  
  5796.  ulText (ULONG) 
  5797.     Count of bytes in text after formatting. 
  5798.  
  5799.  
  5800. ΓòÉΓòÉΓòÉ 14.2.12. MLM_QUERYLINELENGTH ΓòÉΓòÉΓòÉ
  5801.  
  5802.  
  5803. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_QUERYLINELENGTH ΓòÉΓòÉΓòÉ
  5804.  
  5805. Select an item: 
  5806.  
  5807.       Main Panel 
  5808.       Parameters 
  5809.       Return Values 
  5810.       Notes 
  5811.       Default Processing 
  5812.  
  5813.  
  5814. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_QUERYLINELENGTH ΓòÉΓòÉΓòÉ
  5815.  
  5816. Cause: 
  5817.  
  5818. This message returns the number of bytes between a given insertion point and 
  5819. the end of line. 
  5820.  
  5821. Parameters: 
  5822.  
  5823. param1
  5824.     IPT   iptStart VISUAL insertion point to count from.
  5825.  
  5826. param2
  5827.     ULONG param2   Reserved.
  5828.  
  5829. returns
  5830.     IPT   iptLine  Count of bytes to end of line.
  5831.  
  5832.  
  5833. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_QUERYLINELENGTH ΓòÉΓòÉΓòÉ
  5834.  
  5835. For any insertion point, the number of bytes between that insertion point and 
  5836. the end of the line is returned. The visual, not logical, insertion point is 
  5837. used. If the insertion point is -1, the cursor position is used. If the line 
  5838. contains a hard line-break, it is counted as one byte. 
  5839.  
  5840. The term line means a line on the display after the application of word-wrap. 
  5841. It does not mean a line as defined by the CR LF line-break sequence. 
  5842.  
  5843.  
  5844. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_QUERYLINELENGTH ΓòÉΓòÉΓòÉ
  5845.  
  5846. The default window procedure takes no action on this message, other than to set 
  5847. iptLine to 0. 
  5848.  
  5849.  
  5850. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_QUERYLINELENGTH ΓòÉΓòÉΓòÉ
  5851.  
  5852.  iptStart (IPT) 
  5853.     Insertion point to count from. 
  5854.  
  5855.  param2 (ULONG) 
  5856.     Reserved. 
  5857.     0 
  5858.             Reserved value, 0. 
  5859.  
  5860.  
  5861. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_QUERYLINELENGTH ΓòÉΓòÉΓòÉ
  5862.  
  5863.  iptLine (IPT) 
  5864.     Count of bytes to end of line. 
  5865.  
  5866.  
  5867. ΓòÉΓòÉΓòÉ <hidden> iptStart ΓòÉΓòÉΓòÉ
  5868.  
  5869.  iptStart (IPT) 
  5870.     Insertion point to count from. 
  5871.  
  5872.  
  5873. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  5874.  
  5875.  param2 (ULONG) 
  5876.     Reserved. 
  5877.     0 
  5878.             Reserved value, 0. 
  5879.  
  5880.  
  5881. ΓòÉΓòÉΓòÉ <hidden> iptLine ΓòÉΓòÉΓòÉ
  5882.  
  5883.  iptLine (IPT) 
  5884.     Count of bytes to end of line. 
  5885.  
  5886.  
  5887. ΓòÉΓòÉΓòÉ 14.2.13. MLM_QUERYSEL ΓòÉΓòÉΓòÉ
  5888.  
  5889.  
  5890. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_QUERYSEL ΓòÉΓòÉΓòÉ
  5891.  
  5892. Select an item: 
  5893.  
  5894.       Main Panel 
  5895.       Parameters 
  5896.       Return Values 
  5897.       Notes 
  5898.       Default Processing 
  5899.  
  5900.  
  5901. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_QUERYSEL ΓòÉΓòÉΓòÉ
  5902.  
  5903. Cause: 
  5904.  
  5905.   This message returns the location of the VISUAL selection. 
  5906.  
  5907. Parameters: 
  5908.  
  5909. param1
  5910.     USHORT usQueryMode Query Mode.
  5911.  
  5912. param2
  5913.     ULONG  param2      Reserved.
  5914.  
  5915. returns
  5916.     SHORT  sMinSel     Minimum visual insertion point of selection.
  5917.     SHORT  sMaxSel     Maximum visual insertion point of selection.
  5918.     IPT    iptipt      Requested visual insertion point.
  5919.  
  5920.  
  5921. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_QUERYSEL ΓòÉΓòÉΓòÉ
  5922.  
  5923. This message returns the location of the visual selection in several different 
  5924. forms. The insertion points lie between characters, and start at a zero origin 
  5925. before the first character in the MLE.  Subtracting the minimum from the 
  5926. maximum gives the number of characters in the selection. This is not 
  5927. necessarily the number of bytes of ASCII. The line-break character is a CR LF 
  5928. (2 bytes) and all DBCS characters are 2 bytes.  To determine the number of 
  5929. bytes, use MLM_QUERYFORMATTEXTLENGTH, being sure that the format choice set by 
  5930. MLM_FORMAT is set to what is used when the data is exported from the MLE (for 
  5931. example, MLE_CFTEXT for MLM_QUERYSELTEXT). 
  5932.  
  5933. Note the following: 
  5934.  
  5935.      If anchor point > cursor point, minimum point = cursor point and maximum 
  5936.       point = anchor point. 
  5937.      If anchor point < cursor point, minimum point = anchor point and maximum 
  5938.       point = cursor point. 
  5939.  
  5940.  
  5941. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_QUERYSEL ΓòÉΓòÉΓòÉ
  5942.  
  5943. The default window procedure takes no action on this message, other than to set 
  5944. reply to 0. 
  5945.  
  5946.  
  5947. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_QUERYSEL ΓòÉΓòÉΓòÉ
  5948.  
  5949.  usQueryMode (USHORT) 
  5950.     Query Mode. 
  5951.     MLFQS_MINMAXSEL 
  5952.             Return both minimum and maximum visual points of selection in a 
  5953.             format compatible with the EM_QUERYSEL message. 
  5954.  
  5955.     MLFQS_MINSEL 
  5956.             Return minimum visual insertion point of selection. 
  5957.  
  5958.     MLFQS_MAXSEL 
  5959.             Return maximum visual insertion point of selection. 
  5960.  
  5961.     MLFQS_ANCHORSEL 
  5962.             Return visual anchor point of selection. 
  5963.  
  5964.     MLFQS_CURSORSEL 
  5965.             Return visual cursor point of selection. 
  5966.  
  5967.  param2 (ULONG) 
  5968.     Reserved. 
  5969.     0 
  5970.             Reserved value, 0. 
  5971.  
  5972.  
  5973. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_QUERYSEL ΓòÉΓòÉΓòÉ
  5974.  
  5975.  sMinSel (SHORT) 
  5976.     Minimum visual insertion point of selection. 
  5977.  
  5978.     This value is rounded down to 65 535, if necessary. 
  5979.  
  5980.  sMaxSel (SHORT) 
  5981.     Maximum visual insertion point of selection. 
  5982.  
  5983.     This value is rounded down to 65 535 if necessary. 
  5984.  For usQueryMode = MLFQS_MINSEL, MLFQS_MAXSEL, MLFQS_ANCHORSEL, or 
  5985.  MLFQS_CURSORSEL: 
  5986.  
  5987.  iptipt (IPT) 
  5988.     Requested visual insertion point. 
  5989.  
  5990.  
  5991. ΓòÉΓòÉΓòÉ <hidden> usQueryMode ΓòÉΓòÉΓòÉ
  5992.  
  5993.  usQueryMode (USHORT) 
  5994.     Query Mode. 
  5995.     MLFQS_MINMAXSEL 
  5996.             Return both minimum and maximum visual points of selection in a 
  5997.             format compatible with the EM_QUERYSEL message. 
  5998.  
  5999.     MLFQS_MINSEL 
  6000.             Return minimum visual insertion point of selection. 
  6001.  
  6002.     MLFQS_MAXSEL 
  6003.             Return maximum visual insertion point of selection. 
  6004.  
  6005.     MLFQS_ANCHORSEL 
  6006.             Return visual anchor point of selection. 
  6007.  
  6008.     MLFQS_CURSORSEL 
  6009.             Return visual cursor point of selection. 
  6010.  
  6011.  
  6012. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  6013.  
  6014.  param2 (ULONG) 
  6015.     Reserved. 
  6016.     0 
  6017.             Reserved value, 0. 
  6018.  
  6019.  
  6020. ΓòÉΓòÉΓòÉ <hidden> sMinSel ΓòÉΓòÉΓòÉ
  6021.  
  6022.  sMinSel (SHORT) 
  6023.     Minimum visual insertion point of selection. 
  6024.  
  6025.     This value is rounded down to 65 535, if necessary. 
  6026.  
  6027.  
  6028. ΓòÉΓòÉΓòÉ <hidden> sMaxSel ΓòÉΓòÉΓòÉ
  6029.  
  6030.  sMaxSel (SHORT) 
  6031.     Maximum visual insertion point of selection. 
  6032.  
  6033.     This value is rounded down to 65 535 if necessary. 
  6034.  For usQueryMode = MLFQS_MINSEL, MLFQS_MAXSEL, MLFQS_ANCHORSEL, or 
  6035.  MLFQS_CURSORSEL: 
  6036.  
  6037.  
  6038. ΓòÉΓòÉΓòÉ <hidden> iptipt ΓòÉΓòÉΓòÉ
  6039.  
  6040.  iptipt (IPT) 
  6041.     Requested visual insertion point. 
  6042.  
  6043.  
  6044. ΓòÉΓòÉΓòÉ 14.2.14. MLM_QUERYSELTEXT ΓòÉΓòÉΓòÉ
  6045.  
  6046.  
  6047. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_QUERYSELTEXT ΓòÉΓòÉΓòÉ
  6048.  
  6049. Select an item: 
  6050.  
  6051.       Main Panel 
  6052.       Parameters 
  6053.       Return Values 
  6054.       Notes 
  6055.       Default Processing 
  6056.  
  6057.  
  6058. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_QUERYSELTEXT ΓòÉΓòÉΓòÉ
  6059.  
  6060. Cause: 
  6061.  
  6062. This message copies the currently VISUALLY selected text into a logical buffer. 
  6063.  
  6064. Parameters: 
  6065.  
  6066. param1
  6067.     PSTRL pBuff   Logical buffer for text string.
  6068.  
  6069. param2
  6070.     ULONG param2  Reserved.
  6071.  
  6072. returns
  6073.     ULONG ulCount Number of bytes to put into text string.
  6074.  
  6075.  
  6076. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_QUERYSELTEXT ΓòÉΓòÉΓòÉ
  6077.  
  6078. This message copies the current VISUALLY selected text into the logical buffer 
  6079. pointed to by pBuff.  The text string is null-terminated.  The byte count 
  6080. includes the text in CF_TEXT format (CR LF) and the null terminator. 
  6081.  
  6082.  
  6083. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_QUERYSELTEXT ΓòÉΓòÉΓòÉ
  6084.  
  6085. The default window procedure takes no action on this message, other than to set 
  6086. ulCount to 0. 
  6087.  
  6088.  
  6089. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_QUERYSELTEXT ΓòÉΓòÉΓòÉ
  6090.  
  6091.  pBuff (PSTRL) 
  6092.     Logical buffer for text string. 
  6093.  
  6094.  param2 (ULONG) 
  6095.     Reserved. 
  6096.     0 
  6097.             Reserved value, 0. 
  6098.  
  6099.  
  6100. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_QUERYSELTEXT ΓòÉΓòÉΓòÉ
  6101.  
  6102.  ulCount (ULONG) 
  6103.     Number of bytes to put into text string. 
  6104.  
  6105.  
  6106. ΓòÉΓòÉΓòÉ <hidden> pBuff ΓòÉΓòÉΓòÉ
  6107.  
  6108.  pBuff (PSTRL) 
  6109.     Logical buffer for text string. 
  6110.  
  6111.  
  6112. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  6113.  
  6114.  param2 (ULONG) 
  6115.     Reserved. 
  6116.     0 
  6117.             Reserved value, 0. 
  6118.  
  6119.  
  6120. ΓòÉΓòÉΓòÉ <hidden> ulCount ΓòÉΓòÉΓòÉ
  6121.  
  6122.  ulCount (ULONG) 
  6123.     Number of bytes to put into text string. 
  6124.  
  6125.  
  6126. ΓòÉΓòÉΓòÉ 14.2.15. MLM_SEARCH ΓòÉΓòÉΓòÉ
  6127.  
  6128.  
  6129. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_SEARCH ΓòÉΓòÉΓòÉ
  6130.  
  6131. Select an item: 
  6132.  
  6133.       Main Panel 
  6134.       Parameters 
  6135.       Return Values 
  6136.       Notes 
  6137.       Default Processing 
  6138.  
  6139.  
  6140. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_SEARCH ΓòÉΓòÉΓòÉ
  6141.  
  6142. Cause: 
  6143.  
  6144. This message searches for a specified text string. 
  6145.  
  6146. Parameters: 
  6147.  
  6148. param1
  6149.     ULONG           ulStyle  Style flags.
  6150.  
  6151. param2
  6152.     PMLE_SEARCHDATA pse      Search specification structure.
  6153.  
  6154. returns
  6155.     BOOL            fSuccess Success indicator.
  6156.  
  6157.  
  6158. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_SEARCH ΓòÉΓòÉΓòÉ
  6159.  
  6160. This message searches the MLE text for a specified string, starting at a 
  6161. specified insertion point and continuing until the second specified insertion 
  6162. point has been reached, or the requested string has been matched. 
  6163.  
  6164. When an MLM_SEARCH message is sent, the text is scanned starting with the 
  6165. character that follows the insertion point indicated in the iptStart field of 
  6166. the MLE_SEARCHDATA structure.  The search proceeds until the point indicated in 
  6167. the iptStop field, until a match is found, or until TRUE is returned from 
  6168. MLN_SEARCHPAUSE notification (see WM_CONTROL (in Multiline Entry Fields)). If a 
  6169. negative value is specified for the iptStart, the current cursor point is used. 
  6170. If a negative value is specified for iptStop, the end of the text is used.  If 
  6171. iptStop, is less than or equal to iptStart, after performing the two indicated 
  6172. substitutions, the search wraps from the end of the text to the beginning of 
  6173. the text. 
  6174.  
  6175. If the MLFSEARCH_CASESENSITIVE option is specified, the bytes of the search 
  6176. string must exactly match those in the text.  If MLFSEARCH_CASESENSITIVE is not 
  6177. specified, the WinUpperChar of the search string must match the WinUpperChar of 
  6178. the text. 
  6179.  
  6180. When a match is found, the iptStart field of the search specification structure 
  6181. is set to indicate the insertion point immediately preceding the first 
  6182. character of the match, and the cchFind field is set to indicate the number of 
  6183. characters in the match.  The cursor selection is not altered unless 
  6184. MLFSEARCH_SELECTMATCH is specified.  If it is, an MLM_SETSEL is done with the 
  6185. anchor point at iptStart and the cursor at iptStart + cchFind. 
  6186.  
  6187. While searching, the MLE occasionally sends an MLN_SEARCHPAUSE notification 
  6188. message.  If the owner responds to this message with the value TRUE, the MLE 
  6189. stops the search. When a search is stopped from MLN_SEARCHPAUSE, iptStart is 
  6190. set to the point where the search terminated. If the response is FALSE, the 
  6191. search continues (see also the definition of MLN_SEARCHPAUSE). The interval at 
  6192. which MLN_SEARCHPAUSE notifications are sent is implementation-dependent, but 
  6193. must not exceed reasonable user-response thresholds, nor should it be so often 
  6194. as to introduce undue messaging overhead. Sending this notification every half 
  6195. second is a reasonable compromise. 
  6196.  
  6197. When no match is found the iptStart value is unchanged. 
  6198.  
  6199. If the application needs to continue the search, the proper way is to change 
  6200. the iptStart value to be the point following the string found, adjusting for 
  6201. any text changes done after the search that may have moved the relative 
  6202. location of the point. 
  6203.  
  6204. Applications using this message are advised to change the system pointer to the 
  6205. wait icon (clock face) if it is expected that the search will take some time. 
  6206.  
  6207.  
  6208. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_SEARCH ΓòÉΓòÉΓòÉ
  6209.  
  6210. The default window procedure takes no action on this message, other than to set 
  6211. fSuccess to FALSE. 
  6212.  
  6213.  
  6214. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_SEARCH ΓòÉΓòÉΓòÉ
  6215.  
  6216.  ulStyle (ULONG) 
  6217.     Style flags. 
  6218.     MLFSEARCH_CASESENSITIVE 
  6219.             If set, only exact matches are considered a successful match.  If 
  6220.             not set, any case-combination of the correct characters in the 
  6221.             correct sequence is considered a successful match. 
  6222.  
  6223.     MLFSEARCH_SELECTMATCH 
  6224.             If set, the MLE selects the text and scrolls it into view when 
  6225.             found, just as if the application had sent an MLM_SETSEL message. 
  6226.             This is not done if MLFSEARCH_CHANGEALL is also indicated. 
  6227.  
  6228.     MLFSEARCH_CHANGEALL 
  6229.             Using the MLE_SEARCHDATA structure specified in pse, all 
  6230.             occurrences of pchFind are found, searching from iptStart to 
  6231.             iptStop, and replacing them with pchReplace. If this style is 
  6232.             selected, the cchFound field has no meaning, and the iptStart value 
  6233.             points to the place where the search stopped, or is the same as 
  6234.             iptStop because the search has not been stopped at any of the found 
  6235.             strings. The current cursor location is not moved.  However, any 
  6236.             existing selection is deselected. 
  6237.  
  6238.  pse (PMLE_SEARCHDATA) 
  6239.     Search specification structure. 
  6240.  
  6241.  
  6242. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_SEARCH ΓòÉΓòÉΓòÉ
  6243.  
  6244.  fSuccess (BOOL) 
  6245.     Success indicator. 
  6246.     TRUE 
  6247.             The search was successful. 
  6248.  
  6249.     FALSE 
  6250.             The search was unsuccessful. 
  6251.  
  6252.  
  6253. ΓòÉΓòÉΓòÉ <hidden> ulStyle ΓòÉΓòÉΓòÉ
  6254.  
  6255.  ulStyle (ULONG) 
  6256.     Style flags. 
  6257.     MLFSEARCH_CASESENSITIVE 
  6258.             If set, only exact matches are considered a successful match.  If 
  6259.             not set, any case-combination of the correct characters in the 
  6260.             correct sequence is considered a successful match. 
  6261.  
  6262.     MLFSEARCH_SELECTMATCH 
  6263.             If set, the MLE selects the text and scrolls it into view when 
  6264.             found, just as if the application had sent an MLM_SETSEL message. 
  6265.             This is not done if MLFSEARCH_CHANGEALL is also indicated. 
  6266.  
  6267.     MLFSEARCH_CHANGEALL 
  6268.             Using the MLE_SEARCHDATA structure specified in pse, all 
  6269.             occurrences of pchFind are found, searching from iptStart to 
  6270.             iptStop, and replacing them with pchReplace. If this style is 
  6271.             selected, the cchFound field has no meaning, and the iptStart value 
  6272.             points to the place where the search stopped, or is the same as 
  6273.             iptStop because the search has not been stopped at any of the found 
  6274.             strings. The current cursor location is not moved.  However, any 
  6275.             existing selection is deselected. 
  6276.  
  6277.  
  6278. ΓòÉΓòÉΓòÉ <hidden> pse ΓòÉΓòÉΓòÉ
  6279.  
  6280.  pse (PMLE_SEARCHDATA) 
  6281.     Search specification structure. 
  6282.  
  6283.  
  6284. ΓòÉΓòÉΓòÉ <hidden> fSuccess ΓòÉΓòÉΓòÉ
  6285.  
  6286.  fSuccess (BOOL) 
  6287.     Success indicator. 
  6288.     TRUE 
  6289.             The search was successful. 
  6290.  
  6291.     FALSE 
  6292.             The search was unsuccessful. 
  6293.  
  6294.  
  6295. ΓòÉΓòÉΓòÉ 14.2.16. MLM_SETFIRSTCHAR ΓòÉΓòÉΓòÉ
  6296.  
  6297.  
  6298. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_SETFIRSTCHAR ΓòÉΓòÉΓòÉ
  6299.  
  6300. Select an item: 
  6301.  
  6302.       Main Panel 
  6303.       Parameters 
  6304.       Return Values 
  6305.       Notes 
  6306.       Default Processing 
  6307.  
  6308.  
  6309. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_SETFIRSTCHAR ΓòÉΓòÉΓòÉ
  6310.  
  6311. Cause: 
  6312.  
  6313. This message sets the first visible character. 
  6314.  
  6315. Parameters: 
  6316.  
  6317. param1
  6318.     IPT   iptFVC   Visual insertion point to place in top left-hand corner.
  6319.  
  6320. param2
  6321.     ULONG param2   Reserved.
  6322.  
  6323. returns
  6324.     BOOL  fSuccess Success indicator.
  6325.  
  6326.  
  6327. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_SETFIRSTCHAR ΓòÉΓòÉΓòÉ
  6328.  
  6329. This message scrolls the text to place the character following the insertion 
  6330. point into the upper left-hand corner of the window. If the insertion point 
  6331. specified is beyond the end of a line, or the end of the file, it is resolved 
  6332. in the same way as it is for a mouse click. 
  6333.  
  6334.  
  6335. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_SETFIRSTCHAR ΓòÉΓòÉΓòÉ
  6336.  
  6337. The default window procedure takes no action on this message, other than to set 
  6338. fSuccess to FALSE. 
  6339.  
  6340.  
  6341. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_SETFIRSTCHAR ΓòÉΓòÉΓòÉ
  6342.  
  6343.  iptFVC (IPT) 
  6344.     Visual insertion point to place in top left-hand corner. 
  6345.  
  6346.  param2 (ULONG) 
  6347.     Reserved. 
  6348.     0 
  6349.             Reserved value, 0. 
  6350.  
  6351.  
  6352. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_SETFIRSTCHAR ΓòÉΓòÉΓòÉ
  6353.  
  6354.  fSuccess (BOOL) 
  6355.     Success indicator. 
  6356.     TRUE 
  6357.             Successful completion 
  6358.  
  6359.     FALSE 
  6360.             An error occurred. 
  6361.  
  6362.  
  6363. ΓòÉΓòÉΓòÉ <hidden> iptFVC ΓòÉΓòÉΓòÉ
  6364.  
  6365.  iptFVC (IPT) 
  6366.     Visual insertion point to place in top left-hand corner. 
  6367.  
  6368.  
  6369. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  6370.  
  6371.  param2 (ULONG) 
  6372.     Reserved. 
  6373.     0 
  6374.             Reserved value, 0. 
  6375.  
  6376.  
  6377. ΓòÉΓòÉΓòÉ <hidden> fSuccess ΓòÉΓòÉΓòÉ
  6378.  
  6379.  fSuccess (BOOL) 
  6380.     Success indicator. 
  6381.     TRUE 
  6382.             Successful completion 
  6383.  
  6384.     FALSE 
  6385.             An error occurred. 
  6386.  
  6387.  
  6388. ΓòÉΓòÉΓòÉ 14.2.17. MLM_SETSEL ΓòÉΓòÉΓòÉ
  6389.  
  6390.  
  6391. ΓòÉΓòÉΓòÉ <hidden> Topics - MLM_SETSEL ΓòÉΓòÉΓòÉ
  6392.  
  6393. Select an item: 
  6394.  
  6395.       Main Panel 
  6396.       Parameters 
  6397.       Return Values 
  6398.       Notes 
  6399.       Default Processing 
  6400.  
  6401.  
  6402. ΓòÉΓòÉΓòÉ <hidden> Main - MLM_SETSEL ΓòÉΓòÉΓòÉ
  6403.  
  6404. Cause: 
  6405.  
  6406. This message sets a VISUAL selection. 
  6407.  
  6408. Parameters: 
  6409.  
  6410. param1
  6411.     IPT  iptAnchor Visual insertion point for new visual anchor point.
  6412.  
  6413. param2
  6414.     IPT  iptCursor Visual insertion point for new visual cursor point.
  6415.  
  6416. returns
  6417.     BOOL fSuccess  Success indicator.
  6418.  
  6419.  
  6420. ΓòÉΓòÉΓòÉ <hidden> Notes - MLM_SETSEL ΓòÉΓòÉΓòÉ
  6421.  
  6422. This message sets the visual anchor and visual cursor points. The screen 
  6423. display is updated appropriately, ensuring that the cursor point is visible 
  6424. (which may involve scrolling).  Note that the text cursor and inversion are not 
  6425. displayed if the MLE window does not have the input focus.  A negative value 
  6426. for a point leaves that point alone. 
  6427.  
  6428.  
  6429. ΓòÉΓòÉΓòÉ <hidden> Default Processing - MLM_SETSEL ΓòÉΓòÉΓòÉ
  6430.  
  6431. The default window procedure takes no action on this message, other than to set 
  6432. fSuccess to FALSE. 
  6433.  
  6434.  
  6435. ΓòÉΓòÉΓòÉ <hidden> Parameters - MLM_SETSEL ΓòÉΓòÉΓòÉ
  6436.  
  6437.  iptAnchor (IPT) 
  6438.     Visual insertion point for new visual anchor point. 
  6439.  
  6440.  iptCursor (IPT) 
  6441.     Visual insertion point for new visual cursor point. 
  6442.  
  6443.  
  6444. ΓòÉΓòÉΓòÉ <hidden> Return Values - MLM_SETSEL ΓòÉΓòÉΓòÉ
  6445.  
  6446.  fSuccess (BOOL) 
  6447.     Success indicator. 
  6448.  
  6449.  
  6450. ΓòÉΓòÉΓòÉ <hidden> iptAnchor ΓòÉΓòÉΓòÉ
  6451.  
  6452.  iptAnchor (IPT) 
  6453.     Visual insertion point for new visual anchor point. 
  6454.  
  6455.  
  6456. ΓòÉΓòÉΓòÉ <hidden> iptCursor ΓòÉΓòÉΓòÉ
  6457.  
  6458.  iptCursor (IPT) 
  6459.     Visual insertion point for new visual cursor point. 
  6460.  
  6461.  
  6462. ΓòÉΓòÉΓòÉ <hidden> fSuccess ΓòÉΓòÉΓòÉ
  6463.  
  6464.  fSuccess (BOOL) 
  6465.     Success indicator. 
  6466.  
  6467.  
  6468. ΓòÉΓòÉΓòÉ 14.3. Notebook control ΓòÉΓòÉΓòÉ
  6469.  
  6470. Processing of Notebook control messages in the PM Bidirectional environment is 
  6471. the same as in the non-bidirectional PM environment. However, the Notebook 
  6472. control is sensitive to its Bidirectional attributes and handles formatting and 
  6473. presentation accordingly. 
  6474.  
  6475. When the notebook control has right to left window orientation, the page arrows 
  6476. have their roles reversed: the left arrow turns the pages forward, whereas the 
  6477. right one turns them backwards. The text of tabs is converted according to 
  6478. their bidi attributes. 
  6479.  
  6480. The WM_SETBIDIATTR dynamicaly modifies the bidi attributes (and as a result - 
  6481. the appearance) of the notebook control. It will also send appropriate messages 
  6482. to the user-defined page windows. 
  6483.  
  6484.  
  6485. ΓòÉΓòÉΓòÉ 14.3.1. BKM_QUERYSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6486.  
  6487.  
  6488. ΓòÉΓòÉΓòÉ <hidden> Topics - BKM_QUERYSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6489.  
  6490. Select an item: 
  6491.  
  6492.       Main Panel 
  6493.       Parameters 
  6494.       Return Values 
  6495.       Default Processing 
  6496.  
  6497.  
  6498. ΓòÉΓòÉΓòÉ <hidden> MAIN - BKM_QUERYSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6499.  
  6500. Cause: 
  6501.  
  6502. This message queries the bidi attribute of the status line text. 
  6503.  
  6504. Parameters: 
  6505.  
  6506.  
  6507. param1
  6508.     ULONG      ulPageId    Page ID.
  6509.  
  6510. param2
  6511.     PULONG     pBidiAttr     Pointer.
  6512.  
  6513. returns
  6514.     BOOL       fsuccess    Success indicator.
  6515.  
  6516.  
  6517. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - BKM_QUERYSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6518.  
  6519.  ulpageID (ULONG) 
  6520.     Page ID. 
  6521.  
  6522.     Page identifier of the page whose status line text is requested. 
  6523.  
  6524.  pBidiAttr (PULONG) 
  6525.     Pointer. 
  6526.  
  6527.     Pointer to a BIDIATTR data structure where the statusline bidi attributes 
  6528.     are returned. 
  6529.  
  6530.  
  6531. ΓòÉΓòÉΓòÉ <hidden> ulpageID ΓòÉΓòÉΓòÉ
  6532.  
  6533.  ulpageID (ULONG) 
  6534.     Page ID. 
  6535.  
  6536.     Page identifier of the page whose status line text is requested. 
  6537.  
  6538.  
  6539. ΓòÉΓòÉΓòÉ <hidden> pBidiAttr ΓòÉΓòÉΓòÉ
  6540.  
  6541.  pBidiAttr (PULONG) 
  6542.     Pointer. 
  6543.  
  6544.     Pointer to a BIDIATTR data structure defining the status line text. 
  6545.  
  6546.  
  6547. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - BKM_QUERYSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6548.  
  6549.  fSuccess(BOOL) 
  6550.     Success indicator. 
  6551.     TRUE 
  6552.             Query of the notebook status line succeeded. 
  6553.  
  6554.     FALSE 
  6555.             An error occurred. The WinGetLastError function may return the 
  6556.             following error: 
  6557.  
  6558.                 PMERR_INVALID_PARAMETERS 
  6559.  
  6560.  
  6561. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  6562.  
  6563.  fSuccess(BOOL) 
  6564.     Success indicator. 
  6565.     TRUE 
  6566.             Query of the notebook status line succeeded. 
  6567.  
  6568.     FALSE 
  6569.             An error occurred. The WinGetLastError function may return the 
  6570.             following error: 
  6571.  
  6572.                 PMERR_INVALID_PARAMETERS 
  6573.  
  6574.  
  6575. ΓòÉΓòÉΓòÉ <hidden> NOTES - BKM_QUERYSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6576.  
  6577.  This is the main expl.of cm NOTES 
  6578.  
  6579.  
  6580. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - BKM_QUERYSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6581.  
  6582.  The Default window procedure does not expect to receive this message and 
  6583. therefore takes no action on it other than to return FALSE 
  6584.  
  6585.  
  6586. ΓòÉΓòÉΓòÉ 14.3.2. BKM_QUERYTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6587.  
  6588.  
  6589. ΓòÉΓòÉΓòÉ <hidden> Topics - BKM_QUERYTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6590.  
  6591. Select an item: 
  6592.  
  6593.       Main Panel 
  6594.       Parameters 
  6595.       Return Values 
  6596.       Notes 
  6597.       Default Processing 
  6598.  
  6599.  
  6600. ΓòÉΓòÉΓòÉ <hidden> MAIN - BKM_QUERYTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6601.  
  6602. Cause: 
  6603.  
  6604. This message queries the bidi attribute of the tab text. 
  6605.  
  6606. Parameters: 
  6607.  
  6608.  
  6609. param1
  6610.     ULONG    ulPageID    Page ID.
  6611.  
  6612. param2
  6613.     PULONG   pBidiAttr     Pointer.
  6614.  
  6615. returns
  6616.     BOOL     fsuccess    Success indicator.
  6617.  
  6618.  
  6619. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - BKM_QUERYTABTEXTBIDIATTRR ΓòÉΓòÉΓòÉ
  6620.  
  6621.  ulpageID (ULONG) 
  6622.     Page ID. 
  6623.  
  6624.     Page identifier of the page whose tab text is queried for Bidi attributes. 
  6625.  
  6626.  pBidiAttr (PULONG) 
  6627.     Pointer. 
  6628.  
  6629.     Pointer to a BIDIATTR data structure where the bidirectional attributes of 
  6630.     the tab text are returned. 
  6631.  
  6632.  
  6633. ΓòÉΓòÉΓòÉ <hidden> ulpageID ΓòÉΓòÉΓòÉ
  6634.  
  6635.  ulpageID (ULONG) 
  6636.     Page ID. 
  6637.  
  6638.     Page identifier of the page whose tab text is queried for bidirectional 
  6639.     attributes. 
  6640.  
  6641.  
  6642. ΓòÉΓòÉΓòÉ <hidden> pBidiAttr ΓòÉΓòÉΓòÉ
  6643.  
  6644.  pBidiAttr (PULONG) 
  6645.     Pointer. 
  6646.  
  6647.     Pointer to a BIDIATTR data structure where the bidirectional attributes of 
  6648.     the tab text are returned. 
  6649.  
  6650.  
  6651. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - BKM_QUERYTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6652.  
  6653.  fSuccess(BOOL) 
  6654.     Success indicator. 
  6655.     TRUE 
  6656.             Query of the notebook tab text bidirectional attributes succeeded. 
  6657.  
  6658.     FALSE 
  6659.             An error occurred. The WinGetLastError function may return the 
  6660.             following error: 
  6661.  
  6662.                 PMERR_INVALID_PARAMETERS 
  6663.  
  6664.  
  6665. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  6666.  
  6667.  fSuccess(BOOL) 
  6668.     Success indicator. 
  6669.     TRUE 
  6670.             Query of the notebook tab text bidirectional attributes succeeded. 
  6671.  
  6672.     FALSE 
  6673.             An error occurred. The WinGetLastError function may return the 
  6674.             following error: 
  6675.  
  6676.                 PMERR_INVALID_PARAMETERS 
  6677.  
  6678.  
  6679. ΓòÉΓòÉΓòÉ <hidden> NOTES - BKM_QUERYTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6680.  
  6681. The mnemonic specified should treat all Arabic shapes in the same way. They 
  6682. should normalize both the typed key and the character in the TAB text to their 
  6683. "base shapes". This processing should be the same as done in the menu control. 
  6684.  
  6685.  
  6686. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - BKM_QUERYTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6687.  
  6688.  The Default window procedure does not expect to receive this message and 
  6689. therefore takes no action on it other than to return FALSE 
  6690.  
  6691.  
  6692. ΓòÉΓòÉΓòÉ 14.3.3. BKM_SETSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6693.  
  6694.  
  6695. ΓòÉΓòÉΓòÉ <hidden> Topics - BKM_SETSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6696.  
  6697. Select an item: 
  6698.  
  6699.       Main Panel 
  6700.       Parameters 
  6701.       Return Values 
  6702.       Default Processing 
  6703.  
  6704.  
  6705. ΓòÉΓòÉΓòÉ <hidden> MAIN - BKM_SETSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6706.  
  6707. Cause: 
  6708.  
  6709. This message sets the bidi attribute for a specific status line. 
  6710.  
  6711. Parameters: 
  6712.  
  6713.  
  6714. param1
  6715.     ULONG           ulPageID       Page ID.
  6716.  
  6717. param2
  6718.     PBD_ATTR_MASK   pBD_Attr_Mask  Pointer.
  6719.  
  6720. returns
  6721.     BOOL            fsuccess       Success indicator.
  6722.  
  6723.  
  6724. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - BKM_SETSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6725.  
  6726.  ulpageID (ULONG) 
  6727.     Page ID. 
  6728.  
  6729.     Page identifier of the page with which to associate the text string. 
  6730.  
  6731.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  6732.     Pointer. 
  6733.  
  6734.     Pointer to the BD_ATTR_MASK data structure defining the bidirectional 
  6735.     attributes to be set. 
  6736.  
  6737.  
  6738. ΓòÉΓòÉΓòÉ <hidden> ulpageID ΓòÉΓòÉΓòÉ
  6739.  
  6740.  ulpageID (ULONG) 
  6741.     Page ID. 
  6742.  
  6743.     Page identifier of the page whose status line text is assigned with the new 
  6744.     bidirectional attributes. 
  6745.  
  6746.  
  6747. ΓòÉΓòÉΓòÉ <hidden> pBD_Attr_Mask ΓòÉΓòÉΓòÉ
  6748.  
  6749.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  6750.     Pointer. 
  6751.  
  6752.     Pointer to the BD_ATTR_MASK data structure containing the bidirectional 
  6753.     attributes. 
  6754.  
  6755.  
  6756. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - BKM_SETSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6757.  
  6758.  fSuccess(BOOL) 
  6759.     Success indicator. 
  6760.     TRUE 
  6761.             Setting of the notebook status line bidirectional attributes 
  6762.             succeeded. 
  6763.  
  6764.     FALSE 
  6765.             An error occurred. The WinGetLastError function may return the 
  6766.             following error: 
  6767.  
  6768.                 PMERR_INVALID_PARAMETERS 
  6769.  
  6770.  
  6771. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  6772.  
  6773.  fSuccess(BOOL) 
  6774.     Success indicator. 
  6775.     TRUE 
  6776.             Setting of the notebook status line bidirectional attributes 
  6777.             succeeded. 
  6778.  
  6779.     FALSE 
  6780.             An error occurred. The WinGetLastError function may return the 
  6781.             following error: 
  6782.  
  6783.                 PMERR_INVALID_PARAMETERS 
  6784.  
  6785.  
  6786. ΓòÉΓòÉΓòÉ <hidden> NOTES - BKM_SETSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6787.  
  6788.  
  6789. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - BKM_SETSTATUSLINEBIDIATTR ΓòÉΓòÉΓòÉ
  6790.  
  6791.  The Default window procedure does not expect to receive this message and 
  6792. therefore takes no action on it other than to return FALSE 
  6793.  
  6794.  
  6795. ΓòÉΓòÉΓòÉ 14.3.4. BKM_SETTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6796.  
  6797.  
  6798. ΓòÉΓòÉΓòÉ <hidden> Topics - BKM_SETTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6799.  
  6800. Select an item: 
  6801.  
  6802.       Main Panel 
  6803.       Parameters 
  6804.       Return Values 
  6805.       Notes 
  6806.       Default Processing 
  6807.  
  6808.  
  6809. ΓòÉΓòÉΓòÉ <hidden> MAIN - BKM_SETTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6810.  
  6811. Cause: 
  6812.  
  6813. This message sets the bidi attribute for a specific tab text. 
  6814.  
  6815. Parameters: 
  6816.  
  6817.  
  6818. param1
  6819.     ULONG            ulPageID       Page ID.
  6820.  
  6821. param2
  6822.     PBD_ATTR_MASK    pBD_Attr_Mask  Pointer.
  6823.  
  6824. returns
  6825.     BOOL             fsuccess       Success indicator.
  6826.  
  6827.  
  6828. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - BKM_SETTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6829.  
  6830.  ulpageID (ULONG) 
  6831.     Page ID. 
  6832.  
  6833.     Page identifier of the page whose tab text is assigned with new 
  6834.     bidirectional attributes. 
  6835.  
  6836.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  6837.     Pointer. 
  6838.  
  6839.     Pointer to the BD_ATTR_MASK data structure containing the new bidirectional 
  6840.     attributes. 
  6841.  
  6842.  
  6843. ΓòÉΓòÉΓòÉ <hidden> ulpageID ΓòÉΓòÉΓòÉ
  6844.  
  6845.  ulpageID (ULONG) 
  6846.     Page ID. 
  6847.  
  6848.     Page identifier of the page whose tab text is assigned with the new 
  6849.     bidirectional attributes. 
  6850.  
  6851.  
  6852. ΓòÉΓòÉΓòÉ <hidden> pBD_Attr_Mask ΓòÉΓòÉΓòÉ
  6853.  
  6854.  pBD_Attr_Mask (PBD_ATTR_MASK) 
  6855.     Pointer. 
  6856.  
  6857.     Pointer to the BD_ATTR_MASK data structure containte the new bidirectional 
  6858.     attributes. 
  6859.  
  6860.  
  6861. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - BKM_SETTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6862.  
  6863.  fSuccess(BOOL) 
  6864.     Success indicator. 
  6865.     TRUE 
  6866.             Setting of the notebook tab text bidirectional attributes 
  6867.             succeeded. 
  6868.  
  6869.     FALSE 
  6870.             An error occurred. The WinGetLastError function may return the 
  6871.             following error: 
  6872.  
  6873.                 PMERR_INVALID_PARAMETERS 
  6874.  
  6875.  
  6876. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  6877.  
  6878.  fSuccess(BOOL) 
  6879.     Success indicator. 
  6880.     TRUE 
  6881.             Setting of the notebook tab text bidirectional attributes 
  6882.             succeeded. 
  6883.  
  6884.     FALSE 
  6885.             An error occurred. The WinGetLastError function may return the 
  6886.             following error: 
  6887.  
  6888.                 PMERR_INVALID_PARAMETERS 
  6889.  
  6890.  
  6891. ΓòÉΓòÉΓòÉ <hidden> NOTES - BKM_SETTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6892.  
  6893. The mnemonic specified should treat all Arabic shapes in the same way. They 
  6894. should normalize both the typed key and the character in the TAB text to their 
  6895. "base shapes". This processing should be the same as done in the menu control. 
  6896.  
  6897.  
  6898. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - BKM_SETTABTEXTBIDIATTR ΓòÉΓòÉΓòÉ
  6899.  
  6900.  The Default window procedure does not expect to receive this message and 
  6901. therefore takes no action on it other than to return FALSE 
  6902.  
  6903.  
  6904. ΓòÉΓòÉΓòÉ 14.3.5. BKM_QUERYPAGEINFO ΓòÉΓòÉΓòÉ
  6905.  
  6906. The mp2 parameter of this message points to a BOOKPAGEINFO data structure. The 
  6907. pBidiInfo field in this data structure points to the BOOKPAGEBIDIINFO 
  6908. structure. 
  6909.  
  6910. The "fl" field of the BOOKPAGEINFO structure must have the BFA_BIDIINFO flag 
  6911. set to indicate that Bidi Attributes of the MajorTab/MinorTab/Status line text 
  6912. (as indicated by the other flags in the "fl" field) are queried. 
  6913.  
  6914.  
  6915. ΓòÉΓòÉΓòÉ 14.3.6. BKM_SETPAGEINFO ΓòÉΓòÉΓòÉ
  6916.  
  6917. The mp2 parameter of this message points to a BOOKPAGEINFO data structure. The 
  6918. pBidiInfo field in this data structure points to the BOOKPAGEBIDIINFO 
  6919. structure. 
  6920.  
  6921. The "fl" field of the BOOKPAGEINFO structure must have the BFA_BIDIINFO flag 
  6922. set to indicate that Bidi Attributes contained in the BOOKPAGEBIDIINFO 
  6923. structure are to be set for the Major Tab/Minor Tab/Status Line as indicated by 
  6924. the other flags set in this field. 
  6925.  
  6926.  
  6927. ΓòÉΓòÉΓòÉ 14.4. Value Set Control ΓòÉΓòÉΓòÉ
  6928.  
  6929. Processing of the Value-Set control messages in the PM Bidirectional 
  6930. environment is the same as in the non-bidirectional PM environemnt. However, 
  6931. the Value-Set control is sensitive to its Bidirectional attributes and handles 
  6932. formatting and presentation accordingly. 
  6933.  
  6934.  
  6935. ΓòÉΓòÉΓòÉ 14.4.1. VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  6936.  
  6937.  
  6938. ΓòÉΓòÉΓòÉ <hidden> Topics - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  6939.  
  6940. Select an item: 
  6941.  
  6942.       Main Panel 
  6943.       Parameters 
  6944.       Return Values 
  6945.       Notes 
  6946.       Default Processing 
  6947.  
  6948.  
  6949. ΓòÉΓòÉΓòÉ <hidden> MAIN - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  6950.  
  6951.  Cause: 
  6952.  
  6953. This message queries the bidi attributes for each text item in an application. 
  6954.  
  6955. Parameters: 
  6956.  
  6957.  
  6958. param1
  6959.      USHORT         usRow          Row index.
  6960.      USHORT         usColumn       Column index.
  6961.  
  6962. param2
  6963.      PULONG         pBidiAttr      Pointer.
  6964.  
  6965. returns
  6966.      BOOL           fsuccess       Success indicator.
  6967.  
  6968.  
  6969. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  6970.  
  6971.  usRow  (USHORT) 
  6972.     Row index. 
  6973.  
  6974.     Row index of the items to be queried. Rows have a value from 1 to 
  6975.     usRowCount field. This value, which is the total number of rows in the 
  6976.     value set, is specified in the VSCDATA data structure when the value set 
  6977.     control is created. 
  6978.  
  6979.  usColumn  (USHORT) 
  6980.     Column index. 
  6981.  
  6982.     Column index of the items to be queried. Columns have a value from 1 to 
  6983.     usColumnCount field. This value, which is the total number of columns in 
  6984.     the value set, is specified in the VSCDATA data structure when the value 
  6985.     set control is created. 
  6986.  
  6987.  pBidiAttr(PULONG) 
  6988.     Pointer. 
  6989.  
  6990.     pointer to the BIDIATTR structure. 
  6991.  
  6992.  
  6993. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  6994.  
  6995.  usRow  (USHORT) 
  6996.     Row index. 
  6997.  
  6998.     Row index of the items to be queried. Rows have a value from 1 to 
  6999.     usRowCount field. This value, which is the total number of rows in the 
  7000.     value set, is specified in the VSCDATA data structure when the value set 
  7001.     control is created. 
  7002.  
  7003.  
  7004. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7005.  
  7006.  usColumn  (USHORT) 
  7007.     Column index. 
  7008.  
  7009.     Column index of the items to be queried. Columns have a value from 1 to 
  7010.     usColumnCount field. This value, which is the total number of columns in 
  7011.     the value set, is specified in the VSCDATA data structure when the value 
  7012.     set control is created. 
  7013.  
  7014.  
  7015. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7016.  
  7017.  pBidiAttr(PULONG) 
  7018.     Pointer. 
  7019.  
  7020.     pointer to the BIDIATTR structure. 
  7021.  
  7022.  
  7023. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7024.  
  7025.  fSuccess(BOOL) 
  7026.     Success indicator. 
  7027.     TRUE 
  7028.             Query of the item bidi attributes succeeded. 
  7029.  
  7030.     FALSE 
  7031.             An error occurred. The WinGetLastError function may return the 
  7032.             following error: 
  7033.  
  7034.                 PMERR_INVALID_PARAMETERS 
  7035.  
  7036.  
  7037. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  7038.  
  7039.  fSuccess(BOOL) 
  7040.     Success indicator. 
  7041.     TRUE 
  7042.             Query of the item bidi attributes succeeded. 
  7043.  
  7044.     FALSE 
  7045.             An error occurred. The WinGetLastError function may return the 
  7046.             following error: 
  7047.  
  7048.                 PMERR_INVALID_PARAMETERS 
  7049.  
  7050.  
  7051. ΓòÉΓòÉΓòÉ <hidden> NOTES - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7052.  
  7053.  If item bidi attribute is not set (BDA_INIT is 0) the behavior is defined 
  7054. (inherited)  from the bidi attributes of the valueset. 
  7055.  
  7056.  
  7057. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - VM_QUERYITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7058.  
  7059.  The Default window procedure does not expect to receive this message and 
  7060. therefore takes no action on it other than to return FALSE 
  7061.  
  7062.  
  7063. ΓòÉΓòÉΓòÉ 14.4.2. VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7064.  
  7065.  
  7066. ΓòÉΓòÉΓòÉ <hidden> Topics - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7067.  
  7068. Select an item: 
  7069.  
  7070.       Main Panel 
  7071.       Parameters 
  7072.       Return Values 
  7073.       Notes 
  7074.       Default Processing 
  7075.  
  7076.  
  7077. ΓòÉΓòÉΓòÉ <hidden> MAIN - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7078.  
  7079.  Cause: 
  7080.  
  7081. This message sets the bidi attributes for each text item in an application. 
  7082.  
  7083. Parameters: 
  7084.  
  7085.  
  7086. param1
  7087.      USHORT    usRow     Row index.
  7088.      USHORT    usColumn  Column index.
  7089.  
  7090. param2
  7091.      ULONG     param2    Reserved.
  7092.  
  7093. returns
  7094.      BOOL      fsuccess  Success indicator.
  7095.  
  7096.  
  7097. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7098.  
  7099.  usRow  (USHORT) 
  7100.     Row index. 
  7101.  
  7102.     Row index of the value set item for which information is being specified. 
  7103.     Rows have a value from 1 to usRowCount field. This value, which is the 
  7104.     total number of rows in the value set, is specified in the VSCDATA data 
  7105.     structure when the value set control is created. 
  7106.  
  7107.  usColumn  (USHORT) 
  7108.     Column index. 
  7109.  
  7110.     Column index of the value set item for which information is being 
  7111.     specified. Columns have a value from 1 to usColumnCount field. This value, 
  7112.     which is the total number of columns in the value set, is specified in the 
  7113.     VSCDATA data structure when the value set control is created. 
  7114.  
  7115.  param2 (ULONG) 
  7116.     Reserved. 
  7117.  
  7118.     0 
  7119.             Reserved value, 0. 
  7120.  
  7121.  
  7122. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7123.  
  7124.  usRow  (USHORT) 
  7125.     Row index. 
  7126.  
  7127.     Row index of the value set item for which information is being specified. 
  7128.     Rows have a value from 1 to usRowCount field. This value, which is the 
  7129.     total number of rows in the value set, is specified in the VSCDATA data 
  7130.     structure when the value set control is created. 
  7131.  
  7132.  
  7133. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7134.  
  7135.  usColumn  (USHORT) 
  7136.     Column index. 
  7137.  
  7138.     Column index of the value set item for which information is being 
  7139.     specified. Columns have a value from 1 to usColumnCount field. This value, 
  7140.     which is the total number of columns in the value set, is specified in the 
  7141.     VSCDATA data structure when the value set control is created. 
  7142.  
  7143.  
  7144. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7145.  
  7146.  param2 (ULONG) 
  7147.     Reserved. 
  7148.     0 
  7149.             Reserved value, 0. 
  7150.  
  7151.  
  7152. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7153.  
  7154.  fSuccess(BOOL) 
  7155.     Success indicator. 
  7156.     TRUE 
  7157.             Setting of the bidi attribute succeeded. 
  7158.  
  7159.     FALSE 
  7160.             An error occurred. The WinGetLastError function may return the 
  7161.             following error: 
  7162.  
  7163.                 PMERR_INVALID_PARAMETERS 
  7164.  
  7165.  
  7166. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  7167.  
  7168.  fSuccess(BOOL) 
  7169.     Success indicator. 
  7170.     TRUE 
  7171.             Setting of the bidi attribute succeeded. 
  7172.  
  7173.     FALSE 
  7174.             An error occurred. The WinGetLastError function may return the 
  7175.             following error: 
  7176.  
  7177.                 PMERR_INVALID_PARAMETERS 
  7178.  
  7179.  
  7180. ΓòÉΓòÉΓòÉ <hidden> NOTES - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7181.  
  7182.  If item bidi attribute is not set (BDA_INIT is 0) the behavior is defined 
  7183. (inherited)  from the bidi attributes of the valueset. 
  7184.  
  7185.  
  7186. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - VM_SETITEMBIDIATTR ΓòÉΓòÉΓòÉ
  7187.  
  7188. The Default window procedure does not expect to receive this message and 
  7189. therefore takes no action on it other than to return FALSE 
  7190.  
  7191.  
  7192. ΓòÉΓòÉΓòÉ 14.5. General Bidi Window Messages ΓòÉΓòÉΓòÉ
  7193.  
  7194. Processing of general window messages in the PM Bidirectional environment is 
  7195. the same as in the non-bidirectional PM environemnt. 
  7196.  
  7197.  
  7198. ΓòÉΓòÉΓòÉ 14.5.1. WM_LANG_OPTIONS_DIALOG ΓòÉΓòÉΓòÉ
  7199.  
  7200.  
  7201. ΓòÉΓòÉΓòÉ <hidden> Topics - WM_LANG_OPTIONS_DIALOG ΓòÉΓòÉΓòÉ
  7202.  
  7203. Select an item: 
  7204.  
  7205.       Main Panel 
  7206.       Parameters 
  7207.       Return Values 
  7208.       Notes 
  7209.       Default Processing 
  7210.  
  7211.  
  7212. ΓòÉΓòÉΓòÉ <hidden> MAIN - WM_LANG_OPTIONS_DIALOG ΓòÉΓòÉΓòÉ
  7213.  
  7214.  Cause: 
  7215.  
  7216. This message is posted to the viewer to notify it that the language options 
  7217. configuration dialog for a certain window should be invoked. 
  7218.  
  7219. Parameters: 
  7220.  
  7221.  
  7222. param1
  7223.      HWND       Whwnd       Window handle.
  7224.  
  7225. param2
  7226.      ULONG      param2      Reserved.
  7227.  
  7228. returns
  7229.      BOOL       fsuccess    Success indicator.
  7230.  
  7231.  
  7232. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - WM_LANG_OPTIONS_DIALOG ΓòÉΓòÉΓòÉ
  7233.  
  7234.  Whwnd (HWND) 
  7235.     Window handle. 
  7236.  
  7237.     This contains the window handle of the window whose language options are to 
  7238.     be configured. 
  7239.  
  7240.  param2 (ULONG) 
  7241.     Reserved. 
  7242.  
  7243.     1 
  7244.             Reserved value, 1, for bidi. 
  7245.  
  7246.  
  7247. ΓòÉΓòÉΓòÉ <hidden> Whwnd ΓòÉΓòÉΓòÉ
  7248.  
  7249.  Whwnd (HWND) 
  7250.     This contains the window handle of the window whose language options are to 
  7251.     be configured. 
  7252.  
  7253.  
  7254. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7255.  
  7256.  param2 (ULONG) 
  7257.     Reserved. 
  7258.     0 
  7259.             Reserved value, 0. 
  7260.  
  7261.  
  7262. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - WM_LANG_OPTIONS_DIALOG ΓòÉΓòÉΓòÉ
  7263.  
  7264.  fSuccess(BOOL) 
  7265.     Success indicator. 
  7266.     TRUE 
  7267.             Changes in the bidi viewer succeeded. 
  7268.  
  7269.     FALSE 
  7270.             An error occurred. The WinGetLastError function may return the 
  7271.             following error: 
  7272.  
  7273.                 PMERR_INVALID_PARAMETERS 
  7274.  
  7275.  
  7276. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  7277.  
  7278.  fSuccess(BOOL) 
  7279.     Success indicator. 
  7280.     TRUE 
  7281.             Changes in the bidi viewer succeeded. 
  7282.  
  7283.     FALSE 
  7284.             An error occurred. The WinGetLastError function may return the 
  7285.             following error: 
  7286.  
  7287.                 PMERR_INVALID_PARAMETERS 
  7288.  
  7289.  
  7290. ΓòÉΓòÉΓòÉ <hidden> NOTES - WM_LANG_OPTIONS_DIALOG ΓòÉΓòÉΓòÉ
  7291.  
  7292. This message may be posted when the user wishes to invoke the languages option 
  7293. dialog using bidi key combinations. 
  7294.  
  7295.  
  7296. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - WM_LANG_OPTIONS_DIALOG ΓòÉΓòÉΓòÉ
  7297.  
  7298. The Default window procedure does not expect to receive this message and 
  7299. therefore takes no action on it other than to return FALSE 
  7300.  
  7301.  
  7302. ΓòÉΓòÉΓòÉ 14.5.2. WM_LANGVIEWINFOCHANGED ΓòÉΓòÉΓòÉ
  7303.  
  7304.  
  7305. ΓòÉΓòÉΓòÉ <hidden> Topics - WM_LANGVIEWINFOCHANGED ΓòÉΓòÉΓòÉ
  7306.  
  7307. Select an item: 
  7308.  
  7309.       Main Panel 
  7310.       Parameters 
  7311.       Return Values 
  7312.       Notes 
  7313.       Default Processing 
  7314.  
  7315.  
  7316. ΓòÉΓòÉΓòÉ <hidden> MAIN - WM_LANGVIEWINFOCHANGED ΓòÉΓòÉΓòÉ
  7317.  
  7318.  Cause: 
  7319.  
  7320. This message is sent by the system to notify the active language viewer window 
  7321. of the changes in the 'Bidi stat'. 
  7322.  
  7323. Parameters: 
  7324.  
  7325.  
  7326. param1
  7327.      ULONG      ulnotify    Type definition.
  7328.  
  7329. param2
  7330.      ULONG      param2      Reserved.
  7331.  
  7332. returns
  7333.      BOOL       fsuccess    Success indicator.
  7334.  
  7335.  
  7336. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - WM_LANGVIEWINFOCHANGED ΓòÉΓòÉΓòÉ
  7337.  
  7338.  ulnotify (ULONG) 
  7339.     Type definition. 
  7340.  
  7341.     This contains the value of the type of event that has taken place and which 
  7342.     is notified to the viewer. 
  7343.  
  7344.  param2 (ULONG) 
  7345.     Reserved. 
  7346.  
  7347.     0 
  7348.             Reserved value, 0. 
  7349.  
  7350.  
  7351. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7352.  
  7353.  ulnotify (ULONG) 
  7354.     This contains the value of the type of event that has taken place and which 
  7355.     is notified to the viewer. 
  7356.  
  7357.  
  7358. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7359.  
  7360.  param2 (ULONG) 
  7361.     Reserved. 
  7362.     0 
  7363.             Reserved value, 0. 
  7364.  
  7365.  
  7366. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - WM_LANGVIEWINFOCHANGED ΓòÉΓòÉΓòÉ
  7367.  
  7368.  fSuccess(BOOL) 
  7369.     Success indicator. 
  7370.     TRUE 
  7371.             Changes in the bidi viewer succeeded. 
  7372.  
  7373.     FALSE 
  7374.             An error occurred. The WinGetLastError function may return the 
  7375.             following error: 
  7376.  
  7377.                 PMERR_INVALID_PARAMETERS 
  7378.  
  7379.  
  7380. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  7381.  
  7382.  fSuccess(BOOL) 
  7383.     Success indicator. 
  7384.     TRUE 
  7385.             Changes in the bidi viewer succeeded. 
  7386.  
  7387.     FALSE 
  7388.             An error occurred. The WinGetLastError function may return the 
  7389.             following error: 
  7390.  
  7391.                 PMERR_INVALID_PARAMETERS 
  7392.  
  7393.  
  7394. ΓòÉΓòÉΓòÉ <hidden> NOTES - WM_LANGVIEWINFOCHANGED ΓòÉΓòÉΓòÉ
  7395.  
  7396. The first parameter of this message defines the type of event that has taken 
  7397. place and which is notified to the bidi viewer. 
  7398.  
  7399.  
  7400. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - WM_LANGVIEWINFOCHANGED ΓòÉΓòÉΓòÉ
  7401.  
  7402. The Default window procedure does not expect to receive this message and 
  7403. therefore takes no action on it other than to return FALSE 
  7404.  
  7405.  
  7406. ΓòÉΓòÉΓòÉ 14.5.3. WM_QUERYBIDIATTR ΓòÉΓòÉΓòÉ
  7407.  
  7408.  
  7409. ΓòÉΓòÉΓòÉ <hidden> Topics - WM_QUERYBIDIATTR ΓòÉΓòÉΓòÉ
  7410.  
  7411. Select an item: 
  7412.  
  7413.       Main Panel 
  7414.       Parameters 
  7415.       Return Values 
  7416.       Notes 
  7417.       Default Processing 
  7418.  
  7419.  
  7420. ΓòÉΓòÉΓòÉ <hidden> MAIN - WM_QUERYBIDIATTR ΓòÉΓòÉΓòÉ
  7421.  
  7422. Cause: 
  7423.  
  7424. This message is sent to a window procedure to query its bidi attributes. 
  7425.  
  7426. Parameters: 
  7427.  
  7428.  
  7429. param1
  7430.      ULONG     param1      Reserved.
  7431.  
  7432. param2
  7433.      ULONG     param2      Reserved.
  7434.  
  7435. returns
  7436.      BOOL      fsuccess    Success indicator.
  7437.  
  7438.  
  7439. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - WM_QUERYBIDIATTR ΓòÉΓòÉΓòÉ
  7440.  
  7441.  param1 (ULONG) 
  7442.     Reserved. 
  7443.  
  7444.     0 
  7445.             Reserved value, 0. 
  7446.  
  7447.  param2 (ULONG) 
  7448.     Reserved. 
  7449.  
  7450.     0 
  7451.             Reserved value, 0. 
  7452.  
  7453.  
  7454. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - WM_QUERYBIDIATTR ΓòÉΓòÉΓòÉ
  7455.  
  7456.  fSuccess(BOOL) 
  7457.     Success indicator. 
  7458.     TRUE 
  7459.             Query of the bidi attribute succeeded. 
  7460.  
  7461.     FALSE 
  7462.             An error occurred. The WinGetLastError function may return the 
  7463.             following error: 
  7464.  
  7465.                 PMERR_INVALID_PARAMETERS 
  7466.  
  7467.  
  7468. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  7469.  
  7470.  param1 (ULONG) 
  7471.     Reserved. 
  7472.     0 
  7473.             Reserved value, 0. 
  7474.  
  7475.  
  7476. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7477.  
  7478.  param2 (ULONG) 
  7479.     Reserved. 
  7480.     0 
  7481.             Reserved value, 0. 
  7482.  
  7483.  
  7484. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  7485.  
  7486.  fSuccess(BOOL) 
  7487.     Success indicator. 
  7488.     TRUE 
  7489.             Query of the bidi attribute succeeded. 
  7490.  
  7491.     FALSE 
  7492.             An error occurred. The WinGetLastError function may return the 
  7493.             following error: 
  7494.  
  7495.                 PMERR_INVALID_PARAMETERS 
  7496.  
  7497.  
  7498. ΓòÉΓòÉΓòÉ <hidden> NOTES - WM_QUERYBIDIATTR ΓòÉΓòÉΓòÉ
  7499.  
  7500. This message  is sent to a window procedure to query it's bidi attributes. This 
  7501. is done as part of WinQueryLangInfo processing. 
  7502.  
  7503.  
  7504. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - WM_QUERYBIDIATTR ΓòÉΓòÉΓòÉ
  7505.  
  7506. The Default window procedure returns the window bidi attributes, whose values 
  7507. are contained in the BIDIATTR. 
  7508.  
  7509.  
  7510. ΓòÉΓòÉΓòÉ 14.5.4. WM_QUERYBIDISTAT ΓòÉΓòÉΓòÉ
  7511.  
  7512.  
  7513. ΓòÉΓòÉΓòÉ <hidden> Topics - WM_QUERYBIDISTAT ΓòÉΓòÉΓòÉ
  7514.  
  7515. Select an item: 
  7516.  
  7517.       Main Panel 
  7518.       Parameters 
  7519.       Return Values 
  7520.       Notes 
  7521.       Default Processing 
  7522.  
  7523.  
  7524. ΓòÉΓòÉΓòÉ <hidden> MAIN - WM_QUERYBIDISTAT ΓòÉΓòÉΓòÉ
  7525.  
  7526. Cause: 
  7527.  
  7528. This message is sent to a window procedure to query its bidi status. 
  7529.  
  7530. Parameters: 
  7531.  
  7532.  
  7533. param1
  7534.      ULONG       param1      Reserved.
  7535.  
  7536. param2
  7537.      ULONG       param2      Reserved.
  7538.  
  7539. returns
  7540.      BOOL        fsuccess    Success indicator.
  7541.  
  7542.  
  7543. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - WM_QUERYBIDISTAT ΓòÉΓòÉΓòÉ
  7544.  
  7545.  param1 (ULONG) 
  7546.     Reserved. 
  7547.  
  7548.     0 
  7549.             Reserved value, 0. 
  7550.  
  7551.  param2 (ULONG) 
  7552.     Reserved. 
  7553.  
  7554.     0 
  7555.             Reserved value, 0. 
  7556.  
  7557.  
  7558. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - WM_QUERYBIDISTAT ΓòÉΓòÉΓòÉ
  7559.  
  7560.  fSuccess(BOOL) 
  7561.     Success indicator. 
  7562.     TRUE 
  7563.             Query of the bidi status succeeded. 
  7564.  
  7565.     FALSE 
  7566.             An error occurred. The WinGetLastError function may return the 
  7567.             following error: 
  7568.  
  7569.                 PMERR_INVALID_PARAMETERS 
  7570.  
  7571.  
  7572. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  7573.  
  7574.  param1 (ULONG) 
  7575.     Reserved. 
  7576.     0 
  7577.             Reserved value, 0. 
  7578.  
  7579.  
  7580. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7581.  
  7582.  param2 (ULONG) 
  7583.     Reserved. 
  7584.     0 
  7585.             Reserved value, 0. 
  7586.  
  7587.  
  7588. ΓòÉΓòÉΓòÉ <hidden> fsuccess ΓòÉΓòÉΓòÉ
  7589.  
  7590.  fSuccess(BOOL) 
  7591.     Success indicator. 
  7592.     TRUE 
  7593.             Query of the bidi status succeeded. 
  7594.  
  7595.     FALSE 
  7596.             An error occurred. The WinGetLastError function may return the 
  7597.             following error: 
  7598.  
  7599.                 PMERR_INVALID_PARAMETERS 
  7600.  
  7601.  
  7602. ΓòÉΓòÉΓòÉ <hidden> NOTES - WM_QUERYBIDISTAT ΓòÉΓòÉΓòÉ
  7603.  
  7604. This message is sent to a window procedure to query it's bidi status (these 
  7605. values are contained in the BIDI_STAT). This is done as part of 
  7606. WinQueryLangInfo processing. 
  7607.  
  7608.  
  7609. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - WM_QUERYBIDISTAT ΓòÉΓòÉΓòÉ
  7610.  
  7611. The Default window procedure returns the window Bidi status (these values are 
  7612. contained in the BIDI_STAT). 
  7613.  
  7614.  
  7615. ΓòÉΓòÉΓòÉ 14.5.5. WM_SETBIDIATTR ΓòÉΓòÉΓòÉ
  7616.  
  7617.  
  7618. ΓòÉΓòÉΓòÉ <hidden> Topics - WM_SETBIDIATTR ΓòÉΓòÉΓòÉ
  7619.  
  7620. Select an item: 
  7621.  
  7622.       Main Panel 
  7623.       Parameters 
  7624.       Return Values 
  7625.       Notes 
  7626.       Default Processing 
  7627.  
  7628.  
  7629. ΓòÉΓòÉΓòÉ <hidden> MAIN - WM_SETBIDIATTR ΓòÉΓòÉΓòÉ
  7630.  
  7631.  Cause: 
  7632.  
  7633. This message is sent to a window procedure to notify it that the bidi 
  7634. attributes of that window are about to be changed. 
  7635.  
  7636. Parameters: 
  7637.  
  7638.  
  7639. param1
  7640.     ULONG   ulData     Attribute data.
  7641.  
  7642. param2
  7643.     ULONG   ulMask     Value mask.
  7644.  
  7645. returns
  7646.     ULONG   fresult    Result value.
  7647.  
  7648.  
  7649. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - WM_SETBIDIATTR ΓòÉΓòÉΓòÉ
  7650.  
  7651.  ulData  (ULONG) 
  7652.     Attribute data. 
  7653.  
  7654.     The value of the specified fields to be set in the Bidi attributes. These 
  7655.     values are contained in the BIDIATTR. 
  7656.  
  7657.  ulMask  (ULONG) 
  7658.     Value Mask. 
  7659.  
  7660.     A mask value that is used to indicate which fields, in the Bidi attributes 
  7661.     structure have to be set. Only the bits that are set in ulMask (see 
  7662.     BIDIATTRM), are enabled for update by the values in ulData. 
  7663.  
  7664.  
  7665. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  7666.  
  7667.  ulData  (ULONG) 
  7668.     Attribute data. 
  7669.  
  7670.     The value of the specified fields to be set in the Bidi attributes. These 
  7671.     values are contained in the BIDIATTR. 
  7672.  
  7673.  
  7674. ΓòÉΓòÉΓòÉ <hidden> param2 ΓòÉΓòÉΓòÉ
  7675.  
  7676.  ulMask  (ULONG) 
  7677.     Value mask. 
  7678.  
  7679.     A mask value that is used to indicate which fields, in the Bidi attributes 
  7680.     structure have to be set. Only the bits that are set in ulMask (see 
  7681.     BIDIATTRM), are enabled for update by the values in ulData. 
  7682.  
  7683.  
  7684. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - WM_SETBIDIATTR ΓòÉΓòÉΓòÉ
  7685.  
  7686.  fresult(ULONG) 
  7687.     Result indicator. 
  7688.     SBI_MSG_NOT_PROCESSED: 
  7689.             This message notifies the sender that the message has NOT been 
  7690.             processed by the window procedure. This is returned from the 
  7691.             default window procedure. 
  7692.  
  7693.     SBI_MSG_PROCESSED: 
  7694.             This message notifies the sender that the message has been 
  7695.             processed by the window procedure. 
  7696.  
  7697.     SBI_MSG_PROCESSED_SELF: 
  7698.             This message notifies the sender that the window procedure has 
  7699.             processed the message for itself, but it leaves it for the sender 
  7700.             to determine the processing that has to be done for children. 
  7701.  
  7702.  
  7703. ΓòÉΓòÉΓòÉ <hidden> fresult ΓòÉΓòÉΓòÉ
  7704.  
  7705.  fresult(ULONG) 
  7706.     Result indicator. 
  7707.     SBI_MSG_NOT_PROCESSED: 
  7708.             This message notifies the sender that the message has NOT been 
  7709.             processed by the window procedure.  This is returned from the 
  7710.             default window procedure. 
  7711.  
  7712.     SBI_MSG_PROCESSED: 
  7713.             This message notifies the sender that the message has been 
  7714.             processed by the window procedure. 
  7715.  
  7716.     SBI_MSG_PROCESSED_SELF: 
  7717.             This message notifies the sender that the window procedure has 
  7718.             processed the message for itself, but  it leaves it for the sender 
  7719.             to determine the processing that has to be done for children. 
  7720.  
  7721.  
  7722. ΓòÉΓòÉΓòÉ <hidden> NOTES - WM_SETBIDIATTR ΓòÉΓòÉΓòÉ
  7723.  
  7724. The message gives the window procedure a chance to ignore the request, set the 
  7725. attributes itself, or let the system default processing handle the operation 
  7726. for it. 
  7727.  
  7728. It is optionaly sent to a window procedure when the bidi attributes of this 
  7729. window are about to be changed (the value is the BIDIATTR). This is done as 
  7730. part of WinQueryLangInfo processing. 
  7731.  
  7732.  
  7733. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - WM_SETBIDIATTR ΓòÉΓòÉΓòÉ
  7734.  
  7735.  When the WinSetLangInfo function sends this message,  the default window 
  7736. returns  SBI_MSG_NOT_PROCESSED which causes  WinQueryLangInfo  to set the Bidi 
  7737. Attributes  by itself  (the value is contained in the BIDIATTR). 
  7738.  
  7739.  
  7740. ΓòÉΓòÉΓòÉ 14.5.6. WM_SETBIDISTAT ΓòÉΓòÉΓòÉ
  7741.  
  7742.  
  7743. ΓòÉΓòÉΓòÉ <hidden> Topics - WM_SETBIDISTAT ΓòÉΓòÉΓòÉ
  7744.  
  7745. Select an item: 
  7746.  
  7747.       Main Panel 
  7748.       Parameters 
  7749.       Return Values 
  7750.       Notes 
  7751.       Default Processing 
  7752.  
  7753.  
  7754. ΓòÉΓòÉΓòÉ <hidden> MAIN - WM_SETBIDISTAT ΓòÉΓòÉΓòÉ
  7755.  
  7756.  Cause: 
  7757.  
  7758. This message is sent to a window procedure to notify it that the bidi status of 
  7759. that window is about to be changed. 
  7760.  
  7761. Parameters: 
  7762.  
  7763.  
  7764. param1
  7765.     ULONG    ulData     Attribute data.
  7766.  
  7767. param2
  7768.     ULONG    ulMask     Value mask.
  7769.  
  7770. returns
  7771.     ULONG    fresult    Result value.
  7772.  
  7773.  
  7774. ΓòÉΓòÉΓòÉ <hidden> PARAMETERS - WM_SETBIDISTAT ΓòÉΓòÉΓòÉ
  7775.  
  7776.  ulData  (ULONG) 
  7777.     Attribute data. 
  7778.  
  7779.     The value of the specified fields to be set in the Bidi status. These 
  7780.     values are contained in the BIDISTAT. 
  7781.  
  7782.  ulMask (ULONG) 
  7783.     Value Mask. 
  7784.  
  7785.     A mask value that is used to indicate which fields, in the Bidi status 
  7786.     structure have to be set. Only the bits that are set in ulMask (see 
  7787.     BIDISTATM), are enabled for update by the values in ulData. 
  7788.  
  7789.  
  7790. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  7791.  
  7792.  ulData  (ULONG) 
  7793.     Attribute data. 
  7794.  
  7795.     The value of the specified fields to be set in the Bidi status. These 
  7796.     values are contained in the BIDISTAT. 
  7797.  
  7798.  
  7799. ΓòÉΓòÉΓòÉ <hidden> param1 ΓòÉΓòÉΓòÉ
  7800.  
  7801.  ulMask (ULONG) 
  7802.     Value mask. 
  7803.  
  7804.     A mask value that is used to indicate which fields, in the Bidi status 
  7805.     structure have to be set. Only the bits that are set in ulMask (see 
  7806.     BIDISTATM), are enabled for update by the values in ulData. 
  7807.  
  7808.  
  7809. ΓòÉΓòÉΓòÉ <hidden> RETURN VALUES - WM_SETBIDISTAT ΓòÉΓòÉΓòÉ
  7810.  
  7811.  fresult(ULONG) 
  7812.     Result indicator. 
  7813.     SBI_MSG_NOT_PROCESSED: 
  7814.             This message notifies the sender that the message has NOT been 
  7815.             processed by the window procedure.  This is returned from the 
  7816.             default window procedure. 
  7817.  
  7818.     SBI_MSG_PROCESSED: 
  7819.             This message notifies the sender that the message has been 
  7820.             processed by the window procedure. 
  7821.  
  7822.     SBI_MSG_PROCESSED_SELF: 
  7823.             This message notifies the sender that the window procedure has 
  7824.             processed the message for itself, but  it leaves it for the sender 
  7825.             to determine the processing that has to be done for children. 
  7826.  
  7827.  
  7828. ΓòÉΓòÉΓòÉ <hidden> fresult ΓòÉΓòÉΓòÉ
  7829.  
  7830.  fresult(ULONG) 
  7831.     Result indicator. 
  7832.     SBI_MSG_NOT_PROCESSED: 
  7833.             This message notifies the sender that the message has NOT been 
  7834.             processed by the window procedure.  This is returned from the 
  7835.             default window procedure. 
  7836.  
  7837.     SBI_MSG_PROCESSED: 
  7838.             This message notifies the sender that the message has been 
  7839.             processed by the window procedure. 
  7840.  
  7841.     SBI_MSG_PROCESSED_SELF: 
  7842.             This message notifies the sender that the window procedure has 
  7843.             processed the message for itself, but  it leaves it for the sender 
  7844.             to determine the processing that has to be done for children. 
  7845.  
  7846.  
  7847. ΓòÉΓòÉΓòÉ <hidden> NOTES - WM_SETBIDISTAT ΓòÉΓòÉΓòÉ
  7848.  
  7849. The message gives the window procedure a chance to ignore the request, set the 
  7850. status itself, or let the system default processing handle the operation for 
  7851. it. 
  7852.  
  7853. It is optionaly sent to a window procedure when the bidi status of this window 
  7854. are about to be changed (the value is contained in the BIDI_STAT). This is done 
  7855. as part of WinQueryLangInfo processing. 
  7856.  
  7857.  
  7858. ΓòÉΓòÉΓòÉ <hidden> DEFAULT PROCESSING - WM_SETBIDISTAT ΓòÉΓòÉΓòÉ
  7859.  
  7860.  When the WinSetLangInfo function sends this message,  the default window 
  7861. procedure returns  SBI_MSG_NOT_PROCESSED which causes WinSetLangInfo to set the 
  7862. Bidi Status by  itself. (the value is contained in the  BIDI_STAT). 
  7863.  
  7864.  
  7865. ΓòÉΓòÉΓòÉ 15. Bidirectional Support Window Functions ΓòÉΓòÉΓòÉ
  7866.  
  7867. This section contains an alphabetical list of the functions which are available 
  7868. for controlling windows. These functions enable an application to create, size, 
  7869. move, and control windows and their contents in the Bidirectional programming 
  7870. environment. 
  7871.  
  7872. See the Presentation Manager Programming Guide and Reference for details on 
  7873. commom programming techniques for managing the window environment, in general. 
  7874.  
  7875.  
  7876. ΓòÉΓòÉΓòÉ <hidden> Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7877.  
  7878.  
  7879. ΓòÉΓòÉΓòÉ <hidden> Topics - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7880.  
  7881.  Select an item: 
  7882.  
  7883.       Function Syntax 
  7884.       Parameters 
  7885.       Return Values 
  7886.       Example 
  7887.  
  7888.  
  7889. ΓòÉΓòÉΓòÉ <hidden> Syntax - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7890.  
  7891. /********************************************/
  7892. /* This function returns a flag to classify */
  7893. /* the given codepage.                      */
  7894. /********************************************/
  7895.  
  7896. #define INCL_PMBIDI
  7897. #include <os2.h>
  7898.  
  7899. ULONG     codepage;     /* Codepage value */
  7900. ULONG     cp;           /* Return value   */
  7901.  
  7902.    cp  =  Win_BD_ClassifyCodepage ( codepage );
  7903.  
  7904.  
  7905. ΓòÉΓòÉΓòÉ <hidden> Parameters - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7906.  
  7907.  codepage  (ULONG) - input 
  7908.     code page. 
  7909.  
  7910.     The value of the code page to be classified. 
  7911.  
  7912.  
  7913. ΓòÉΓòÉΓòÉ <hidden> Return Values - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7914.  
  7915.  cp  (ULONG) - return 
  7916.     Code page indicator. 
  7917.  
  7918.  OL 
  7919.     A none Bidi code page. 
  7920.  
  7921.  CP_IS_BIDI 
  7922.     The code page is bidi. The following are possible values: 
  7923.  
  7924.     CP_IS_ARABIC 
  7925.             The code page is Arabic. 
  7926.     CP_IS_ARABIC2 
  7927.             The code page is Arabic 2. 
  7928.  
  7929.  
  7930. ΓòÉΓòÉΓòÉ <hidden> Errors - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7931.  
  7932.  
  7933. ΓòÉΓòÉΓòÉ <hidden> Notes - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7934.  
  7935.  
  7936. ΓòÉΓòÉΓòÉ <hidden> Example - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7937.  
  7938. to be added 
  7939.  
  7940.  
  7941. ΓòÉΓòÉΓòÉ <hidden> Related Functions - Win_BD_ClassifyCodepage ΓòÉΓòÉΓòÉ
  7942.  
  7943.  Related Functions 
  7944.  
  7945.      There are no related functions. 
  7946.  
  7947.  
  7948. ΓòÉΓòÉΓòÉ <hidden> Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  7949.  
  7950.  
  7951. ΓòÉΓòÉΓòÉ <hidden> Topics - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  7952.  
  7953. Select an item: 
  7954.  
  7955.       Function Syntax 
  7956.       Parameters 
  7957.       Return Values 
  7958.       Notes 
  7959.       Example 
  7960.       Related Functions 
  7961.  
  7962.  
  7963. ΓòÉΓòÉΓòÉ <hidden> Syntax - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  7964.  
  7965. /******************************************/
  7966. /* This function checks if a string is an */
  7967. /* 'AllBidi' string.                      */
  7968. /******************************************/
  7969.  
  7970. #define INCL_PMBIDI
  7971. #include <os2.h>
  7972.  
  7973. PCHAR     pch;          /* Input string */
  7974. ULONG     ulMaxlen;     /* Number of characters */
  7975. ULONG     allBidi;      /* Return value   */
  7976.  
  7977.    allBidi  =  Win_BD_IsStringAllBidi ( pch, ulMaxlen );
  7978.  
  7979.  
  7980. ΓòÉΓòÉΓòÉ <hidden> Parameters - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  7981.  
  7982.  pch  (PCHAR) - input 
  7983.     Input string. 
  7984.  
  7985.     The input string to be checked. 
  7986.  
  7987.  ulMaxlen  (ULONG) - input 
  7988.     Number of characters. 
  7989.  
  7990.     The number of characters in the string to be checked. 
  7991.  
  7992.  
  7993. ΓòÉΓòÉΓòÉ <hidden> Return Values - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  7994.  
  7995.  allBidi  (ULONG) - return 
  7996.     All Bidi indicator. 
  7997.  
  7998.     TRUE 
  7999.             The string contains one or more National Language Characters. 
  8000.  
  8001.     FALSE 
  8002.             The string does not contain any National Language characters. 
  8003.  
  8004.  
  8005. ΓòÉΓòÉΓòÉ <hidden> Errors - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  8006.  
  8007.  
  8008. ΓòÉΓòÉΓòÉ <hidden> Notes - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  8009.  
  8010. The string is an "allBidi" string if all the characters in the string are only 
  8011. Bidi characters (i.e. no LATIN characters) 
  8012.  
  8013.  
  8014. ΓòÉΓòÉΓòÉ <hidden> Example - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  8015.  
  8016. to be added 
  8017.  
  8018.  
  8019. ΓòÉΓòÉΓòÉ <hidden> Related Functions - Win_BD_IsStringAllBidi ΓòÉΓòÉΓòÉ
  8020.  
  8021. Related Functions 
  8022.  
  8023.      Win_BD_IsStringBidi 
  8024.  
  8025.  
  8026. ΓòÉΓòÉΓòÉ <hidden> Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8027.  
  8028.  
  8029. ΓòÉΓòÉΓòÉ <hidden> Topics - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8030.  
  8031. Select an item: 
  8032.  
  8033.       Function Syntax 
  8034.       Parameters 
  8035.       Return Values 
  8036.       Notes 
  8037.       Example 
  8038.       Related Functions 
  8039.  
  8040.  
  8041. ΓòÉΓòÉΓòÉ <hidden> Syntax - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8042.  
  8043. /******************************************/
  8044. /* This function checks if a string is a  */
  8045. /* Bidi string.                           */
  8046. /******************************************/
  8047.  
  8048. #define INCL_PMBIDI
  8049. #include <os2.h>
  8050.  
  8051. PCHAR     pch;          /* Input string */
  8052. ULONG     ulMaxlen;     /* Number of characters */
  8053. ULONG     Bidistr;      /* Return value   */
  8054.  
  8055.    Bidistr  =  Win_BD_IsStringBidi ( pch, ulMaxlen );
  8056.  
  8057.  
  8058. ΓòÉΓòÉΓòÉ <hidden> Parameters - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8059.  
  8060.  pch  (PCHAR) - input 
  8061.     Input string. 
  8062.  
  8063.     The input string to be checked. 
  8064.  
  8065.  ulMaxlen  (ULONG) - input 
  8066.     Number of characters. 
  8067.  
  8068.     The number of characters in the string to be checked. 
  8069.  
  8070.  
  8071. ΓòÉΓòÉΓòÉ <hidden> Return Values - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8072.  
  8073.  Bidistr(BOOL) - return 
  8074.     Bidi string indicator. 
  8075.  
  8076.     TRUE 
  8077.             String contains ONLY National Language Characters. 
  8078.  
  8079.     FALSE 
  8080.             String contains some LATIN characters. 
  8081.  
  8082.  
  8083. ΓòÉΓòÉΓòÉ <hidden> Errors - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8084.  
  8085.  
  8086. ΓòÉΓòÉΓòÉ <hidden> Notes - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8087.  
  8088. A Bidi string is a string that contains at least one of the characters that are 
  8089. NATIONAL LANGUAGE characters in the appropriate codepage. 
  8090.  
  8091.  
  8092. ΓòÉΓòÉΓòÉ <hidden> Example - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8093.  
  8094. to be added 
  8095.  
  8096.  
  8097. ΓòÉΓòÉΓòÉ <hidden> Related Functions - Win_BD_IsStringBidi ΓòÉΓòÉΓòÉ
  8098.  
  8099. Related Functions 
  8100.  
  8101.      Win_BD_IsStringAllBidi 
  8102.  
  8103.  
  8104. ΓòÉΓòÉΓòÉ 15.1. WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8105.  
  8106.  
  8107. ΓòÉΓòÉΓòÉ <hidden> Topics - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8108.  
  8109. Select an item: 
  8110.  
  8111.       Function Syntax 
  8112.       Parameters 
  8113.       Return Values 
  8114.       Notes 
  8115.       Example 
  8116.       Related Functions 
  8117.  
  8118.  
  8119. ΓòÉΓòÉΓòÉ <hidden> Syntax - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8120.  
  8121. /****************************************/
  8122. /* This function queries the current    */
  8123. /* or system keyboard layer.            */
  8124. /****************************************/
  8125.  
  8126. #define INCL_PMBIDI
  8127. #include <os2.h>
  8128.  
  8129. HWND      hwnd;         /* Window handle */
  8130. ULONG     ulLayerID;    /* Return value  */
  8131.  
  8132.       ulLayerID =  WinQueryKbdLayer( hwnd );
  8133.  
  8134.  
  8135. ΓòÉΓòÉΓòÉ <hidden> Parameters - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8136.  
  8137.  hwnd  (HWND) - input 
  8138.     Window handle. 
  8139.  
  8140.     The window handle of the window for which the keyboard layer is queried, or 
  8141.     HWND_DESKTOP. 
  8142.  
  8143.  
  8144. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8145.  
  8146.  ulLayerID(ULONG) - return 
  8147.     Result indicator. 
  8148.  
  8149.     Returns the value of the current keyboard layer. 
  8150.  
  8151.     KBDLAYER_0 
  8152.             The default/base layout used for the codepage. 
  8153.  
  8154.     KBDLAYER_1 
  8155.             The first country/language keyboard layout. 
  8156.  
  8157.  
  8158. ΓòÉΓòÉΓòÉ <hidden> Errors - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8159.  
  8160.  
  8161. ΓòÉΓòÉΓòÉ <hidden> Notes - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8162.  
  8163. The current keyboard layer queried is the one maintained for the window. 
  8164.  
  8165.  
  8166. ΓòÉΓòÉΓòÉ <hidden> Example - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8167.  
  8168. This example queries the keyboard layer and draws a message box saying whether 
  8169. it was national language (Arabic/Hebrew) or Latin. 
  8170.  
  8171. #define INCL_PMBIDI
  8172. #define INCL_WINDIALOGS
  8173. #include <OS2.H>
  8174. #include <PMBIDI.H>
  8175.  
  8176. ULONG QueryKbdLayer(HWND hwnd)
  8177.  {
  8178.  ULONG KbdLayer;
  8179.  
  8180.     KbdLayer = WinQueryKbdLayer (hwnd); /* Window handle of the window whose */
  8181.                                         /* keyboard layer is queried         */
  8182.     if (KbdLayer)
  8183.            WinMessageBox (HWND_DESKTOP,
  8184.                           hwnd,
  8185.                           "The keyboard layer is National",
  8186.                           "Result",
  8187.                            0,
  8188.                            MB_OK);
  8189.  
  8190.     else
  8191.            WinMessageBox (HWND_DESKTOP,
  8192.                           hwnd,
  8193.                           "The keyboard layer is Latin",
  8194.                           "Result",
  8195.                            0,
  8196.                            MB_OK);
  8197.  
  8198.  }
  8199.  
  8200.  
  8201. ΓòÉΓòÉΓòÉ <hidden> Related Functions - WinQueryKbdLayer ΓòÉΓòÉΓòÉ
  8202.  
  8203. Related Functions 
  8204.  
  8205.      WinSetKbdLayer 
  8206.  
  8207.  
  8208. ΓòÉΓòÉΓòÉ 15.2. WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8209.  
  8210.  
  8211. ΓòÉΓòÉΓòÉ <hidden> Topics - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8212.  
  8213. Select an item: 
  8214.  
  8215.       Function Syntax 
  8216.       Parameters 
  8217.       Return Values 
  8218.       Notes 
  8219.       Example 
  8220.       Related Functions 
  8221.  
  8222.  
  8223. ΓòÉΓòÉΓòÉ <hidden> Syntax - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8224.  
  8225. /*******************************************/
  8226. /* This function returns the Bidirectional */
  8227. /* information of the data specified by    */
  8228. /* ulEffect.                               */
  8229. /*******************************************/
  8230.  
  8231. #define INCL_PMBIDI
  8232. #include <os2.h>
  8233.  
  8234. HWND      hwnd;         /* Window handle */
  8235. ULONG     ulEffect;     /* Specifies type of Bidi information to be queried */
  8236. ULONG     ulFlags;      /* Flag to determine optional behavior */
  8237. ULONG     ulReserved;   /* Reserved and must be zero */
  8238. ULONG     uldata;       /* Return value */
  8239.  
  8240.      ulData  =  WinQueryLangInfo ( hwnd, ulEffect, ulFlags, ulReserved );
  8241.  
  8242.  
  8243. ΓòÉΓòÉΓòÉ <hidden> Parameters - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8244.  
  8245.  hwnd  (HWND) - input 
  8246.     Window handle. 
  8247.  
  8248.     Handle of the window to be queried. This parameter should be NULLHANDLE 
  8249.     when the information being queried is not window-related. 
  8250.  
  8251.  ulEffect  (ULONG) - input 
  8252.     Specifies type of Bidi information to be queried. 
  8253.  
  8254.     It determines which type of Bidi-information is queried Depending on its 
  8255.     value. 
  8256.  
  8257.     LI_BD_CLIP_ATTR 
  8258.             Clipboard bidirectional attributes. 
  8259.  
  8260.     LI_BD_CLIP_CONV_ATTR 
  8261.             The clipboard conversion bidirectional attributes. 
  8262.  
  8263.     LI_BD_PROCESS_ATTR 
  8264.             The process bidirectional attributes. 
  8265.  
  8266.     LI_BD_WND_ATTR 
  8267.             The window Bidi attributes. 
  8268.  
  8269.     LI_BD_WND_STAT 
  8270.             The window Bidi status. 
  8271.  
  8272.  ulFlags  (ULONG) - input 
  8273.     Flag to determine optional behavior. 
  8274.  
  8275.     This is a word of bit flags that determines optional behavior of this 
  8276.     function. Possible values are: 
  8277.  
  8278.     LIF_NO_SENDMSG 
  8279.             No message is sent to the window to inform it of change. This value 
  8280.             is valid only when the operation is related to windows. 
  8281.  
  8282.  ulReserved  (ULONG) 
  8283.     Reserved. 
  8284.  
  8285.     Is reserved and must be Zero. 
  8286.  
  8287.  
  8288. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8289.  
  8290.  ulData  (ULONG) - return 
  8291.     Bidirectional value indicator. 
  8292.  
  8293.     BIDIATTR 
  8294.             Bidi attribute information. 
  8295.  
  8296.     BIDISTAT 
  8297.             Bidi status information. 
  8298.  
  8299.     NULL 
  8300.             Query of the bidi attributes was unsuccessful. 
  8301.  
  8302.  
  8303. ΓòÉΓòÉΓòÉ <hidden> Errors - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8304.  
  8305.  
  8306. ΓòÉΓòÉΓòÉ <hidden> Notes - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8307.  
  8308. The interpertation of this function is dependent on the value of ulEffect. This 
  8309. function is considered "window related" when ulEffect is LI_BD_WND_ATTR or 
  8310. LI_BD_WND_STAT. 
  8311.  
  8312. When ulEffect is not window related then the value of hwnd must be NULL. 
  8313.  
  8314. On the other hand, when ulEffect is window related, the function optionally 
  8315. sends a WM_QUERYBIDIATTR or WM_QUERYBIDISTAT message to the window procedure 
  8316. whose information is being queried. The window procedure which is queried for 
  8317. bidi information can take some action and/or perform any additional processing 
  8318. that is required at this time. When LIF_NO_SENDMSG flag is specified no window 
  8319. message is sent by the function. This can be used by the window procedure 
  8320. itself when it queries its own window-related bidirectional information (so 
  8321. that it does not receive a recursive message). 
  8322.  
  8323. It is recommended that the LIF_NO_SENDMSG flag is not turned on when the 
  8324. function is called from outside the window procedure whose attributes are being 
  8325. queried. Applications should generally use the default (send the message to the 
  8326. window procedure), so that the bidi aware window procedures can take the 
  8327. appropriate actions when the request to query their bidi attributes is made. 
  8328.  
  8329.  
  8330. ΓòÉΓòÉΓòÉ <hidden> Example - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8331.  
  8332. This example queries the Staus bits of a window. If these indicated the 
  8333. characters to be FINAL, a message is printed saying so else it says that they 
  8334. are not final characters 
  8335.  
  8336. #define INCL_PMBIDI
  8337. #include <OS2.H>
  8338. #include <PMBIDI.H>
  8339.  
  8340.  
  8341.  
  8342. VOID QueryLangInfo(HWND hwnd)
  8343.  {
  8344.  ULONG  BidiStat;
  8345.  
  8346.     BidiStat = WinQueryLangInfo(hwnd,        /* Window handle of the window whose      */
  8347.                                              /* status is queried                      */
  8348.                          LI_BD_WND_STAT,     /* The window status is queried           */
  8349.                          LIF_NO_SENDMSG,
  8350.                          0L);                /* Reserved to be 0L                      */
  8351.  
  8352.     if ( QUERY_BD_VALUE (BidiStat,BDSM_HKFLAGS) == BDS_HKFLAG_PUSH)
  8353.         WinMessageBox (HWND_DESKTOP,
  8354.                        hwnd,
  8355.                        "Push Hotkey is disabled",
  8356.                        "Result",
  8357.                         0,
  8358.                         MB_OK);
  8359.     else
  8360.         WinMessageBox (HWND_DESKTOP,
  8361.                        hwnd,
  8362.                        "Push Hotkey is enabled".
  8363.                        "Result",
  8364.                         0,
  8365.                         MB_OK);
  8366.  
  8367.  }
  8368.  
  8369.  
  8370. ΓòÉΓòÉΓòÉ <hidden> Related Functions - WinQueryLangInfo ΓòÉΓòÉΓòÉ
  8371.  
  8372. Related Functions 
  8373.  
  8374.      WinSetLangInfo 
  8375.  
  8376.  
  8377. ΓòÉΓòÉΓòÉ 15.3. WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8378.  
  8379.  
  8380. ΓòÉΓòÉΓòÉ <hidden> Topics - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8381.  
  8382. Select an item: 
  8383.  
  8384.       Function Syntax 
  8385.       Parameters 
  8386.       Return Values 
  8387.       Example 
  8388.       Related Functions 
  8389.  
  8390.  
  8391. ΓòÉΓòÉΓòÉ <hidden> Syntax - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8392.  
  8393. /*******************************************/
  8394. /*  This function queries the current      */
  8395. /*  'Language Viewer' window, registered   */
  8396. /*  by the system for a specific codepage. */
  8397. /*******************************************/
  8398.  
  8399. #define INCL_PMBIDI
  8400. #include <os2.h>
  8401.  
  8402. HAB       hab;          /* Anchor block    */
  8403. ULONG     Codepage;     /* Codepage value  */
  8404. HWND      hwnd;         /* Return value    */
  8405.  
  8406.       hwnd  =  WinQueryLangViewer( hab, Codepage );
  8407.  
  8408.  
  8409. ΓòÉΓòÉΓòÉ <hidden> Parameters - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8410.  
  8411.  hab  (HAB) - anchor block 
  8412.     Anchor block. 
  8413.  
  8414.     The anchor block handle of the application. 
  8415.  
  8416.  Codepage  (ULONG) - input 
  8417.     Window codepage. 
  8418.  
  8419.     The codepage for which the "Language Viewer" window is queried. The 
  8420.     following codepage values are supported: 
  8421.  
  8422.     864         Arabic PC. 
  8423.  
  8424.     862         Hebrew PC. 
  8425.  
  8426.  
  8427. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8428.  
  8429.  hwnd  (HWND) - return 
  8430.     Result indicator. 
  8431.  
  8432.     Returns the handle of the current language viewer. 
  8433.  
  8434.     NULLHANDLE 
  8435.             No language viewer is registered for this codepage. 
  8436.  
  8437.     Other 
  8438.             Handle of the current language viewer. 
  8439.  
  8440.  
  8441. ΓòÉΓòÉΓòÉ <hidden> Errors - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8442.  
  8443.  
  8444. ΓòÉΓòÉΓòÉ <hidden> Notes - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8445.  
  8446. None. 
  8447.  
  8448.  
  8449. ΓòÉΓòÉΓòÉ <hidden> Example - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8450.  
  8451. This example queries the Language Viewer window handle registered currently in 
  8452. the system for the currently used code page. 
  8453.  
  8454. #define INCL_PMBIDI
  8455. #include <OS2.H>
  8456. #include <PMBIDI.H>
  8457.  
  8458. HAB    hab;
  8459. HWND   hwnd;
  8460. HMQ    hmq;
  8461. ULONG  cp;
  8462.  
  8463.  
  8464. VOID QueryLanguageViewerWindow(VOID)
  8465.  {
  8466.     cp = WinQueryCp(hmq);                  /* Query current code page                */
  8467.  
  8468.     if (hwnd = WinQueryLangViewer(hab,     /* Anchor block handle of the application */
  8469.                                            /* that registered the Language Viewer    */
  8470.                          cp))              /* Current code page                      */
  8471.  
  8472.          WinMessageBox (HWND_DESKTOP,
  8473.                         hwnd,
  8474.                         "The Language Viewer handle was queried correctly",
  8475.                         "Result",
  8476.                          0,
  8477.                          MB_OK);
  8478.     else
  8479.          WinMessageBox (HWND_DESKTOP,
  8480.                         hwnd,
  8481.                         "No Language Viewer has been registered for this code page",
  8482.                         "Error",
  8483.                          0,
  8484.                          MB_OK);
  8485.  
  8486.  }
  8487.  
  8488.  
  8489. ΓòÉΓòÉΓòÉ <hidden> Related Functions - WinQueryLangViewer ΓòÉΓòÉΓòÉ
  8490.  
  8491. Related Functions 
  8492.  
  8493.      WinSetLangViewer 
  8494.  
  8495.  
  8496. ΓòÉΓòÉΓòÉ 15.4. WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8497.  
  8498.  
  8499. ΓòÉΓòÉΓòÉ <hidden> Topics - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8500.  
  8501. Select an item: 
  8502.  
  8503.       Function Syntax 
  8504.       Parameters 
  8505.       Return Values 
  8506.       Example 
  8507.       Related Functions 
  8508.  
  8509.  
  8510. ΓòÉΓòÉΓòÉ <hidden> Syntax - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8511.  
  8512. /****************************************/
  8513. /* This function sets the keyboard      */
  8514. /* layer.                               */
  8515. /****************************************/
  8516.  
  8517. #define INCL_PMBIDI
  8518. #include <os2.h>
  8519.  
  8520. HWND      hwnd;         /* Window handle */
  8521. ULONG     ulLayerID;    /* Specifies the keyboard layer */
  8522. ULONG     flFlags;      /* impact flages */
  8523. BOOL      fsuccess;     /* Return value  */
  8524.  
  8525.    fsuccess  =  WinSetKbdLayer  ( hwnd, ulLayerID, flFlags);
  8526.  
  8527.  
  8528. ΓòÉΓòÉΓòÉ <hidden> Parameters - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8529.  
  8530.  hwnd  (HWND) - input 
  8531.     Window handle. 
  8532.  
  8533.     Window handle of the window for which the keyboard layer is set, or 
  8534.     HWND_DESKTOP. 
  8535.  
  8536.  ulLayerID  (ULONG) - input 
  8537.     Keyboard layer. 
  8538.  
  8539.     ID of the keyboard layer being set. 
  8540.  
  8541.     KBDLAYER_0 
  8542.             This corresponds to the default/base layout used for the codepage. 
  8543.  
  8544.     KBDLAYER_1 
  8545.             This corresponds to the first country/language keyboard layout. 
  8546.             Usually, this maps to the specific language (e.g. Arabic or Hebrew 
  8547.             layout) 
  8548.  
  8549.  flFlags  (ULONG) - input 
  8550.     Impact flags. 
  8551.  
  8552.     Flags which impact the way WinSetKbdLayer works. 
  8553.  
  8554.     bit 0 = 0: 
  8555.             Post the WM_KBDLAYERCHANGED message. 
  8556.  
  8557.     bit 0 = 1: 
  8558.             Do not post the WM_KBDLAYERCHANGED message. 
  8559.  
  8560.  
  8561. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8562.  
  8563.  fSuccess  (BOOL) - return 
  8564.     Success indicator. 
  8565.  
  8566.     TRUE 
  8567.             Setting of the keyboard layer succeeded. 
  8568.  
  8569.     FALSE 
  8570.             An error occurred. The WinGetLAstError function may return the 
  8571.             following errors: 
  8572.  
  8573.                 PMERR_INVALID_HWND 
  8574.                 PMERR_INVALID_VALUE 
  8575.  
  8576.  
  8577. ΓòÉΓòÉΓòÉ <hidden> Errors - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8578.  
  8579.  
  8580. ΓòÉΓòÉΓòÉ <hidden> Notes - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8581.  
  8582. The system maintains one global keyboard layer variable. This variable is 
  8583. updated according to the layer information of the window that has the keyboard 
  8584. focus. 
  8585.  
  8586. WinSetKbdLayer saves the keyboard layer specified as an input parameter in an 
  8587. area maintained by the system on behalf of the window. If the window has the 
  8588. focus, the system keyboard layer is also set. 
  8589.  
  8590. When the value of hwnd is HWND_DESKTOP, only the system keyboard layer is 
  8591. updated. 
  8592.  
  8593.  
  8594. ΓòÉΓòÉΓòÉ <hidden> Example - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8595.  
  8596. This example sets the keyboard layer to National and posts the message 
  8597. WM_KBDLAYERCHANGED through setting the impact flags bit to zero. 
  8598.  
  8599. #define INCL_PMBIDI
  8600. #include <OS2.H>
  8601. #include <PMBIDI.H>
  8602.  
  8603.  
  8604. VOID SetKbdLayer(HWND hwnd)
  8605.  {
  8606.     if (WinSetKbdLayer(hwnd,
  8607.               KL_NATIONAL,            /* First country/language layout       */
  8608.               SKLF_SENDMSG))          /* Post the WM_KBDLAYERCHANGED message */
  8609.  
  8610.          WinMessageBox (HWND_DESKTOP,
  8611.                         hwnd,
  8612.                         "Setting keyboard layer succeeded",
  8613.                         "Result",
  8614.                          0,
  8615.                          MB_OK);
  8616.     else
  8617.          WinMessageBox (HWND_DESKTOP,
  8618.                         hwnd,
  8619.                         "Setting keyboard layer failed",
  8620.                         "Error",
  8621.                          0,
  8622.                          MB_OK);
  8623.  
  8624.  }
  8625.  
  8626.  
  8627. ΓòÉΓòÉΓòÉ <hidden> Related Functions - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  8628.  
  8629. Related Functions 
  8630.  
  8631.      WinQueryKbdLayer 
  8632.  
  8633.  
  8634. ΓòÉΓòÉΓòÉ 15.5. WinSetLangInfo ΓòÉΓòÉΓòÉ
  8635.  
  8636.  
  8637. ΓòÉΓòÉΓòÉ <hidden> Topics - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8638.  
  8639. Select an item: 
  8640.  
  8641.       Function Syntax 
  8642.       Parameters 
  8643.       Return Values 
  8644.       Notes 
  8645.       Example 
  8646.       Related Functions 
  8647.  
  8648.  
  8649. ΓòÉΓòÉΓòÉ <hidden> Syntax - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8650.  
  8651. /*******************************************/
  8652. /* This function sets the window Bidi      */
  8653. /* attributes and status.                  */
  8654. /*******************************************/
  8655.  
  8656. #define INCL_PMBIDI
  8657. #include <os2.h>
  8658.  
  8659. HWND      hwnd;         /* Window handle */
  8660. ULONG     ulEffect;     /* Specifies type of Bidi information to be set */
  8661. ULONG     ulData;       /* Data to be set in specified attribute */
  8662. ULONG     ulMask;       /* Mask value indicating attribute/status fields to be updated */
  8663. ULONG     ulFlags;      /* Flag to determine optional behavior */
  8664. ULONG     ulReserved;   /* Reserved */
  8665. ULONG     fsuccess;     /* Return value */
  8666.  
  8667.    fsuccess  =  WinSetLangInfo ( hwnd, ulEffect, ulData, ulMask,
  8668.                           ulFlags, ulReserved );
  8669.  
  8670.  
  8671. ΓòÉΓòÉΓòÉ <hidden> Parameters - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8672.  
  8673.  hwnd  (HWND) - input 
  8674.     Window handle. 
  8675.  
  8676.     Handle of the window whose attributes or status is to be set. This 
  8677.     parameter should be NULLHANDLE when the information being queried is not 
  8678.     window-related. 
  8679.  
  8680.  ulEffect  (ULONG) - input 
  8681.     Specifies the type of Bidi information to be set. 
  8682.  
  8683.     It determines which type of Bidi-information is set Depending on its value. 
  8684.  
  8685.     LI_BD_CLIP_ATTR 
  8686.             Clipboard bidirectional attributes. 
  8687.  
  8688.     LI_BD_CLIP_CONV_ATTR 
  8689.             The clipboard conversion bidirectional attributes. 
  8690.  
  8691.     LI_BD_PROCESS_ATTR 
  8692.             The process bidirectional attributes. 
  8693.  
  8694.     LI_BD_WND_ATTR 
  8695.             The window Bidi attributes. 
  8696.  
  8697.     LI_BD_WND_STAT 
  8698.             The window Bidi status. 
  8699.  
  8700.  ulData  (ULONG) - input 
  8701.     Data to be set in specified attribute. 
  8702.  
  8703.     The value of the specified fields to be set in the Bidi attributes or the 
  8704.     Bidi status.  These values are contained in the BIDIATTR and the BIDISTAT. 
  8705.  
  8706.  ulMask  (ULONG) - input 
  8707.     Mask value indicating attribute or status fields to be updated. This is a 
  8708.     bit value that is used to mask the uldata value when the effect is related 
  8709.     to a window (LI_BD_WND_ATTR or LI_BD_WND_STAT). Only the bits that are set 
  8710.     in ulMask, are enabled for update by the values in ulData. 
  8711.  
  8712.     Depending on the value of ulEffect, ulMask can have one or more of the 
  8713.     values in either the Bidi status (see BIDISTATM) or the Bidi attributes 
  8714.     (see BIDIATTRM). 
  8715.  
  8716.  ulFlags  (ULONG) 
  8717.     Flag to determine optional behavior. 
  8718.  
  8719.     These are flags that determine optional behavior of this function. The 
  8720.     following are possible values: 
  8721.  
  8722.     LIF_NO_SENDMSG 
  8723.             No message is sent to the window to inform it of change. This value 
  8724.             is valid only when the operation is related to windows. 
  8725.  
  8726.     LIF_CHILD_INHERIT 
  8727.             The operation is performed for the window whose handle is specified 
  8728.             and all his child windows. This value is valid only when the 
  8729.             operation is related to windows. 
  8730.  
  8731.     LIF_WND_REFRESH 
  8732.             Refresh all the windows whose bidirectional information is being 
  8733.             set. This value is valid only when the operation is related to 
  8734.             windows. 
  8735.  
  8736.  ulReserved  (ULONG) 
  8737.     Is reserved and must be Zero. 
  8738.  
  8739.  
  8740. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8741.  
  8742.  fSuccess  (ULONG) - return 
  8743.     Success indicator. 
  8744.  
  8745.     TRUE 
  8746.             Setting of the Bidi attribute succeeded. 
  8747.  
  8748.     FALSE 
  8749.             An error occurred. The WinGetLAstError function may return the 
  8750.             following errors: 
  8751.  
  8752.                 PMERR_INVALID_HWND 
  8753.                 PMERR_INVALID_VALUE 
  8754.  
  8755.  
  8756. ΓòÉΓòÉΓòÉ <hidden> Errors - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8757.  
  8758.  
  8759. ΓòÉΓòÉΓòÉ <hidden> Notes - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8760.  
  8761. The interpertation of the parameters is dependent on the value of ulEffect. 
  8762. This function is considered "window related" when ulEffect is LI_BD_WND_ATTR or 
  8763. LI_BD_WND_STAT. 
  8764.  
  8765. When ulEffect is not window related then the value of hwnd must be NULL and the 
  8766. ulMask value is ignored (ie no mask is used, the value provided in ulData is 
  8767. used to set the information). 
  8768.  
  8769. When ulEffect is window related, the function optionally sends a WM_SETBIDIATTR 
  8770. or WM_SETBIDISTAT message to the window procedure whose information is being 
  8771. set. The window procedure can set the bidi information by itself, and/or 
  8772. perform any additional processing that is required when its bidirectional 
  8773. information is set. When LIF_NO_SENDMSG flag is specified no window message is 
  8774. sent by the function. This can be used by the window procedure itself when it 
  8775. updates its own window-related bidirectional information (so that it does not 
  8776. receive a recursive message). 
  8777.  
  8778. It is recommended that the LIF_NO_SENDMSG flag is not turned on when the 
  8779. function is called from outside the window procedure whose attributes are being 
  8780. set. Applications should generaly use the default (send the message to the 
  8781. window procedure), so that the bidi aware window procedures can take the 
  8782. appropriate actions when the request to change their bidi attributes is made. 
  8783.  
  8784. There may be cases where the LIF_WND_REFRESH and/or the LIF_CHILD_INHERIT flags 
  8785. are ignored. This can happen when a window procedure processes any of the 
  8786. messages sent by this function (i.e when the LIF_NO_SENDMSG flag is not 
  8787. specified). In these cases, it is up to the window procedure code to determine 
  8788. whether a redraw operation is requiered and whether child windows should 
  8789. process the message or not. 
  8790.  
  8791. It is recommended that the LIF_NO_SENDMSG flag is NOT turned on, when the code 
  8792. executes outside the window procedure whose attributes are set. 
  8793.  
  8794. Applications should generally use the default (send the messege to the window 
  8795. procedure), so that Bidi-aware window procedures can take the appropriate 
  8796. actions when the request to change their Bidi attributes/status is made. 
  8797.  
  8798.  
  8799. ΓòÉΓòÉΓòÉ <hidden> Example - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8800.  
  8801. This example sets the window attributes and those of its children to make their 
  8802. WND and TEXT orientations RTL. 
  8803.  
  8804. #define INCL_PMBIDI
  8805. #include <OS2.H>
  8806. #include <PMBIDI.H>
  8807.  
  8808.  
  8809. VOID SetWindowBidiAttributes(HWND hwnd)
  8810.  {
  8811.     if (WinSetLangInfo(hwnd,
  8812.           LI_BD_WND_ATTR,           /* Type of information to be set is window attributes       */
  8813.           BDA_WND_ORIENT_RTL |      /* Data to be set is RTL Wnd and Text orientations          */
  8814.           BDA_TEXT_ORIENT_RTL,
  8815.           BDAM_WND_ORIENTATION |    /* Masks indicating which attributes to modify              */
  8816.           BDAM_TEXT_ORIENTATION,
  8817.           LIF_CHILD_INHERIT,       /* Flag to indicate that the operation is to be             */
  8818.                                     /* performed for that window and its children               */
  8819.           0L))                      /* Reserved to 0                                            */
  8820.  
  8821.          WinMessageBox (HWND_DESKTOP,
  8822.                         hwnd,
  8823.                         "Operation succeeded",
  8824.                         "Result",
  8825.                          0,
  8826.                          MB_OK);
  8827.     else
  8828.          WinMessageBox (HWND_DESKTOP,
  8829.                         hwnd,
  8830.                         "Operation failed",
  8831.                         "Error",
  8832.                          0,
  8833.                          MB_OK);
  8834.  
  8835.  }
  8836.  
  8837.  
  8838. ΓòÉΓòÉΓòÉ <hidden> Related Functions - WinSetLangInfo ΓòÉΓòÉΓòÉ
  8839.  
  8840. Related Functions 
  8841.  
  8842.      WinQueryLangInfo 
  8843.  
  8844.  
  8845. ΓòÉΓòÉΓòÉ 15.6. WinSetLangViewer ΓòÉΓòÉΓòÉ
  8846.  
  8847.  
  8848. ΓòÉΓòÉΓòÉ <hidden> Topics - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8849.  
  8850. Select an item: 
  8851.  
  8852.       Function Syntax 
  8853.       Parameters 
  8854.       Return Values 
  8855.       Notes 
  8856.       Example 
  8857.       Related Functions 
  8858.  
  8859.  
  8860. ΓòÉΓòÉΓòÉ <hidden> Syntax - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8861.  
  8862. /****************************************/
  8863. /* This function is used to register    */
  8864. /* a 'Language Viewer' window with the  */
  8865. /* system.                              */
  8866. /****************************************/
  8867.  
  8868. #define INCL_PMBIDI
  8869. #include <os2.h>
  8870.  
  8871. HAB       hab;          /* Anchor block    */
  8872. HWND      hwnd;         /* Window Handle   */
  8873. ULONG     Codepage;     /* window codepage */
  8874. HWND      hwndPrev;     /* return value    */
  8875.  
  8876.       hwndPrev  =  WinSetLangViewer( hab, hwnd, Codepage );
  8877.  
  8878.  
  8879. ΓòÉΓòÉΓòÉ <hidden> Parameters - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8880.  
  8881.  hab  (HAB) - anchor block 
  8882.     Anchor block. 
  8883.  
  8884.     The anchor block handle of the application that registers the Language 
  8885.     Viewer. 
  8886.  
  8887.  hwnd  (HWND) - input 
  8888.     Window handle. 
  8889.  
  8890.     The window handle of the new Language Viewer window. 
  8891.  
  8892.  Codepage  (ULONG) - input 
  8893.     Window codepage. 
  8894.  
  8895.     The codepage for which the "Language Viewer" window is registered. The 
  8896.     following codepage values are supported: 
  8897.  
  8898.     864         Arabic PC. 
  8899.  
  8900.     862         Hebrew PC. 
  8901.  
  8902.  
  8903. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8904.  
  8905.  hwnd  (HWND) - return 
  8906.     Result indicator. 
  8907.  
  8908.     Returns the previous Language Viewer handle for this codepage. 
  8909.  
  8910.     NULLHANDLE 
  8911.             No Language Viewer was previously registered for this codepage. 
  8912.  
  8913.     Other 
  8914.             Previous Language Viewer handle for this codepage. 
  8915.  
  8916.  
  8917. ΓòÉΓòÉΓòÉ <hidden> Errors - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8918.  
  8919.  
  8920. ΓòÉΓòÉΓòÉ <hidden> Notes - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8921.  
  8922. The "Language Viewer" window displays control and status information that is 
  8923. useful for users of a specific language. 
  8924.  
  8925. The "Language Viewer" window is sent  WM_LANG_INFO_CHANGED notification message 
  8926. by the system to inform it of significant events that are relevent to users of 
  8927. a specific language. 
  8928.  
  8929.  
  8930. ΓòÉΓòÉΓòÉ <hidden> Example - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8931.  
  8932. This example registers a new Language Viewer window for the system.  The 
  8933. current code page is used. 
  8934.  
  8935. #define INCL_PMBIDI
  8936. #include <OS2.H>
  8937. #include <PMBIDI.H>
  8938.  
  8939. HAB    hab;
  8940. HMQ    hmq;
  8941. ULONG  cp;
  8942.  
  8943.  
  8944. VOID SetLangViewerWindow(HWND hwnd)
  8945.  {
  8946.     cp = WinQueryCp(hmq);       /* Query current code page                */
  8947.  
  8948.     if (WinSetLangViewer(hab,   /* Anchor block handle of the application */
  8949.                                 /* that registers the Language Viewer     */
  8950.                          hwnd,  /* Window handle of the new language      */
  8951.                                 /* viewer window                          */
  8952.                          cp))   /* Current code page                      */
  8953.  
  8954.          WinMessageBox (HWND_DESKTOP,
  8955.                         hwnd,
  8956.                         "Setting Language Viewer window succeeded.",
  8957.                         "Replacing previous Lang Viewer window",
  8958.                          0,
  8959.                          MB_OK);
  8960.     else
  8961.          WinMessageBox (HWND_DESKTOP,
  8962.                         hwnd,
  8963.                         "Setting Language Viewer window succeeded."
  8964.                         "No previous Lang Viewer window",
  8965.                          0,
  8966.                          MB_OK);
  8967.  
  8968.  }
  8969.  
  8970.  
  8971. ΓòÉΓòÉΓòÉ <hidden> Related Functions - WinSetLangViewer ΓòÉΓòÉΓòÉ
  8972.  
  8973. Related Functions 
  8974.  
  8975.      WinQueryLangViewer 
  8976.  
  8977.  
  8978. ΓòÉΓòÉΓòÉ 16. Bidirectional Support GPI Functions ΓòÉΓòÉΓòÉ
  8979.  
  8980. This section contains the functions that are related to GPI bidirectional text 
  8981. processing. 
  8982.  
  8983. See the GPI Programming Guide and Reference for details on commom programming 
  8984. techniques for managing GPI. 
  8985.  
  8986.  
  8987. ΓòÉΓòÉΓòÉ 16.1. GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  8988.  
  8989.  
  8990. ΓòÉΓòÉΓòÉ <hidden> Topics - GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  8991.  
  8992. Select an item: 
  8993.  
  8994.       Function Syntax 
  8995.       Parameters 
  8996.       Return Values 
  8997.       Example 
  8998.       Related Functions 
  8999.  
  9000.  
  9001. ΓòÉΓòÉΓòÉ <hidden> Syntax - GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  9002.  
  9003. /*******************************************/
  9004. /* This function queries the bidirectional */
  9005. /* of a GPI presentation space.            */
  9006. /*******************************************/
  9007.  
  9008. #define INCL_PMBIDI
  9009. #include <os2.h>
  9010.  
  9011. HPS       hps;          /* Presentation space handle */
  9012. ULONG     ulBidiAttr;   /* Bidirectional Attributes word */
  9013.  
  9014.    ulBidiAttr =  GpiQueryBidiAttr  ( hps );
  9015.  
  9016.  
  9017. ΓòÉΓòÉΓòÉ <hidden> Parameters - GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  9018.  
  9019.  hps - input 
  9020.     Presentation Space handle. 
  9021.  
  9022.     Handle of the GPI presentation space whose bidirectional attributes are 
  9023.     being set. 
  9024.  
  9025.  
  9026. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  9027.  
  9028.  ulBidiAttr  (ULONG) 
  9029.     Bidirectional Attributes word. 
  9030.  
  9031.  
  9032. ΓòÉΓòÉΓòÉ <hidden> Errors - GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  9033.  
  9034.  
  9035. ΓòÉΓòÉΓòÉ <hidden> Notes - GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  9036.  
  9037.  
  9038. ΓòÉΓòÉΓòÉ <hidden> Example - GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  9039.  
  9040. This example Queries the Bidirectional Attributes of the presentation space, 
  9041. modifed the BDA_TEXTTYPE parameter and sets the new value to be the new 
  9042. bidirectional attributes word of the presentation space. 
  9043.  
  9044. #define INCL_PMBIDI
  9045. #include <OS2.H>
  9046. #include <PMBIDI.H>
  9047.  
  9048.  
  9049. VOID SetBidiAttr(VOID)
  9050.  {
  9051.  HPS hps;
  9052.  ULONG ulBidiAttr;
  9053.  ULONG fSuccess;
  9054.  
  9055.  hps = WinGetPS(hwnd);
  9056.  
  9057.  if (hps)
  9058.     ulBidiAttr = GpiQueryBidiAttr (hps);
  9059.  
  9060.  ulBidiAttr &= ~BDAM_TEXTTYPE;
  9061.  ulBidiAttr |= BDA_TEXTTYPE_VISUAL;
  9062.  
  9063.  fSuccess = GpiSetBidiAttr (hps, ulBidiAttr);
  9064.  
  9065.  WinReleasePS(hps);
  9066.  
  9067.  }
  9068.  
  9069.  
  9070. ΓòÉΓòÉΓòÉ <hidden> Related Functions - GpiQueryBidiAttr ΓòÉΓòÉΓòÉ
  9071.  
  9072. Related Functions 
  9073.  
  9074.      GpiSetBidiAttr 
  9075.  
  9076.  
  9077. ΓòÉΓòÉΓòÉ 16.2. GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9078.  
  9079.  
  9080. ΓòÉΓòÉΓòÉ <hidden> Topics - GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9081.  
  9082. Select an item: 
  9083.  
  9084.       Function Syntax 
  9085.       Parameters 
  9086.       Return Values 
  9087.       Example 
  9088.       Related Functions 
  9089.  
  9090.  
  9091. ΓòÉΓòÉΓòÉ <hidden> Syntax - GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9092.  
  9093. /****************************************/
  9094. /* This function sets the Bidirectional */
  9095. /* attributes of a presentation space.  */
  9096. /****************************************/
  9097.  
  9098. #define INCL_PMBIDI
  9099. #include <os2.h>
  9100.  
  9101. HPS       hps;          /* Presentation space handle */
  9102. ULONG     ulBidiAttr;   /* Bidirectional Attributes word */
  9103. BOOL      fsuccess;     /* Return value  */
  9104.  
  9105.    fsuccess  =  GpiSetBidiAttr  ( hps, BidiAttr);
  9106.  
  9107.  
  9108. ΓòÉΓòÉΓòÉ <hidden> Parameters - GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9109.  
  9110.  hps - input 
  9111.     Presentation Space handle. 
  9112.  
  9113.     Handle of the GPI presentation space whose bidirectional attributes are 
  9114.     being set. 
  9115.  
  9116.  ulBidiAttr  (ULONG) - input 
  9117.     Bidirectional Attributes word BIDIATTR 
  9118.  
  9119.     The Bidirectional Attributes being set. 
  9120.  
  9121.  
  9122. ΓòÉΓòÉΓòÉ <hidden> Return Values - WinSetKbdLayer ΓòÉΓòÉΓòÉ
  9123.  
  9124.  fSuccess  (BOOL) - return 
  9125.     Success indicator. 
  9126.  
  9127.     TRUE 
  9128.             Sucessful. 
  9129.  
  9130.     FALSE 
  9131.             An error occurred. 
  9132.  
  9133.  
  9134. ΓòÉΓòÉΓòÉ <hidden> Errors - GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9135.  
  9136.  
  9137. ΓòÉΓòÉΓòÉ <hidden> Notes - GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9138.  
  9139. The default bidirectional attributes word of the presentation space is set at 
  9140. the time the PS is created by inheriting the process bidirectional attributes 
  9141. word. 
  9142.  
  9143.  Note that for normal and micro presentation spaces, the process bidirectional 
  9144. attributes are inherited when the device context is created, so setting the 
  9145. process bidirectional attribute must be done before the device context is 
  9146. created in order to affect the presentation space which is associated with it. 
  9147.  
  9148. This function is used to dynamically change the setting of the bidirectional 
  9149. attributes of a GPI PS, thus affecting the Bidirectional text conversions that 
  9150. are performed by GPI. 
  9151.  
  9152.  
  9153. ΓòÉΓòÉΓòÉ <hidden> Example - GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9154.  
  9155. This example sets the Bidirectional Attributes of the presentation space to the 
  9156. set of attributes in ulBidiAttr. flags bit to zero. 
  9157.  
  9158. #define INCL_PMBIDI
  9159. #include <OS2.H>
  9160. #include <PMBIDI.H>
  9161.  
  9162. HWND   hwnd;
  9163.  
  9164.  
  9165. VOID SetBidiAttr(VOID)
  9166.  {
  9167.  HPS hps;
  9168.  ULONG ulBidiAttr = BDA_TEXT_ORIENT_LTR | BDA_TEXTTYPE_VISUAL ;
  9169.  ULONG fSuccess;
  9170.  
  9171.  hps = WinGetPS(hwnd);
  9172.  
  9173.  if (hps)
  9174.     fSuccess = GpiSetBidiAttr (hps, ulBidiAttr);
  9175.  
  9176.  WinReleasePS(hps);
  9177.  
  9178.  }
  9179.  
  9180.  
  9181. ΓòÉΓòÉΓòÉ <hidden> Related Functions - GpiSetBidiAttr ΓòÉΓòÉΓòÉ
  9182.  
  9183. Related Functions 
  9184.  
  9185.      GpiQueryBidiAttr 
  9186.  
  9187.  
  9188. ΓòÉΓòÉΓòÉ 17. Bidirectional Text Conversions ΓòÉΓòÉΓòÉ
  9189.  
  9190. OS/2 provides a set of functions to manage the conversion of bidirectional text 
  9191. between different formats. The text is assumed to be in a form/representation 
  9192. that is described by a set of input values and is converted to another form 
  9193. described by a set of output values. 
  9194.  
  9195. In order to perform a text conversion, the caller must first call 
  9196. LayoutCreateObject to create a layout object. The layout object is 
  9197. automatically associated with a set of default values, known as layout values, 
  9198. that depend on the locale used to create it. 
  9199.  
  9200. Currently, the following locale is supported: 
  9201.  
  9202.      Locale_Arabic 
  9203.  
  9204.      Locale_Hebrew 
  9205.  
  9206.  Using the handle to the layout object created, the caller can query the 
  9207.  current values using LayoutQueryValues and set them, using LayoutSetValues, to 
  9208.  the values required for the text transformation. 
  9209.  
  9210.  The section Layout Values describes the standard set of layout values that are 
  9211.  supported. It also describes which layout values may be changed after creation 
  9212.  of the layout object. 
  9213.  
  9214.  The actual text transformation is done by the LayoutTransformText function, 
  9215.  which converts its input buffer according to the values associated with the 
  9216.  layout object. LayoutTransformText can also optionally provide some additional 
  9217.  information about the transformation performed, such as mappings of the input 
  9218.  buffer to the output buffer. 
  9219.  
  9220.  LayoutEditShape is a more specialized text conversion function that allows an 
  9221.  application to do Arabic character shape editing in and around a specific 
  9222.  location in a buffer. 
  9223.  
  9224.  When an application has finished its text conversions, it can release the 
  9225.  resources used by the layout object using LayoutDestroyObject. 
  9226.  
  9227.  
  9228. ΓòÉΓòÉΓòÉ 17.1. Layout Values ΓòÉΓòÉΓòÉ
  9229.  
  9230. The following layout values are associated with a layout object when the locale 
  9231. used with LayoutObjectCreate is Locale_Arabic or Locale_Hebrew. 
  9232.  
  9233. Value Name                Value Type             Set/Get
  9234. ___________               ___________             _____
  9235.  ActiveBidirection         BOOL                      G
  9236.  ActiveShapeEditing        BOOL                      G
  9237.  ShapeContextSize          LAYOUT_EDIT_SIZE          G
  9238.  Cellsize                  ULONG                    SG
  9239.  InputMode                 BOOL                     SG
  9240.  CallerAllocMem            BOOL                     SG
  9241.  QueryValueSize            ULONG                    SG
  9242.  InOutTextDescrMask        ULONG                    SG
  9243.  InOnlyTextDescr           ULONG                    SG
  9244.  OutOnlyTextDescr          ULONG                    SG
  9245.  Orientation               LAYOUT_TEXT_DESCRIPTOR   SG
  9246.  TypeOfText                LAYOUT_TEXT_DESCRIPTOR   SG
  9247.  Swapping                  LAYOUT_TEXT_DESCRIPTOR   SG
  9248.  Numerals                  LAYOUT_TEXT_DESCRIPTOR   SG
  9249.  TextShaping               LAYOUT_TEXT_DESCRIPTOR   SG
  9250.  WordBreak                 LAYOUT_TEXT_DESCRIPTOR   SG
  9251.  
  9252.  ActiveBidirection (BOOL) 
  9253.  
  9254.     If ActiveBidirection is set to True then the layout object includes 
  9255.     knowledge of directional code elements and proper rendering of text will 
  9256.     require reordering of directional code elements. Otherwise the layout 
  9257.     object does not require any reordering of directional code elements and all 
  9258.     code elements will be classified as left_to_right. 
  9259.  
  9260.     The ActiveBidirection value is guaranteed not to change for the life of the 
  9261.     layout object. 
  9262.  
  9263.     For Locale_Arabic and Locale_Hebrew, ActiveBidirection is always True. 
  9264.  
  9265.  Active Shape Editing (BOOL) 
  9266.  
  9267.     If ActiveShapeEditing is set to True, then the layout object includes 
  9268.     knowledge of context dependent code elements (i.e. an Automatic Shape 
  9269.     Determination algorithm) that requires shaping for presentation. If True, 
  9270.     the user of a layout object is required to perform some transformation 
  9271.     and/or edit shaping prior to rendering the text. 
  9272.  
  9273.     Otherwise, the layout object does no shaping and all code elements may be 
  9274.     presented independent of the surrounding characters. 
  9275.  
  9276.     The ActiveShapeEditing value is guaranteed not to change for the life of 
  9277.     the layout object. 
  9278.  
  9279.     For Locale_Arabic, ActiveShapeEditing is always True. 
  9280.  
  9281.     For Locale_Hebrew, ActiveShapeEditing is always False. 
  9282.  
  9283.  ShapeContextSize (LAYOUT_EDIT_SIZE) 
  9284.  
  9285.     The ShapeContextSize specifies the size of the context (surrounding code 
  9286.     elements) that needs to be accounted for when performing 
  9287.     ActiveShapeEditing. The ShapeContextSize is defined as a structure of type 
  9288.     LAYOUT_EDIT_SIZE, which defines the number of surrounding code elements 
  9289.     that need to be considered when performing edit shaping, i.e., calling the 
  9290.     LayoutEditShape function. 
  9291.  
  9292.     When a substring is inserted into a string, the front and back elements 
  9293.     define the number of code elements after the substring and the number of 
  9294.     code elements before the substring, respectively, that need to be 
  9295.     considered when performing edit shaping. 
  9296.  
  9297.     If both front and back elements are set to zero, then no additional context 
  9298.     needs to be considered for edit shaping. When ActiveShapeEditing is not set 
  9299.     (False), the front and back are guaranteed to be zero (0). 
  9300.  
  9301.     The ShapeContextSize value is guaranteed not to change for the life of the 
  9302.     layout object. 
  9303.  
  9304.     For Locale_Arabic, ShapeContextSize.front = ShapeContextSize.back = 3. 
  9305.  
  9306.     For Locale_Hebrew, ShapeContextSize is not relevant. 
  9307.  
  9308.  CellSize (ULONG) 
  9309.  
  9310.     The size of each character cell (is > 1 when each character is followed by 
  9311.     one or more attributes; 'CellSize' is 1 when characters occupy consecutive 
  9312.     positions in memory). 
  9313.  
  9314.     The default value of CellSize is 1. 
  9315.  
  9316.  InputMode (BOOL) 
  9317.  
  9318.     This value defines whether the implicit algorithm should produce text in 
  9319.     its final form (InputMode=FALSE), or if the text should be considered 
  9320.     incomplete, as if it is still being input from the keyboard 
  9321.     (InputMode=TRUE). 
  9322.  
  9323.     The default value of InputMode is FALSE. 
  9324.  
  9325.  The following values are related to the memory allocation convention used when 
  9326.  calling LayoutQueryValues. 
  9327.  
  9328.  CallerAllocMem (BOOL) 
  9329.  
  9330.            If the descriptor CallerAllocMem is set to TRUE, when calling 
  9331.            LayoutQueryValues function, it is the responsibility of the caller 
  9332.            to allocate storage to store the actual data and freeing this data. 
  9333.  
  9334.            If the descriptor CallerAllocMem is set to FALSE, then 
  9335.            LayoutQueryValues allocates storage to store the actual data and the 
  9336.            caller is responsible for freeing this data. 
  9337.  
  9338.            For example, if the value of the Orientation text descriptor is 
  9339.            being queried, LayoutQueryValues will allocate the memory for the 
  9340.            LAYOUT_TEXT_DESCRIPTOR structure and the caller must free the 
  9341.            pointer returned using DosFreeMem. 
  9342.  
  9343.            The default value for CallerAllocMem is FALSE; 
  9344.  
  9345.  QueryValueSize (ULONG) 
  9346.  
  9347.            This name is used to query the size of any of the layout values by 
  9348.            ORing it with the name of the layout value. In this case the value 
  9349.            field will be a pointer to allocation where the size of the layout 
  9350.            value will be stored. 
  9351.  
  9352.            Currently, all structures used in OS/2 are of known size, so 
  9353.            applications will not need to use this option. 
  9354.  
  9355.  The remaining layout values are all related to describing the format of the 
  9356.  input and output buffers. These values define the behaviour of the 
  9357.  LayoutTransformText APIs. Two functionally equivalent methods are provided for 
  9358.  setting these attributes/descriptors. 
  9359.  
  9360.  InOutTextDescrMask, InOnlyTextDescr and OutOnlyTextDescr 
  9361.  
  9362.  These are three values that allow the caller to use the same bidi attribute 
  9363.  masks and bidi attributes that are used in the WinSetLangInfo APIs. 
  9364.  
  9365.  InOutTextDescrMask (ULONG) 
  9366.  
  9367.            This is a bit value that is used to mask the InOnlyTextDescr and 
  9368.            OutOnlyTextDescr values. Only the bits that are set in 
  9369.            InOutTextDescrMask are enabled for Set/Query of the InOnlyTextDescr 
  9370.            and OutOnlyTextDescr values. 
  9371.  
  9372.            InOnlyTextDescr can have one or more of the following values: 
  9373.  
  9374.                BDAM_TEXTTYPE 
  9375.                BDAM_TEXT_ORIENTATION 
  9376.                BDAM_NUMERALS 
  9377.                BDAM_SYM_SWAP 
  9378.                BDAM_TEXT_SHAPE 
  9379.                BDAM_WORD_BREAK 
  9380.                BDAM_ALL 
  9381.  
  9382.            The default value of InOnlyTextDescr is BDAM_ALL 
  9383.  
  9384.  InOnlyTextDescr (ULONG) 
  9385.  
  9386.            This is the data that is to be used (masked using the 
  9387.            InOutTextDescrMask value) to describe the format of the input text. 
  9388.  
  9389.            Possible values are: 
  9390.  
  9391.                BDA_TEXTTYPE_VISUAL 
  9392.                BDA_TEXTTYPE_IMPLICIT 
  9393.  
  9394.  
  9395.                BDA_TEXT_ORIENT_LTR 
  9396.                BDA_TEXT_ORIENT_RTL 
  9397.                ORIENTATION_CONTEXT_LTR 
  9398.                ORIENTATION_CONTEXT_RTL 
  9399.  
  9400.  
  9401.                BDA_NUMERALS_NOMINAL 
  9402.                BDA_NUMERALS_HINDI 
  9403.                BDA_NUMERALS_CONTEXTUAL 
  9404.               
  9405.                BDA_SYM_SWAP_OFF 
  9406.                BDA_SYM_SWAP_ON 
  9407.  
  9408.  
  9409.                BDA_WORDBREAK_OFF 
  9410.                BDA_WORDBREAK_ON 
  9411.  
  9412.  
  9413.                BDA_TEXT_DISPLAY_SHAPED 
  9414.                BDA_TEXT_NOMINAL 
  9415.                BDA_TEXT_INITIAL 
  9416.                BDA_TEXT_MIDDLE 
  9417.                BDA_TEXT_FINAL 
  9418.                BDA_TEXT_ISOLATED 
  9419.  
  9420.            For Locale_Arabic, the default value of InOnlyTextDescr is : 
  9421.  
  9422.                       BDA_TEXTTYPE_IMPLICIT | BDA_TEXT_ORIENT_LTR | BDA_NUMERALS_NOMINAL |
  9423.                       BDA_SYM_SWAP_OFF | BDA_WORDBREAK_OFF | BDA_TEXT_NOMINAL
  9424.  
  9425.            For Locale_Hebrew, the default value of InOnlyTextDescr is : 
  9426.  
  9427.                       BDA_TEXTTYPE_IMPLICIT | BDA_TEXT_ORIENT_CONTEXT | BDA_NUMERALS_NOMINAL |
  9428.                       BDA_SYM_SWAP_OFF | BDA_WORDBREAK_OFF | BDA_TEXT_SAVE_SHAPED
  9429.  
  9430.  OutOnlyTextDescr (ULONG) 
  9431.  
  9432.            This is the data that is to be used (masked using the 
  9433.            InOutTextDescrMask value) to describe the format of the output text. 
  9434.  
  9435.            Possible values are the same as for InOnlyTextDescr described above. 
  9436.  
  9437.            For Locale_Arabic and Locale_Hebrew, the default value of 
  9438.            OutOnlyTextDescr is : 
  9439.  
  9440.                       BDA_TEXTTYPE_VISUAL | BDA_TEXT_ORIENT_LTR | BDA_NUMERALS_NOMINAL |
  9441.                       BDA_SYM_SWAP_OFF | BDA_WORDBREAK_OFF | BDA_TEXT_DISPLAY_SHAPED
  9442.  
  9443.  The following code fragment shows how an application would set the orientation 
  9444.  and type of text using this method: 
  9445.  
  9446.   LAYOUT_VALUES     layout[4];
  9447.   ULONG             ulMask,ulInAttr,ulOutAttr;
  9448.        .
  9449.        .
  9450.        .
  9451.                                                              /* Set mask */
  9452.   ulData          = BDAM_TEXTTYPE | BDAM_TEXT_ORIENTATION;
  9453.   layout[0].name  = InOutTextDescrMask;
  9454.   layout[0].value = &ulData;
  9455.  
  9456.                                                  /* Set input descriptor */
  9457.   ulInAttr        = BDA_TEXTTYPE_IMPLICIT | BDA_TEXT_ORIENT_RTL;
  9458.   layout[1].name  = InOnlyTextDescr;
  9459.   layout[1].value = &ulInAttr;
  9460.  
  9461.                                                 /* Set output descriptor */
  9462.   ulOutAttr       = BDA_TEXTTYPE_VISUAL   | BDA_TEXT_ORIENT_LTR;
  9463.   layout[2].name  = OutOnlyTextDescr;
  9464.   layout[2].value = &ulOutAttr;
  9465.  
  9466.                                                   /* Last value in array */
  9467.   layout[3].name  = 0;
  9468.                                   /* Set the values in the layout object */
  9469.    RC = LayoutSetValues(hlo,layout,&index);
  9470.  
  9471.  Using LayoutTextDescriptors 
  9472.  
  9473.  Using the following values, which are of type LAYOUT_TEXT_DESCRIPTOR, the 
  9474.  caller can set the input and output values of one or more descriptors. This 
  9475.  has exactly the same effect as using the previous method : the choice of which 
  9476.  method to use is a matter of style. 
  9477.  
  9478.  Orientation (LAYOUT_TEXT_DESCRIPTOR) 
  9479.  
  9480.            The descriptor Orientation specifies the global directional text 
  9481.            orientation: 
  9482.  
  9483.                 ORIENTATION-LTR-left-to-right global orientation 
  9484.  
  9485.                 ORIENTATION-RTL-right-to-left global orientation 
  9486.  
  9487.                 ORIENTATION-CONTEXTUAL-contextual global orientation 
  9488.  
  9489.            When ORIENTATION-CONTEXTUAL is set, the Orientation setting is 
  9490.            determined according to the direction of the first significant code 
  9491.            element. 
  9492.  
  9493.  TypeOfText (LAYOUT_TEXT_DESCRIPTOR) 
  9494.  
  9495.            The TypeOfText descriptor specifies the directional ordering of the 
  9496.            directional text in the buffer: 
  9497.  
  9498.                 TEXT-VISUAL-code elements are stored in visually ordered 
  9499.                 segments which can be rendered as is.  Bidirectional code 
  9500.                 elements will have to be previously reordered for a specific 
  9501.                 orientation. 
  9502.  
  9503.                 TEXT-IMPLICIT-code elements are stored in logically ordered 
  9504.                 segments. 
  9505.  
  9506.  Swapping (LAYOUT_TEXT_DESCRIPTOR) 
  9507.  
  9508.            The Swapping descriptor specifies whether symmetric swapping is 
  9509.            applied to the text: 
  9510.  
  9511.                 SWAPPING- The text conforms to symmetric swapping 
  9512.  
  9513.                 NO_SWAPPING- The text does not conform to symmetric swapping 
  9514.  
  9515.  Numerals (LAYOUT_TEXT_DESCRIPTOR) 
  9516.  
  9517.            The Numerals descriptor specifies the shaping of numerals recognized 
  9518.            by the layout object: 
  9519.  
  9520.                 NUMERALS_NOMINAL - Nominal shaping of numerals using the 
  9521.                 portable character set (i.e. Arabic numerals). 
  9522.  
  9523.                  NUMERALS_NATIONAL - National shaping of numeral based on the 
  9524.                 script of the locale associated with the layout object (i.e. 
  9525.                 for Arabic, Hindi numerals are used). 
  9526.  
  9527.                  NUMERALS_CONTEXTUAL - Contextual shaping of numeral, depending 
  9528.                 on the context (script) of surrounding text (e.g. Hindi numbers 
  9529.                 in Arabic text and Arabic numbers otherwise). Contextual 
  9530.                 shaping of numerals can only be done if TypeOfText is 
  9531.                 TEXT_IMPLICIT. 
  9532.  
  9533.  Text shaping (LAYOUT_TEXT_DESCRIPTOR) 
  9534.  
  9535.             TextShaping: specifies the characteristics of the in/out text 
  9536.  
  9537.                 TEXT_SHAPED - The text contains presentation form shapes as 
  9538.                 defined by the locale 
  9539.  
  9540.                 TEXT_NOMINAL - The text has no presentation form shapes as 
  9541.                 defined by the locale. 
  9542.  
  9543.                 TEXT_INITIAL - The visual text has only initial shapes. 
  9544.  
  9545.                 TEXT_MIDDLE - The visual text has only middle shapes. 
  9546.  
  9547.                 TEXT_FINAL - The visual text has only final shapes. 
  9548.  
  9549.                 TEXT_ISOLATED - The visual text has only isolated shapes. 
  9550.  
  9551.  WordBreak (LAYOUT_TEXT_DESCRIPTOR) 
  9552.  
  9553.            The WordBreak descriptor specifies whether bidirectional should 
  9554.            factor word recognition or not. 
  9555.  
  9556.                 BREAK _ WordBreak on, word by word reordering (i.e. the text 
  9557.                 reordering is dependent on the level (per the bidirectional 
  9558.                 algorithm) of word separators). 
  9559.  
  9560.                 NO_BREAK _ word break off, segment reordering. 
  9561.  
  9562.             This descriptor is significant only if TypeOfText is TEXT_IMPLICIT. 
  9563.  
  9564.  The following code fragment shows how an application would set the orientation 
  9565.  and type of text using this method. This has exactly the same effect as the 
  9566.  previous example : 
  9567.  
  9568.   LAYOUT_VALUES     layout[2];
  9569.   LAYOUT_TEXT_DESCRIPTOR descr;
  9570.               .
  9571.               .
  9572.               .
  9573.                                /* Put the descr record in the layout array */
  9574.   layout[0].name  = TypeOfText | Orientation;
  9575.   layout[0].value = &descr;
  9576.  
  9577.                                                    /* Last value in array */
  9578.   layout[1].name  = 0;
  9579.                                            /* Initialize the input value */
  9580.   descr.in  = TEXT_IMPLICIT | ORIENTATION_RTL;
  9581.                                            /* Initialize the output value */
  9582.   descr.out = TEXT_VISUAL   | ORIENTATION_LTR;
  9583.                                   /* Set the values in the layout object */
  9584.    RC = LayoutSetValues(hlo,layout,&index);
  9585.  
  9586.  
  9587. ΓòÉΓòÉΓòÉ 17.2. Layout Functions ΓòÉΓòÉΓòÉ
  9588.  
  9589. Bidirectional applications use bidirectional text.  The bidirectional text is 
  9590. identified by the bidirectional attributes.  Since applications use different 
  9591. sets of bidirectional attributes (and thus, different representations of 
  9592. bidirectional text), it is necessary to convert this text among representation 
  9593. forms.  The most common case is when an application converts the text from the 
  9594. internal (storage) representation to the external (presentation) form. 
  9595.  
  9596. OS/2 provides a set of Layout functions to manage the conversion of 
  9597. bidirectional text between different formats. The text is assumed to be in a 
  9598. form/representation that is described by a set of input values and is converted 
  9599. to another form described by a set of output values. 
  9600.  
  9601.  
  9602. ΓòÉΓòÉΓòÉ 17.2.1. LayoutCreateObject ΓòÉΓòÉΓòÉ
  9603.  
  9604.  
  9605. ΓòÉΓòÉΓòÉ <hidden> Topics - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9606.  
  9607. Select an item: 
  9608.  
  9609.       Function Syntax 
  9610.       Parameters 
  9611.       Return Values 
  9612.       Notes 
  9613.       Example 
  9614.       Related Functions 
  9615.  
  9616.  
  9617. ΓòÉΓòÉΓòÉ <hidden> Syntax - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9618.  
  9619. /********************************************/
  9620. /* This function creates and initializes a  */
  9621. /* layout object associated with the locale */
  9622. /* specified by locale_name.                */
  9623. /********************************************/
  9624.  
  9625. #define INCL_LAYOUT
  9626. #include <layout.h>
  9627.  
  9628. PUCHAR           locale_name;  /* Name of the locale used */
  9629. PLAYOUT_OBJECT   plh;          /* Pointer to a valid layout object */
  9630. APIRET           RC;           /* Return value */
  9631.  
  9632.      RC  =  LayoutCreateObject ( locale_name, plh );
  9633.  
  9634.  
  9635. ΓòÉΓòÉΓòÉ <hidden> Parameters - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9636.  
  9637.  locale_name  (PUCHAR) - input 
  9638.     Name of the locale used. 
  9639.  
  9640.     This argument specifies the type of locale used, the following are possible 
  9641.     values: 
  9642.  
  9643.     Locale_Arabic            for Arabic support. 
  9644.  
  9645.     Locale_Hebrew            for Hebrew support. 
  9646.  
  9647.  plh  (PLAYOUT_OBJECT) - input 
  9648.     Pointer to a valid layout object. 
  9649.  
  9650.     The value of this argument points to a valid layout object that may be used 
  9651.     by other layout functions. The returned layout object is initialized to an 
  9652.     initial state that defines the behavior of the layout functions. The 
  9653.     default initial state is described in the layout values section. 
  9654.  
  9655.  
  9656. ΓòÉΓòÉΓòÉ <hidden> Return Values - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9657.  
  9658.  RC(APIRET) - return 
  9659.     Success indicator. 
  9660.  
  9661.     0 
  9662.             layout object points to a valid handle. 
  9663.  
  9664.     Other 
  9665.             An error occurred. 
  9666.  
  9667.  
  9668. ΓòÉΓòÉΓòÉ <hidden> Errors - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9669.  
  9670. none. 
  9671.  
  9672.  
  9673. ΓòÉΓòÉΓòÉ <hidden> Notes - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9674.  
  9675. The layout object is an opaque object containing all the data and methods 
  9676. necessary to perform the layout operations on context dependent/directional 
  9677. characters of the locale name. 
  9678.  
  9679. When the LayoutCreateObject function completes without errors, the value of the 
  9680. layout object argument points to a valid layout object that may be used by 
  9681. other layout functions. 
  9682.  
  9683. The returned layout object is initialized to a default state that defines the 
  9684. behavior of the layout functions. The initial state is locale dependent and is 
  9685. described by the layout values that may be queried using the LayoutQueryValues 
  9686. function. 
  9687.  
  9688. The layout values of the layout object may be changed using the LayoutSetValues 
  9689. function. 
  9690.  
  9691.  
  9692. ΓòÉΓòÉΓòÉ <hidden> Example - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9693.  
  9694. This example creates a layout object. 
  9695.  
  9696. #include <layout.h>
  9697.  
  9698. LAYOUT_OBJECT plh;
  9699. ULONG RC;
  9700.  
  9701.   RC= LayoutCreateObject (Locale_Arabic,&plh);   /* or: Locale_Hebrew */
  9702.  
  9703.   if (RC) { printf("Create Error! !!\n"); exit(0);}
  9704.  
  9705.  
  9706. ΓòÉΓòÉΓòÉ <hidden> Related Functions - LayoutCreateObject ΓòÉΓòÉΓòÉ
  9707.  
  9708. Related Functions 
  9709.  
  9710.      LayoutDestroyObject 
  9711.      LayoutEditShape 
  9712.      LayoutQueryValues 
  9713.      LayoutSetValues 
  9714.      LayoutTransformText 
  9715.  
  9716.  
  9717. ΓòÉΓòÉΓòÉ 17.2.2. LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9718.  
  9719.  
  9720. ΓòÉΓòÉΓòÉ <hidden> Topics - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9721.  
  9722. Select an item: 
  9723.  
  9724.       Function Syntax 
  9725.       Parameters 
  9726.       Return Values 
  9727.       Example 
  9728.       Related Functions 
  9729.  
  9730.  
  9731. ΓòÉΓòÉΓòÉ <hidden> Syntax - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9732.  
  9733. /*******************************************/
  9734. /* This function releases all the resources*/
  9735. /* of a layout object obtained by the      */
  9736. /* LayoutCreateObject function.            */
  9737. /*******************************************/
  9738.  
  9739. #define INCL_LAYOUT
  9740. #include <layout.h>
  9741.  
  9742. LAYOUT_OBJECT   plh;       /* Layout object handle */
  9743. APIRET          RC;        /* Return value */
  9744.  
  9745.      RC  =  LayoutDestroyObject ( plh );
  9746.  
  9747.  
  9748. ΓòÉΓòÉΓòÉ <hidden> Parameters - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9749.  
  9750.  plh  (LAYOUT_OBJECT) - input 
  9751.     Layout object handle. 
  9752.  
  9753.     This argument specifies a layout object returned by the LayoutCreateObject 
  9754.     function. 
  9755.  
  9756.  
  9757. ΓòÉΓòÉΓòÉ <hidden> Return Values - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9758.  
  9759.  RC(APIRET) - return 
  9760.     Success indicator. 
  9761.  
  9762.     0 
  9763.             All resources associated with layout object were successfully 
  9764.             deallocated. 
  9765.  
  9766.     Other 
  9767.             An error occurred. 
  9768.  
  9769.  
  9770. ΓòÉΓòÉΓòÉ <hidden> Errors - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9771.  
  9772.  
  9773. ΓòÉΓòÉΓòÉ <hidden> Notes - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9774.  
  9775. none. 
  9776.  
  9777.  
  9778. ΓòÉΓòÉΓòÉ <hidden> Example - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9779.  
  9780. This example creates and then destroys a layout object. 
  9781.  
  9782. #include <layout.h>
  9783. LAYOUT_OBJECT plh;
  9784. ULONG RC;
  9785.  
  9786.   RC= LayoutCreateObject (Locale_Arabic,&plh);     /* or: Locale_Hebrew */
  9787.   if (RC) { printf("Create Error! !!\n"); exit(0);}
  9788.  
  9789.   RC = LayoutDestroyObject(plh);
  9790.   if (RC) { printf(" DESTROY Error!!!\n"); exit(0);}
  9791.  
  9792.  
  9793. ΓòÉΓòÉΓòÉ <hidden> Related Functions - LayoutDestroyObject ΓòÉΓòÉΓòÉ
  9794.  
  9795. Related Functions 
  9796.  
  9797.      LayoutCreateObject 
  9798.      LayoutEditShape 
  9799.      LayoutQueryValues 
  9800.      LayoutSetValues 
  9801.      LayoutTransformText 
  9802.  
  9803.  
  9804. ΓòÉΓòÉΓòÉ 17.2.3. LayoutEditShape ΓòÉΓòÉΓòÉ
  9805.  
  9806.  
  9807. ΓòÉΓòÉΓòÉ <hidden> Topics - LayoutEditShape ΓòÉΓòÉΓòÉ
  9808.  
  9809. Select an item: 
  9810.  
  9811.       Function Syntax 
  9812.       Parameters 
  9813.       Return Values 
  9814.       Notes 
  9815.       Example 
  9816.       Related Functions 
  9817.  
  9818.  
  9819. ΓòÉΓòÉΓòÉ <hidden> Syntax - LayoutEditShape ΓòÉΓòÉΓòÉ
  9820.  
  9821. /*******************************************/
  9822. /* This function edits the shapes of       */
  9823. /* the characters pointed to by the        */
  9824. /* index parameters.                       */
  9825. /*******************************************/
  9826.  
  9827. #define INCL_LAYOUT
  9828. #include <layout.h>
  9829.  
  9830. LAYOUT_OBJECT  plh;     /* Layout object handle */
  9831. BOOL           EditType;/* Type of editing */
  9832. PULONG         index;   /* Cursor position - in bytes units */
  9833. PUCHAR         InpBuf;  /* Input text   */
  9834. PULONG         InpSize; /* Size of InpBuf - number of bytes */
  9835. PVOID          OutBuf;  /* Output text  */
  9836. PULONG         OutSize; /* Size of OutBuf - number of bytes */
  9837. APIRET         RC;      /* Return value */
  9838.  
  9839.      RC  =  LayoutEditShape ( plh, EditType, index, InpBuf, InpSize,
  9840.                               OutBuf, OutSize);
  9841.  
  9842.  
  9843. ΓòÉΓòÉΓòÉ <hidden> Parameters - LayoutEditShape ΓòÉΓòÉΓòÉ
  9844.  
  9845.  plh  (LAYOUT_OBJECT) - input 
  9846.     Layout object handle. 
  9847.  
  9848.     This argument specifies a layout object returned by the LayoutCreateObject 
  9849.     function. 
  9850.  
  9851.  EditType  (BOOL) - input 
  9852.     Type of editing. 
  9853.  
  9854.     The EditType argument specifies the type of edit shaping that is desired. 
  9855.     The following are possible values: 
  9856.  
  9857.     EditInput 
  9858.             When EditType specifies EditInput, it will read the current code 
  9859.             element as defined by index and any preceding (front) code elements 
  9860.             as defined by ShapeContextSize layout value. 
  9861.  
  9862.     EditReplace 
  9863.             When EditType specifies EditReplace, it will read the current code 
  9864.             element as defined by index and any surrounding (front and/or back) 
  9865.             code as defined by ShapeContexSize layout value. 
  9866.  
  9867.     Note: the direction of the editing (i.e. layout values - Orientation and 
  9868.     TypeOfText <VISUAL> is what determines which are the preceding and which 
  9869.     are the succeeding code elements. 
  9870.  
  9871.     When ActiveShapeEditing is set (True) the layout object maintains an 
  9872.     "EditInput state" that may affect subsequent calls to the LayoutEditShape 
  9873.     function with EditInput EditType. The EditInput state is not affected when 
  9874.     EditType is set to EditReplace. To reset the EditInput state to its initial 
  9875.     state these functions should be called with InpBuf set to NULL. The 
  9876.     EditInput state is not affected if any error occurs within the 
  9877.     LayoutEditShape is EditInput. 
  9878.  
  9879.  index  (PUCHAR) - input 
  9880.     Cursor position - in bytes units. 
  9881.  
  9882.     On input the index argument specifies an offset to the start of a code 
  9883.     element in InpBuf that will be the base for the editing. In addition, the 
  9884.     context of surrounding code elements may be considered where the minimum 
  9885.     set of code elements needed for the specific context dependent script(s) is 
  9886.     identified by the ShapeContextSize layout value. If the set of surrounding 
  9887.     code elements as defined by index, InpBuf and InpSize is less then the size 
  9888.     of front/back of the ShapeContextSize, the LayoutEditShape functions will 
  9889.     assume there is no additional context available. It is the caller's 
  9890.     responsibility to provide the minimum context if available. The index 
  9891.     argument is in units associated  with type of InpBuf, i.e. bytes for 
  9892.     LayoutEditShape 
  9893.  
  9894.  InpBuf  (PVOID) - input 
  9895.     Input text. 
  9896.  
  9897.     The InpBuf argument specifies the source to be processed. A NULL value with 
  9898.     EditInput EditType indicates a request to reset the EditInput state to its 
  9899.     initial state. 
  9900.  
  9901.  InpSize  (PULONG) 
  9902.     Size of InpBuf - number of bytes. 
  9903.  
  9904.     On input, the InpSize argument specifies the number of code elements to be 
  9905.     processed in units associated with the type , i.e. bytes for 
  9906.     LayoutEditShape. A value of - 1 indicates that input is delimited by a NULL 
  9907.     code element. On return, the value is modified to the actual number of code 
  9908.     elements that needed shaping in InpBuf. A value of zero(0) when EditType is 
  9909.     EditInput indicates that the EditInput state should be reset to its initial 
  9910.     state. 
  9911.  
  9912.  OutBuf  (PVOID) - output 
  9913.     Output text. 
  9914.  
  9915.     The OutBuf argument contains the shaped output text. This argument can be 
  9916.     specified as a NULL pointer to indicate that no transformed text is 
  9917.     required. If NULL, the functions will still return the index and InpSize 
  9918.     that specify the amount of text required to be redrawn. 
  9919.  
  9920.  OutSize  (PULONG) - output 
  9921.     Size of OutBuf - number of bytes. 
  9922.  
  9923.     On input, the OutSize argument specifies the size of the output buffer in 
  9924.     number of bytes. Only the code elements required to be shaped are written 
  9925.     into OutBuf. The Output buffer should be large enough to contain the shaped 
  9926.     result; otherwise, only partial shaping will be performed. If the 
  9927.     ActiveShapeEditing layout value is set(True) the OutBuf should be allocated 
  9928.     to contain at least: 
  9929.  
  9930.     number of InpBuf code element 
  9931.  
  9932.     On return, the OutSize argument is modified to the actual number of bytes 
  9933.     placed in OutBuf. 
  9934.  
  9935.     When the OutSize argument is specified as zero,the function will calculate 
  9936.     the size of an output buffer large enough to contain the transformed text 
  9937.     from the input buffer, and the result will be returned in this field. The 
  9938.     content of the buffers specifies by InpBuf and OutBuf, and the value of 
  9939.     InpSize, will remain unchanged. 
  9940.  
  9941.  
  9942. ΓòÉΓòÉΓòÉ <hidden> Return Values - LayoutEditShape ΓòÉΓòÉΓòÉ
  9943.  
  9944.  RC(APIRET) - return 
  9945.     Success indicator. 
  9946.  
  9947.     0 
  9948.             The function completed without errors. 
  9949.  
  9950.     LAYOUT_E2BIG 
  9951.             The output buffer is too small and the source text was not 
  9952.             processed. Index and InpSize are not guaranteed on return. 
  9953.  
  9954.  
  9955. ΓòÉΓòÉΓòÉ <hidden> Errors - LayoutEditShape ΓòÉΓòÉΓòÉ
  9956.  
  9957.  
  9958. ΓòÉΓòÉΓòÉ <hidden> Notes - LayoutEditShape ΓòÉΓòÉΓòÉ
  9959.  
  9960.  The LayoutEditShape provides the shapes of the code element pointed to by 
  9961. index along with any surrounding code elements as defined by the 
  9962. ShapeContextSize layout value of the layout object defined by layout_object. 
  9963. the LayoutEditShape functions are intended to be used when performing editing 
  9964. operations on a single code element, e.g. insertion or deletion of a single 
  9965. code element. The LayoutTransform function should be used when doing string 
  9966. shaping. The LayoutEditShape function does not affect any state maintained by 
  9967. the LayoutTransform functions. 
  9968.  
  9969. When the LayoutEdiShape funtions completes without errors a zero is returned, 
  9970. index and InpSize return the minimum set of code elements required to be 
  9971. redrawn, and if OutBuf is not NULL the respective shaped code elements are 
  9972. written into OutBuf. Any portion of the the InpBuf may be indicated as needing 
  9973. to be redrawn/shaped. Otherwise, if an error occurs a non-zero value is 
  9974. returned and any output values depend on the error code. 
  9975.  
  9976.  
  9977. ΓòÉΓòÉΓòÉ <hidden> Example - LayoutEditShape ΓòÉΓòÉΓòÉ
  9978.  
  9979. This example shows how to use the LayoutEditShape function to reshape the input 
  9980. characters. 
  9981.  
  9982. #include <layout.h>
  9983.  
  9984. LAYOUT_OBJECT plh;
  9985.  
  9986. UCHAR InpBuf[30];
  9987. UCHAR OutBuf[30];
  9988.  
  9989. ULONG InpSize = 30;
  9990. ULONG OutSize = 30 ;
  9991. LAYOUT_VALUES layout[2];
  9992. LAYOUT_TEXT_DESCRIPTOR Descr;
  9993. ULONG index ;
  9994. ULONG RC;
  9995.  
  9996.    RC= LayoutCreateObject (Locale_Arabic,&plh);      /* or: Locale_Hebrew */
  9997.    if (RC) { printf("Create Error! !!\n"); exit(0);}
  9998.  
  9999.    /* Define the LayoutValues that will need changing */
  10000.    layout[0].name= TypeOfText|Orientation;
  10001.    layout[0].value=descr;
  10002.  
  10003.    /* using the OR operator, we set the bits in the Layout Descriptor
  10004.     * to describe the orientation of the buffer and the Type of Text
  10005.     * that we want for the output */
  10006.  
  10007.    descr.in=TEXT_VISUAL|ORIENTATION_LTR;
  10008.    descr.out=TEXT_VISUAL|ORIENTATION_LTR;
  10009.    layout[1].name=0;           /* End of change */
  10010.  
  10011.    /* Set the LayoutValues   */
  10012.      RC=LayoutSetValues(plh,layout,&index);
  10013.  
  10014.      if (RC)
  10015.      {
  10016.            printf("SetValue Error at index %d !!!\n",index);
  10017.            exit(0);
  10018.       }
  10019.  
  10020.  
  10021.   /* Here we point to the character were we want to shape */
  10022.   index = 4L;
  10023.    RC=LayoutEditShape(plh,
  10024.                       TRUE,
  10025.                       &index,
  10026.                       InpBuf,
  10027.                       &InpSize,
  10028.                       OutBuf,
  10029.                       &OutSize);
  10030.  
  10031.     RC = LayoutDestroyObject(plh);
  10032.     if (RC) { printf(" DESTROY Error!!!\n"); exit(0);}
  10033.  
  10034.  
  10035. ΓòÉΓòÉΓòÉ <hidden> Related Functions - LayoutEditShape ΓòÉΓòÉΓòÉ
  10036.  
  10037. Related Functions 
  10038.  
  10039.      LayoutCreateObject 
  10040.      LayoutDestroyObject 
  10041.      LayoutQueryValues 
  10042.      LayoutSetValues 
  10043.      LayoutTransformText 
  10044.  
  10045.  
  10046. ΓòÉΓòÉΓòÉ 17.2.4. LayoutQueryValues ΓòÉΓòÉΓòÉ
  10047.  
  10048.  
  10049. ΓòÉΓòÉΓòÉ <hidden> Topics - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10050.  
  10051. Select an item: 
  10052.  
  10053.       Function Syntax 
  10054.       Parameters 
  10055.       Return Values 
  10056.       Notes 
  10057.       Example 
  10058.       Related Functions 
  10059.  
  10060.  
  10061. ΓòÉΓòÉΓòÉ <hidden> Syntax - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10062.  
  10063. /****************************************/
  10064. /* This function queries the current    */
  10065. /* setting of Layout values within a    */
  10066. /* layout object.                        */
  10067. /****************************************/
  10068.  
  10069. #define INCL_LAYOUT
  10070. #include <layout.h>
  10071.  
  10072. LAYOUT_OBJECT  plh;              /* Layout object handle */
  10073. LAYOUT_VALUES  values[3];        /* Array of layout values to be queried */
  10074. PULONG         index_returned;   /* Value causing the error */
  10075. APIRET         RC;               /* Return value */
  10076.  
  10077.      RC  =  LayoutQueryValues ( plh, values, index_returned);
  10078.  
  10079.  
  10080. ΓòÉΓòÉΓòÉ <hidden> Parameters - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10081.  
  10082.  plh  (LAYOUT_OBJECT) - input 
  10083.     Layout object handle. 
  10084.  
  10085.     This argument specifies a layout object returned by the LayoutCreateObject 
  10086.     function. 
  10087.  
  10088.  values  (PLAYOUT_VALUES) - input 
  10089.     Array of layout values to be queried. 
  10090.  
  10091.     The name field contains the name of the layout value to be queried, and the 
  10092.     value field is a pointer to a location where the layout value is to be 
  10093.     stored. 
  10094.  
  10095.  index_returned  (PULONG) - output 
  10096.     Value causing the error. 
  10097.  
  10098.     If any values can not be queried, then the value of the one causing the 
  10099.     error is returned in the index and a non-zero value is returned. 
  10100.  
  10101.  
  10102. ΓòÉΓòÉΓòÉ <hidden> Return Values - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10103.  
  10104.  RC(APIRET) - return 
  10105.     Success indicator. 
  10106.  
  10107.     0 
  10108.             All layout values were successfully queried. 
  10109.  
  10110.     index_returned 
  10111.             The layout value specified by index_returned is unknown or the 
  10112.             argument Layout_Object is invalid. 
  10113.  
  10114.  
  10115. ΓòÉΓòÉΓòÉ <hidden> Errors - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10116.  
  10117.  
  10118. ΓòÉΓòÉΓòÉ <hidden> Notes - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10119.  
  10120. Each value element of a LAYOUT_VALUES record must contain a pointer to the type 
  10121. of the layout value that is being set or get. That is, if the layout value is 
  10122. for type T, the arguement must be of type T*. 
  10123.  
  10124. If CallerAllocMem is FALSE (default), LayoutQueryValues will allocate storage 
  10125. for the returned data. It is the caller's responsibility to free the allocated 
  10126. memory with DosFreeMem. 
  10127.  
  10128. If CallerAllocMem is TRUE, LayoutQueryValues will assume that the layout value 
  10129. points to allocated memory. I.e. the caller is responsible for allocating and 
  10130. freeing the memory for the queried data. 
  10131.  
  10132.  
  10133. ΓòÉΓòÉΓòÉ <hidden> Example - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10134.  
  10135. This example first sets the values of an existing layout object then queries 
  10136. these values using the LayoutQueryValues function. 
  10137.  
  10138. #include <layout.h>
  10139.  
  10140. LAYOUT_OBJECT plh;
  10141. LAYOUT_VALUES layout[3];
  10142. LAYOUT_TEXT_DESCRIPTOR Descr;
  10143. PLAYOUT_TEXT_DESCRIPTOR Pdescr ;
  10144. BOOL CallerAllocate;
  10145. ULONG index;
  10146. ULONG RC;
  10147.  
  10148.  
  10149.  
  10150.   layout[0].name= CallerAllocMem;
  10151.  
  10152.   layout[0].value=&CallerAllocate;
  10153.  
  10154.   CallerAllocate = TRUE ;
  10155.  
  10156.   layout[1].name = 0 ;
  10157.  
  10158.   /* Set the LayoutValues   */
  10159.   RC=LayoutSetValues (plh,layout,&index);
  10160.  
  10161.   if (RC)
  10162.   {
  10163.         printf("SetValue Error at index %d !!!\n",index);
  10164.         exit(0);
  10165.   }
  10166.  
  10167.   Pdescr = (PLAYOUT_TEXT_DESCRIPTOR)malloc(sizeof (LAYOUT_TEXT_DESCRIPTOR));
  10168.   layout[0].name  =  Orientation;
  10169.   layout[0].value =  Pdescr;
  10170.  
  10171.   layout[1].name=0;           /* End of change */
  10172.  
  10173.   RC = LayoutQueryValues(plh,layout,&index);
  10174.   if (RC)
  10175.   {
  10176.         printf("QueryValue Error at index %d !!!\n",index);
  10177.         exit(0);
  10178.   }
  10179.   printf("Orientation in = %lx  out = %lx",Pdescr->in,Pdescr->out);
  10180.  
  10181.   free(Pdescr);
  10182.  
  10183.   RC = LayoutDestroyObject(plh);
  10184.   if (RC) { printf(" DESTROY Error!!!\n"); exit(0);}
  10185.  ************************************************************ 
  10186.  
  10187.  
  10188. ΓòÉΓòÉΓòÉ <hidden> Related Functions - LayoutQueryValues ΓòÉΓòÉΓòÉ
  10189.  
  10190. Related Functions 
  10191.  
  10192.      LayoutCreateObject 
  10193.      LayoutDestroyObject 
  10194.      LayoutEditShape 
  10195.      LayoutSetValues 
  10196.      LayoutTransformText 
  10197.  
  10198.  
  10199. ΓòÉΓòÉΓòÉ 17.2.5. LayoutSetValues ΓòÉΓòÉΓòÉ
  10200.  
  10201.  
  10202. ΓòÉΓòÉΓòÉ <hidden> Topics - LayoutSetValues ΓòÉΓòÉΓòÉ
  10203.  
  10204. Select an item: 
  10205.  
  10206.       Function Syntax 
  10207.       Parameters 
  10208.       Return Values 
  10209.       Notes 
  10210.       Example 
  10211.       Related Functions 
  10212.  
  10213.  
  10214. ΓòÉΓòÉΓòÉ <hidden> Syntax - LayoutSetValues ΓòÉΓòÉΓòÉ
  10215.  
  10216. /*******************************************/
  10217. /* This function is used to change the     */
  10218. /* layout values of a layout Object.       */
  10219. /*******************************************/
  10220.  
  10221. #define INCL_LAYOUT
  10222. #include <layout.h>
  10223.  
  10224. LAYOUT_OBJECT  plh,             /* Layout object handle */
  10225. PLAYOUT_VALUES values,          /* Array of layout values to be set */
  10226. PULONG         index_returned   /* Value causing the error */
  10227. APIRET         RC;              /* Return value */
  10228.  
  10229.      RC  =  LayoutSetValues ( plh, values, index_returned );
  10230.  
  10231.  
  10232. ΓòÉΓòÉΓòÉ <hidden> Parameters - LayoutSetValues ΓòÉΓòÉΓòÉ
  10233.  
  10234.  plh  (LAYOUT_OBJECT) - input 
  10235.     Layout object handle. 
  10236.  
  10237.     This argument specifies a layout object returned by the LayoutCreateObject 
  10238.     function. 
  10239.  
  10240.  values  (PLAYOUT_VALUES) - input 
  10241.     Array of layout values to be set. 
  10242.  
  10243.     The name field contains the name of the layout value to be set, and the 
  10244.     value field is a pointer to a location where the layout value is to be 
  10245.     stored. 
  10246.  
  10247.  index_returned  (PULONG) - output 
  10248.     Value causing the error. 
  10249.  
  10250.     If any values can not be set, then the value of the one causing the error 
  10251.     is returned in the index and a non-zero value is returned. 
  10252.  
  10253.  
  10254. ΓòÉΓòÉΓòÉ <hidden> Return Values - LayoutSetValues ΓòÉΓòÉΓòÉ
  10255.  
  10256.  RC(APIRET) - return 
  10257.     Success indicator. 
  10258.  
  10259.     0 
  10260.             All layout values were successfully set. 
  10261.  
  10262.     index_returned 
  10263.             The layout value specified by index_returned is unknown or its 
  10264.             value is invalid or the argument Layout_Object is invalid. 
  10265.  
  10266.  
  10267. ΓòÉΓòÉΓòÉ <hidden> Errors - LayoutSetValues ΓòÉΓòÉΓòÉ
  10268.  
  10269.  
  10270. ΓòÉΓòÉΓòÉ <hidden> Notes - LayoutSetValues ΓòÉΓòÉΓòÉ
  10271.  
  10272. The values are written into the layout object and may affect the behavior of 
  10273. subsequent layout functions. Some layout values do alter internal states 
  10274. maintained by a layout_object. 
  10275.  
  10276. When the LayoutSetvalues function completes without errors all values will have 
  10277. been set in the Layout_Object and a zero is returned. 
  10278.  
  10279.  
  10280. ΓòÉΓòÉΓòÉ <hidden> Example - LayoutSetValues ΓòÉΓòÉΓòÉ
  10281.  
  10282. This example creates then sets the values for a layout object. 
  10283.  
  10284. #include <layout.h>
  10285.  
  10286. LAYOUT_OBJECT plh;
  10287. LAYOUT_VALUES layout[2];
  10288. LAYOUT_TEXT_DESCRIPTOR Descr;
  10289. ULONG index;
  10290. ULONG RC;
  10291.  
  10292.  
  10293.   RC= LayoutCreateObject (Locale_Arabic,&plh);    /* or: Locale_Hebrew */
  10294.   if (RC) { printf("Create Error! !!\n"); exit(0);}
  10295.   layout[0].name = TypeOfText ;
  10296.   layout[0].value = &Descr ;
  10297.  
  10298.  
  10299.   Descr.in  = TEXT_IMPLICIT;
  10300.   Descr.out = TEXT_VISUAL;
  10301.  
  10302.   layout[1].name = 0 ;
  10303.  
  10304.   /* Set the LayoutValues   */
  10305.   RC=LayoutSetValues (plh,layout,&index);
  10306.  
  10307.  
  10308.   if (RC)
  10309.   {
  10310.         printf("SetValue Error at index %d !!!\n",index);
  10311.         exit(0);
  10312.    }
  10313.   RC = LayoutDestroyObject(plh);
  10314.   if (RC) { printf(" DESTROY Error!!!\n"); exit(0);}
  10315.  
  10316.  
  10317. ΓòÉΓòÉΓòÉ <hidden> Related Functions - LayoutSetValues ΓòÉΓòÉΓòÉ
  10318.  
  10319. Related Functions 
  10320.  
  10321.      LayoutCreateObject 
  10322.      LayoutDestroyObject 
  10323.      LayoutEditShape 
  10324.      LayoutQueryValues 
  10325.      LayoutTransformText 
  10326.  
  10327.  
  10328. ΓòÉΓòÉΓòÉ 17.2.6. LayoutTransformText ΓòÉΓòÉΓòÉ
  10329.  
  10330.  
  10331. ΓòÉΓòÉΓòÉ <hidden> Topics - LayoutTransformText ΓòÉΓòÉΓòÉ
  10332.  
  10333. Select an item: 
  10334.  
  10335.       Function Syntax 
  10336.       Parameters 
  10337.       Return Values 
  10338.       Notes 
  10339.       Example 
  10340.       Related Functions 
  10341.  
  10342.  
  10343. ΓòÉΓòÉΓòÉ <hidden> Syntax - LayoutTransformText ΓòÉΓòÉΓòÉ
  10344.  
  10345. /*******************************************/
  10346. /* This function transforms the Inpbuf     */
  10347. /* text according to the current layout    */
  10348. /* values.                                 */
  10349. /*******************************************/
  10350.  
  10351. #define INCL_LAYOUT
  10352. #include <layout.h>
  10353.  
  10354. LAYOUT_OBJECT  plh;       /* Layout Object handle */
  10355. PUCHAR         InpBuf;    /* Input text  */
  10356. PULONG         InpSize;   /* Size of InpBuf-number of bytes */
  10357. PVOID          OutBuf;    /* Output text */
  10358. PULONG         OutSize;   /* Size of outBuf-number of bytes */
  10359. PULONG         InpToOut;  /* Source to target index array */
  10360. PULONG         OutToInp;  /* Target to source index array */
  10361. PUCHAR         BidiLevel; /* Bidirectional levels array */
  10362. APIRET         RC;        /* Return value */
  10363.  
  10364.      RC  =  LayoutTransformText ( plh, InpBuf, InpSize, OutBuf, OutSize,
  10365.                                   InpToOut, OutToInp, BidiLevel);
  10366.  
  10367.  
  10368. ΓòÉΓòÉΓòÉ <hidden> Parameters - LayoutTransformText ΓòÉΓòÉΓòÉ
  10369.  
  10370.  plh  (LAYOUT_OBJECT) - input 
  10371.     Layout object handle. 
  10372.  
  10373.     The plh argument specifies a layout object returned by the 
  10374.     LayoutCreateObject function. 
  10375.  
  10376.  InpBuf  (PUCHAR) - input 
  10377.     Input text. 
  10378.  
  10379.     The InpBuf argument specifies the source text to be processed. The InpBuf 
  10380.     may not be NULL. 
  10381.  
  10382.  InpSize  (PULONG) - input 
  10383.     Size of InpBuf-number of bytes. 
  10384.  
  10385.     The InpSize argument specifies the number of code elements to be processed 
  10386.     in units associated with the type, i.e. bytes for LayoutTransform. A value 
  10387.     of-1 indicates that input is delimited by a NULL code element.  On return, 
  10388.     the value is modified to the actual number of code elements processed in 
  10389.     InBuf (unless the value in OutSize is zero, in which case, the value of 
  10390.     InpSize is not changed). 
  10391.  
  10392.  OutBuf  (PVOID) - output 
  10393.     Output text. 
  10394.  
  10395.     The OutBuf argument contains the transformed data.  This argument can be 
  10396.     specified as a Null pointer to indicate that no transformed data is 
  10397.     required. 
  10398.  
  10399.  Outsize  (PULONG) - output 
  10400.     Size of outBuf-number of bytes. 
  10401.  
  10402.     On input, the OutSize argument specifies the size of the output buffer in 
  10403.     number of bytes.  The output buffer should be large enough to contain the 
  10404.     transformed result; otherwise, only a partial transformation will be 
  10405.     performed.  If the ActiveShapeEditing layout value is set (True) the OutBuf 
  10406.     is recommended to be  allocated to contain at least. 
  10407.  
  10408.        number of code element 
  10409.  
  10410.     On return, the OutSize argument is modified to the actual number of bytes 
  10411.     placed in OutBuf. 
  10412.  
  10413.     When the OutSize argument is specified as zero, the function will calculate 
  10414.     the size of an output buffer large enough to contain the transformed text, 
  10415.     and the result will be returned in this field. The content of the buffers 
  10416.     specified by InpBuf and OutBuf, and a value of InpSize, will remain 
  10417.     unchanged. 
  10418.  
  10419.  InpToOut  (PULONG) 
  10420.     Source to target index array. 
  10421.  
  10422.     If the InpToOut argument is not a Null pointer, it represents an array of 
  10423.     values with the same number of code elements as InpBuf. On output, the nth 
  10424.     value in InpToOut corresponds to the nth code element in InpBuf. 
  10425.  
  10426.  OutToInp  (PULONG) - input 
  10427.     Target to source index array. 
  10428.  
  10429.     If the OutTolnp argument is not a NULL pointer, it represents an array of 
  10430.     values with the same number of code elements as contained in OutBuf.  On 
  10431.     output, the nth value in OutTolnp corresponds to the nth element in OutBuf. 
  10432.     This value is the index in InpBuf which identifies the original code 
  10433.     element of the nth element in OutBuf.  OutTolnp may be specified as NULL if 
  10434.     no index array from OutBuf to InpBuf is desired. 
  10435.  
  10436.  BidiLevel  (PUCHAR) - input 
  10437.     Bidirectional level array. 
  10438.  
  10439.     If the BidiLevel argument is not a NULL pointer, it represents an array of 
  10440.     values with the same number of elements as the source text.  The nth value 
  10441.     in BidiLevel corresponds to the nth code element in InpBuf.  This value is 
  10442.     the level of this code element as determined by the bidirectional 
  10443.     algorithm.  BidiLevel may be specified as NULL if a levels array is not 
  10444.     desired. 
  10445.  
  10446.  
  10447. ΓòÉΓòÉΓòÉ <hidden> Return Values - LayoutTransformText ΓòÉΓòÉΓòÉ
  10448.  
  10449.  RC(APIRET) - return 
  10450.     Success indicator. 
  10451.  
  10452.     0 
  10453.             The function completed without errors. 
  10454.  
  10455.     LAYOUT_E2BIG 
  10456.             The output buffer is full and the source text was not entirely 
  10457.             processed. 
  10458.  
  10459.  
  10460. ΓòÉΓòÉΓòÉ <hidden> Errors - LayoutTransformText ΓòÉΓòÉΓòÉ
  10461.  
  10462.  
  10463. ΓòÉΓòÉΓòÉ <hidden> Notes - LayoutTransformText ΓòÉΓòÉΓòÉ
  10464.  
  10465. The LayoutTransform function transforms the InpBuf text according to the 
  10466. current layout values in layout object.  Any layout value whose value type is 
  10467. LayoutTextDisriptor describes the attributes of the InpBuf and OutBuf. If the 
  10468. attributes are the same of both InpBuf and OutBuf then a null transformation is 
  10469. done with respect to that specific layout avalue. 
  10470.  
  10471. The output of this functions may be one or more of the following depending on 
  10472. the setting of the respective arguments: 
  10473.  
  10474.  OutBuf/Outsize 
  10475.     any transform data is stored into OutBuf. 
  10476.  
  10477.  InpToOut 
  10478.     a cross reference from each InpBuf code element to the transformed data. 
  10479.  
  10480.  OutToInp 
  10481.     a cross reference to each InpBuf code element from the transformed data. 
  10482.  
  10483.  BidiLevel 
  10484.     a weighted value that represents the directional level of each InpBuf code 
  10485.     element.  The level is dependent on the internal directional algorithm of 
  10486.     the layout object. 
  10487.  
  10488.  Each of these output arguments maybe NULL to specify that no output is desired 
  10489.  for the specific argument, but at least one of them should be set to non-NULL 
  10490.  to perform any significant work. 
  10491.  
  10492.  When the size of OutBuf is not large enough to contain the entire transformed 
  10493.  text, the input text state at the end of the error condition LAYOUT_E2BIG is 
  10494.  returned.  To resume the transformation on the remaining text, the application 
  10495.  should call the LayoutTransform function with the same layout object, the same 
  10496.  InpBuf, and Inpsize is set to zero (0). 
  10497.  
  10498.  
  10499. ΓòÉΓòÉΓòÉ <hidden> Example - LayoutTransformText ΓòÉΓòÉΓòÉ
  10500.  
  10501. This example creates a layout object then defines the values that need to be 
  10502. changed and uses the LayoutTransformText function to change them. 
  10503.  
  10504. #include <layout.h>
  10505.  
  10506. LAYOUT_OBJECT plh;
  10507.  
  10508. UCHAR InpBuf[30];
  10509. UCHAR OutBuf[30];
  10510. UCHAR BidiLvl[30];
  10511. ULONG ToOutBuf[30];
  10512. ULONG ToInpBuf[30];
  10513. ULONG InpSize = 30  ;
  10514. ULONG OutSize = 30   ;
  10515. LAYOUT_VALUES layout[2];
  10516. LAYOUT_TEXT_DESCRIPTOR Descr;
  10517. ULONG index;
  10518. ULONG RC;
  10519.  
  10520.     RC= LayoutCreateObject (Locale_Arabic,&plh);  /* or: Locale_Hebrew */
  10521.     if (RC) { printf("Create Error! !!\n"); exit(0);}
  10522.  
  10523.    /* Define the LayoutValues that will need changing */
  10524.     layout[0].name= TypeOfText|Orientation|Numerals|TextShaping;
  10525.     layout[0].value = &Descr ;
  10526.  
  10527.  
  10528.    /* using the OR operator, we set the bits in the Layout Descriptor,
  10529.     * to describe the input string attributes, it is RTL, contains
  10530.     * Arabic numerals, and it is in Base shapes */
  10531.  
  10532.    Descr.in=TEXT_IMPLICIT|ORIENTATION_RTL|NUMERALS_NOMINAL|TEXT_NOMINAL;
  10533.  
  10534.  
  10535.    /* Now let's compose the Text Descriptor for the output string to be
  10536.     * LTR, Hindu numeral, and Shaped (Automatic Shape Determination) */
  10537.  
  10538.    Descr.out=TEXT_VISUAL|ORIENTATION_LTR| NUMERALS_CONTEXTUAL|TEXT_SHAPED;
  10539.  
  10540.     layout[1].name = 0 ;
  10541.  
  10542.     /* Set the LayoutValues   */
  10543.     RC=LayoutSetValues (plh,layout,&index);
  10544.  
  10545.   /* calling the function.. to convert the string */
  10546.     RC=LayoutTransformText (plh,
  10547.                       InpBuf,
  10548.                       &InpSize,
  10549.                       OutBuf,
  10550.                       &OutSize,
  10551.                       ToOutBuf,
  10552.                       ToInpBuf,
  10553.                       BidiLvl);
  10554.  
  10555.     if (RC) { printf("Transform Error %d!!!\n",RC); exit(0);}
  10556.  
  10557.  
  10558.   RC = LayoutDestroyObject(plh);
  10559.   if (RC) { printf(" DESTROY Error!!!\n"); exit(0);}
  10560.  ************************************************************ 
  10561.  
  10562.  
  10563. ΓòÉΓòÉΓòÉ <hidden> Related Functions  - LayoutTransformText ΓòÉΓòÉΓòÉ
  10564.  
  10565. Related Functions 
  10566.  
  10567.      LayoutCreateObject 
  10568.      LayoutDestroyObject 
  10569.      LayoutEditShape 
  10570.      LayoutQueryValues 
  10571.      LayoutSetValues 
  10572.  
  10573.  
  10574. ΓòÉΓòÉΓòÉ 18. Notices ΓòÉΓòÉΓòÉ
  10575.  
  10576. August 1996 
  10577.  
  10578. The following paragraph does not apply to the United Kingdom or any country 
  10579. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  10580. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  10581. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  10582. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  10583. do not allow disclaimer of express or implied warranties in certain 
  10584. transactions, therefore, this statement may not apply to you. 
  10585.  
  10586. This publication could include technical inaccuracies or typographical errors. 
  10587. Changes are periodically made to the information herein; these changes will be 
  10588. incorporated in new editions of the publication. IBM may make improvements 
  10589. and/or changes in the product(s) and/or the program(s) described in this 
  10590. publication at any time. 
  10591.  
  10592. It is possible that this publication may contain reference to, or information 
  10593. about, IBM products (machines and programs), programming, or services that are 
  10594. not announced in your country.  Such references or information must not be 
  10595. construed to mean that IBM intends to announce such IBM products, programming, 
  10596. or services in your country. 
  10597.  
  10598. Requests for technical information about IBM products should be made to your 
  10599. IBM reseller or IBM marketing representative. 
  10600.  
  10601.  
  10602. ΓòÉΓòÉΓòÉ 18.1. Copyright Notices ΓòÉΓòÉΓòÉ
  10603.  
  10604. (C) Copyright International Business Machines Corporation 1994,1996. All rights 
  10605. reserved. 
  10606. Note to U.S. Government Users - Documentation related to restricted rights - 
  10607. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  10608. Schedule Contract with IBM Corp. 
  10609.  
  10610.  
  10611. ΓòÉΓòÉΓòÉ 18.2. Disclaimers ΓòÉΓòÉΓòÉ
  10612.  
  10613. References in this publication to IBM products, programs, or services do not 
  10614. imply that IBM intends to make these available in all countries in which IBM 
  10615. operates. Any reference to an IBM product, program, or service is not intended 
  10616. to state or imply that only that IBM product, program, or service may be used. 
  10617. Subject to IBM's valid intellectual property or other legally protectable 
  10618. rights, any functionally equivalent product, program, or service may be used 
  10619. instead of the IBM product, program, or service. The evaluation and 
  10620. verification of operation in conjunction with other products, except those 
  10621. expressly designated by IBM, are the responsibility of the user. 
  10622.  
  10623. IBM may have patents or pending patent applications covering subject matter in 
  10624. this document. The furnishing of this document does not give you any license to 
  10625. these patents. You can send license inquiries, in writing, to: 
  10626.  
  10627.       IBM Director of Licensing 
  10628.       IBM Corporation 
  10629.       500 Columbus Avenue 
  10630.       Thornwood, NY  10594 
  10631.       U.S.A. 
  10632.  
  10633.  Asia-Pacific users can inquire, in writing, to the IBM Director of 
  10634.  Intellectual Property and Licensing, IBM World Trade Asia Corporation, 2-31 
  10635.  Roppongi 3-chome, Minato-ku, Tokyo 106, Japan. 
  10636.  
  10637.  Licensees of this program who wish to have information about it for the 
  10638.  purpose of enabling: (i) the exchange of information between independently 
  10639.  created programs and other programs (including this one) and (ii) the mutual 
  10640.  use of the information which has been exchanged, should contact IBM 
  10641.  Corporation, Department LZKS, 11400 Burnet Road, Austin, TX 78758 U.S.A.  Such 
  10642.  information may be available, subject to appropriate terms and conditions, 
  10643.  including in some cases, payment of a fee. 
  10644.  
  10645.  
  10646. ΓòÉΓòÉΓòÉ 18.3. Trademarks ΓòÉΓòÉΓòÉ
  10647.  
  10648. The following terms are trademarks of the IBM Corporation in the United States 
  10649. or other countries or both: 
  10650.  
  10651.  
  10652.       CUA 
  10653.       IBM 
  10654.       OS/2 
  10655.       Presentation Manager 
  10656.       Workplace Shell 
  10657.  
  10658.  The following terms are trademarks of other companies: 
  10659.  
  10660.       Adobe (Adobe Systems Incorporated) 
  10661.