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