home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / AUROR21A.ZIP / CLRCHART.AML < prev    next >
Text File  |  1995-09-01  |  7KB  |  267 lines

  1. /* ------------------------------------------------------------------ */
  2. /* Macro:        CLRCHART.AML                                         */
  3. /* Written by:   nuText Systems                                       */
  4. /*                                                                    */
  5. /* Description:  This macro displays a color chart with color         */
  6. /*               attribute codes in decimal and hexidecimal. It is    */
  7. /*               used by CFGCOLOR.X, but also be used independently.  */
  8. /*                                                                    */
  9. /* Usage:        To enter a color string (e.g. 'red on blue') at      */
  10. /*               the cursor position in your text:                    */
  11. /*                 1. run this macro                                  */
  12. /*                 2. position the cursor to the desired color        */
  13. /*                 3. press <enter>                                   */
  14. /* ------------------------------------------------------------------ */
  15.  
  16.   include bootpath "define.aml"
  17.  
  18.   define
  19.     set display_str    '  '
  20.   end
  21.  
  22.   var basecolor
  23.   var foreground
  24.   var background
  25.   var lforeground
  26.   var lbackground
  27.   var xbackground
  28.   var retvalue
  29.   var colorstring
  30.  
  31.   xposition    = arg 2
  32.   yposition    = arg 3
  33.   initialattr  = arg 4
  34.   notifyobject = arg 5
  35.  
  36.   if initialattr then
  37.     foreground = initialattr & 0fh
  38.     background = (initialattr & 0f0h) shr 4
  39.     if background > 7 then
  40.       background = background - 8
  41.       basecolor  = 128
  42.     end
  43.   end
  44.  
  45.   // inherit window handling from 'win' object
  46.   inheritfrom "win"
  47.  
  48.   // create the color chart window
  49.   createwindow
  50.   setframe ">b"
  51.   setcolor  border_color         color gray  on black
  52.   setcolor  text_color           color black on black
  53.   setcolor  border_flash_color   color brightgreen on black
  54.   settitle "Color Chart"
  55.   setwinctrl (if? basecolor "≡" "≡") 2
  56.  
  57.   if xposition then
  58.     sizewindow xposition yposition xposition + 23 yposition + 17
  59.                "a1" '' (getprevwin)
  60.   else
  61.     // center the window
  62.     width = 24
  63.     height = 18
  64.     ox = (getvidcols - width) / 2
  65.     oy = (getvidrows - height) / 2
  66.     sizewindow ox oy ox + width - 1 oy + height - 1 "ad"
  67.   end
  68.   setborder "1f"
  69.  
  70.   // draw the color chart
  71.   function drawchart
  72.     var b
  73.     var f
  74.     gotoxy 1 1
  75.     while f < 16 do
  76.       while b < 8 do
  77.         writestr display_str  (b * 16 + f) + basecolor
  78.         b = b + 1
  79.       end
  80.       writeline
  81.       b = 0
  82.       f = f + 1
  83.     end
  84.     gotoxy 19 17
  85.     writestr "  O" (color black on green)
  86.     writestr "k  " (color red   on green)
  87.   end
  88.  
  89.   drawchart
  90.  
  91.   // return the color name for a color attribute
  92.   function attrname (attr)
  93.     case attr
  94.       when  0 "black"       when  8 "darkgray"
  95.       when  1 "blue"        when  9 "brightblue"
  96.       when  2 "green"       when 10 "brightgreen"
  97.       when  3 "cyan"        when 11 "brightcyan"
  98.       when  4 "red"         when 12 "brightred"
  99.       when  5 "magenta"     when 13 "pink"
  100.       when  6 "brown"       when 14 "yellow"
  101.       when  7 "gray"        when 15 "white"
  102.     end
  103.   end
  104.  
  105.   function draw
  106.  
  107.     // clear the old bracket cursor
  108.     if xbackground then
  109.       writestr display_str lforeground + (lbackground * 16) + basecolor   xbackground - 1
  110.     end
  111.  
  112.     attr = foreground + (background * 16) + basecolor
  113.     //attr = getattr
  114.     colorstring = (attrname foreground) + ' on ' + (attrname background + (if? basecolor 8))
  115.  
  116.     // write color info at the bottom of the chart
  117.     writestr (pad '[dec=' + attr + ',hex=' + (base attr 16) + ']' 16 'l')
  118.              (color gray on black) 1 17
  119.     writestr  (pad colorstring 24 'l') (color gray on black) 1 18
  120.  
  121.     // move the cursor to the appropriate color cell
  122.     xbackground = background * 3 + 2
  123.     gotoxy xbackground foreground + 1
  124.  
  125.     // write the bracket [ ] cursor
  126.     attr = (if? background + (if? basecolor 8) > brightblue black white) + (background * 16) + basecolor
  127.     writestr '[' attr  xbackground - 1
  128.     writestr ']' attr  xbackground + 1
  129.     gotoxy xbackground foreground + 1
  130.  
  131.     lforeground = foreground
  132.     lbackground = background
  133.  
  134.     sendobject notifyobject "oncolor" (getattr)
  135.   end
  136.  
  137.   draw
  138.   showcursor 50 99
  139.  
  140.   // local close function for this window
  141.   function close (value)
  142.     // call 'close' in object 'win'
  143.     pass
  144.     destroyobject
  145.     endprocess
  146.     retvalue = if? (arg) value -1
  147.   end
  148.  
  149.   // toggle background base color
  150.   function togglebase
  151.     if basecolor then
  152.       basecolor = 0
  153.       setwinctrl '≡' 2
  154.     else
  155.       basecolor = 128
  156.       setwinctrl '≡' 2
  157.     end
  158.     xbackground = 0
  159.     drawchart
  160.     draw
  161.   end
  162.  
  163.   function "≡"
  164.     close
  165.   end
  166.  
  167.   // exit the chart
  168.   key <esc>
  169.     close
  170.   end
  171.  
  172.   // exit the chart when switching windows
  173.   function  onkillfocus
  174.     close
  175.   end
  176.  
  177.   // enter the color description in an edit window and exit
  178.   key <enter>
  179.     queue "write" colorstring
  180.     close (getattr)
  181.   end
  182.  
  183.   function <lbutton> (m)
  184.     pass
  185.     case getregion
  186.       // client area
  187.       when 1
  188.         if virtorow <= 16 then
  189.           foreground = (virtorow - 1) mod 16
  190.         else
  191.           // Ok button
  192.           if not m and virtorow == 17 and virtocol >= 19 then
  193.             call <enter>
  194.           end
  195.           return
  196.         end
  197.         background = (virtocol - 1) / 3
  198.         draw
  199.       when 52
  200.         togglebase
  201.     end
  202.   end
  203.  
  204.   function <move>
  205.     pass
  206.     if (button? 1) and getregion == 1 then
  207.       send <lbutton> 1
  208.     end
  209.   end
  210.  
  211.   function <ldouble>
  212.     call <enter>
  213.   end
  214.  
  215.   // check for 'Ok' hotkey
  216.   function <char> (c)
  217.     if icompare c 'k' then
  218.       call <enter>
  219.     else
  220.       pass
  221.     end
  222.   end
  223.  
  224.   // move the cursor around in the chart
  225.   key <left>
  226.     if not background then
  227.       togglebase
  228.     end
  229.     background = if? background (background - 1) 7
  230.     draw
  231.   end
  232.  
  233.   key <right>
  234.     if background == 7 then
  235.       togglebase
  236.     end
  237.     background = (background + 1) mod 8
  238.     draw
  239.   end
  240.  
  241.   key <up>
  242.     foreground = if? foreground (foreground - 1) 15
  243.     draw
  244.   end
  245.  
  246.   key <down>
  247.     foreground = (foreground + 1) mod 16
  248.     draw
  249.   end
  250.  
  251.   // toggle background base color
  252.   key <tab>
  253.     togglebase
  254.   end
  255.  
  256.   // toggle background base color
  257.   key <shift tab>
  258.     togglebase
  259.   end
  260.  
  261.   // invoke the editor recursively
  262.   // wait for endprocess to return here
  263.   process
  264.  
  265.   // return the ascii value
  266.   return retvalue
  267.