home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pmbitech.zip / PMBDTECH.INF (.txt)
OS/2 Help File  |  1994-08-17  |  254KB  |  10,602 lines

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