home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / developmen / oplexamp / DIULINE.TXT < prev    next >
Text File  |  1993-09-28  |  4KB  |  112 lines

  1. Underlines in Opl dialogs on the S3a
  2. ------------------------------------
  3.  
  4. Opl Developers may find the following module, DIULINE.OPL, of use for
  5. the following reasons:
  6.     * It allows them to create dialogs with underlines on items other
  7.       than text items (eg underlines under edit lines)
  8.     * It allows them to remove underlines from dialog titles (not
  9.       otherwise possible on the S3a, except by leaving the nominal
  10.       title line completely blank, as in "dInit")
  11.  
  12. DIULINE.OPL
  13. -----------
  14.     PROC diuline:(index%,on%)
  15.       local ddp%,numits%,itm%,flags%
  16.       ddp%=peekw($36) rem DatDialogPtr
  17.       itm%=ddp%+$a
  18.       numits%=peekb(ddp%+$3d)
  19.       if numits%>7
  20.         itm%=peekw(itm%)
  21.       endif
  22.       itm%=itm%+index%*6+4
  23.       flags%=peekw(itm%)
  24.       if on%
  25.         flags%=flags% or 4
  26.       else
  27.         flags%=flags% and not 4
  28.       endif
  29.       pokew itm%,flags%
  30.     ENDP
  31.  
  32. TAKE CARE TO TYPE THIS IN EXACTLY (or, better, copy it electronically).
  33.  
  34. Use of DIULINE:(index%,on%)
  35. ---------------------------
  36. The parameter index% gives the item number in the dialog, to which
  37. the underline is to be applied (if on% is non-zero) or else removed
  38. (if on% is zero).  Here, the counting starts at ZERO for the top line.
  39.  
  40. You must only call DIULINE:(index%,on%)
  41.     * After the dInit of the dialog
  42.     * After defining the line referred to by index%
  43.     * Before the corresponding DIALOG call
  44.  
  45. For example,
  46.     PROC test:
  47.       local s$(10)
  48.       loadm "diuline"
  49.       s$="Underlined"
  50.       dInit "Test"
  51.       dText "abc","def",$200
  52.       dText "ABC","DEF"
  53.       dText "ABC","DEF"
  54.       dText "ABC","DEF"
  55.       dEdit s$,"String"
  56.       diuline:(5,1)
  57.       dText "ABC","DEF"
  58.       dText "ABC","DEF"
  59.       diuline:(0,0)
  60.       dialog
  61.     ENDP
  62.  
  63. Here, the first call to diuline: places an underline under the fifth
  64. item in the dialog, ie the dEdit line.  The final call to diuline:
  65. (which could in fact have been placed anywhere between the dInit and
  66. the DIALOG calls) removes the underline from the title line.
  67.  
  68. Notes:
  69. ------
  70. S3a dialogs can, of course, have more than one underline in them.
  71.  
  72. S3 compatibility mode on the S3a *also* has this feature.
  73.  
  74. In both S3a mode and S3 modes on the S3a, setting an underline, using
  75. the $200 flag on a dText item, does *not* remove the underline on any
  76. dInit "xxx" line.
  77.  
  78. This may have the unintended consequence that a program written for
  79. the S3, but running on the S3a, will unexpectedly fail with a "Too
  80. many items" message:
  81.     if a dialog has seven items
  82.     if the $200 flag has been applied to a dText item, with the
  83. intention of underlining an item other than the top item in the dialog.
  84.  
  85. What happens here is that the dialog ends up with *two* underlines,
  86. and consequently no longer fits, vertically, on the compatability
  87. mode screen.
  88.  
  89. Regrettably, there is no way to fix this, for a given S3 Opl program,
  90. without re-translating the program after making one of two kinds of
  91. change in it:
  92.  
  93.     * Either the dInit "xxx" line should be changed into the pair of
  94.       lines      dInit
  95.                  dText, "", "xxx", 2
  96.  
  97.     * Or follow the dInit "xxx" line with a call diuline:(0,0)
  98.  
  99. Possibly, this would represent a legitimate use of the RevTran
  100. program (available eg on CIX).
  101.  
  102. Finally, calling DIULINE: on an S3 classic (as opposed to inside S3
  103. compatability mode on the S3a) will have no effect whatsoever -
  104. assuming that it is called in accordance with the rules stated above.
  105. (If it is called *other* than in accordance with these rules, the
  106. program is liable to random damage, but this is, of course, also the
  107. case when these rules are broken on the S3a.)
  108.  
  109. These notes prepared by:
  110. ------------------------
  111. David Wood, Psion Software Development, 21st Sept 1993.
  112.