Subversion Repositories Kolibri OS

Rev

Rev 551 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;  COLORREF.ASM - COLOR REFERENCE
  2. ;
  3. ;  Compile with FASM for Menuet
  4. ;
  5.  
  6. use32
  7.          org  0x0
  8.  
  9.          db  'MENUET01'            ; 8 byte id
  10.          dd   0x01                 ; header version
  11.          dd   start                ; start of code
  12.          dd   finis                ; size of image
  13.          dd   0x1000               ; memory for app
  14.          dd   0x1000               ; esp
  15.          dd   0x0,0x0              ; I_Param , I_Icon
  16.  
  17. include 'lang.inc'
  18. include '..\..\..\macros.inc'
  19. wide:    dd   0                    ; screen pixels width
  20. mouse:   dd   0                    ; 1=right,2=left [mouse click]
  21.  
  22.  
  23. start:
  24.  
  25.     mov  eax,14                    ; get screen size
  26.     mcall
  27.     shr  eax,16                    ; get width into AX
  28.     inc  eax                       ; not 0 based
  29.     mov  [wide],eax
  30.  
  31.     call draw_window
  32.  
  33. still:
  34.     mov  eax,23                    ; wait for event w/timeout
  35.     mov  ebx,5                     ; delay in hundredths
  36.     mcall
  37.  
  38.     cmp  eax,1                     ; redraw request ?
  39.     jne  s1
  40.     jmp  red
  41. s1: cmp  eax,2                     ; key in buffer ?
  42.     jne  s2
  43.     jmp  key
  44. s2: cmp  eax,3                     ; button in buffer ?
  45.     jne  s3
  46.     jmp   button
  47. s3: mov  eax,9                     ; process info function
  48.     mov  ebx,stat_table            ; return data table
  49.     mov  ecx,-1                    ; who am i
  50.     mcall
  51.     cmp  ax,[stat_table+4]         ; are we active?
  52.     je   active                    ; yep
  53.     jmp  still
  54.  
  55.   active:
  56.     mov  eax,37                    ; mouse info function
  57.     mov  ebx,2                     ; get buttons
  58.     mcall
  59.     cmp  eax,0                     ; mouse click?
  60.     jne  click
  61.     jmp  still
  62.   click:
  63.     mov  [mouse],eax               ; save mouse click
  64.     mov  eax,37                    ; mouse info
  65.     xor  ebx,ebx                   ; get screen pos for mouse
  66.     mcall                      ; into EAX
  67.     xor  ebx,ebx
  68.     mov  bx,ax                     ; BX=y screen position
  69.     shr  eax,16                    ; AX=x screen position
  70.     xchg eax,ebx                   ; EAX=y, EBX=x
  71.     dec  eax                       ; don't calc mouse scanline
  72.     mov  ecx,[wide]                ; get pixels wide
  73.     mul  ecx
  74.     add  ebx,eax                   ; add x
  75.     mov  eax,35                    ; get mouse pos pixel
  76.     mcall                      ; EAX=mouse pixel color
  77.     mov  ebx,eax                   ; EBX has color
  78.     mov  esi,colors                ; color table
  79.     mov  ecx,72                    ; total colors
  80.     xor  edx,edx                   ; init a counter
  81.   check:
  82.     lodsd
  83.     inc  edx                       ; update counter
  84.     cmp  ebx,eax                   ; color match?
  85.     je   _match                     ; yep
  86.     loop check                     ; check all colors
  87.     jmp still                      ; no match
  88.   _match:
  89.     cmp  [mouse],dword 1           ; right click?
  90.     je   right                     ; yep
  91.   left:
  92.     cmp  [picks],edx               ; changed left color yet?
  93.     jne  l1                        ; no, do it
  94.     jmp  still
  95. l1: mov  [picks],edx               ; update left pick color
  96.     call clear                     ; erase old text
  97.     call draw_picks                ; redraw colors and text
  98.     jmp  still
  99.   right:
  100.     cmp  [picks+4],edx             ; changed right color yet?
  101.     jne  r1                        ; no, do it
  102.     jmp  still
  103. r1: mov  [picks+4],edx             ; update right pick color
  104.     call clear                     ; erase old text
  105.     call draw_picks                ; redraw colors and text
  106.     jmp  still
  107.  
  108.   red:                             ; redraw
  109.     call draw_window
  110.     jmp  still
  111.  
  112.   key:                             ; key
  113.     mov  eax,2                     ; just read it and ignore
  114.     mcall
  115.     cmp  al,0                      ; key in buffer?
  116.     je   k1                        ; yep
  117.     jmp  still
  118. k1: cmp  ah,'H'                    ; cap H ?
  119.     je   k2                        ; yep
  120.     cmp  ah,'h'                    ; locase h ?
  121.     je   k2                        ; yep
  122.     jmp  still
  123. k2: call help                      ; show help screen
  124.     jmp  still
  125.  
  126.   button:                          ; button
  127.     mov  eax,17                    ; get id
  128.     mcall
  129.     cmp  ah,1                      ; button id=1 ?
  130.     je   close
  131.     jmp  still
  132.  
  133.   close:
  134.     mov  eax,-1                    ; close this program
  135.     mcall
  136.  
  137.  
  138. ;   *********************************************
  139. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  140. ;   *********************************************
  141.  
  142.  
  143. draw_window:
  144.  
  145.     mcall 12,1
  146.  
  147.     mov  eax,0                     ; DRAW WINDOW
  148.     mov  ebx,1*65536+200           ; [x start] *65536 + [x size]
  149.     mov  ecx,200*65536+240         ; [y start] *65536 + [y size]
  150.     mov  edx,0x14000000            ; work area color (type II)
  151.     mov  edi,title                ; frame color
  152.     mcall
  153.    
  154.     call palette                   ; display color palette
  155.  
  156.     mcall 12, 2
  157.  
  158.     ret
  159.  
  160.  
  161. ;   *********************************************
  162. ;   *******  COLOR PALETTE LAYOUT ROUTINES ******
  163. ;   *********************************************
  164.  
  165.  
  166. palette:
  167.     mov  ebx,15*65536+18           ; LAYOUT: start x and width
  168.     mov  edx,32*65536+18           ; LAYOUT: start y and depth
  169.     mov  ecx,8                     ; 8 rows
  170.     mov  ebp,colors                ; color table
  171. p1: push ecx
  172.     mov  ecx,9                     ; 9 columns
  173. p2: push ecx
  174.     push edx
  175.     mov  ecx,edx                   ; y coord
  176.     mov  edx,[ebp]                 ; color
  177.     mov  eax,13                    ; draw bar function
  178.     mcall
  179.     pop  edx
  180.     pop  ecx
  181.     add  ebx,19*65536              ; next column
  182.     add  ebp,4                     ; next color
  183. p3: loop p2
  184.     pop  ecx
  185.     mov  ebx,15*65536+18           ; restart x
  186.     add  edx,19*65536              ; next row
  187.     loop p1
  188.     call draw_picks
  189.  
  190.     ret
  191.  
  192. draw_picks:
  193.     mov  ebx,64*65536+24           ; draw x and width
  194.     mov  ecx,188*65536+42          ; draw y and depth
  195.     mov  edx,0xc0c0c0              ; color grey
  196.     mov  eax,13                    ; draw bar function
  197.     mcall
  198.     mov  eax,[picks]               ; first picked color
  199.     mov  esi,22*65536+196          ; print at x and y
  200.     call do_hex                    ; print color number
  201.     mov  eax,[picks+4]             ; second picked color
  202.     mov  esi,22*65536+215          ; print at x and y
  203.     call do_hex                    ; print color number
  204.     mov  eax,[picks]               ; first picked color
  205.     mov  ebx,67*65536+18           ; x and width
  206.     mov  esi,191*65536+18          ; y and depth
  207.     call do_color                  ; paint color 1 square
  208.     mov  eax,[picks+4]             ; second picked color
  209.     mov  ebx,67*65536+18           ; x and width
  210.     mov  esi,209*65536+18          ; y and depth
  211.     call do_color                  ; paint color 2 square
  212.     mov  eax,[picks]               ; first picked color
  213.     mov  ebx,96*65536+196          ; x and y
  214.     call do_name                   ; print color's name
  215.     mov  eax,[picks+4]             ; second picked color
  216.     mov  ebx,96*65536+215          ; x and y
  217.     call do_name                   ; print color's name
  218.  
  219.     ret
  220.  
  221. do_hex:
  222.     dec  eax                       ; use 0 base
  223.     mov  ecx,4                     ; dword length
  224.     mul  ecx                       ; calc pointer
  225.     mov  edi,colors                ; color table
  226.     add  edi,eax                   ; add offset
  227.     mov  ecx,[edi]                 ; save color 1
  228.     mov  ebx,0x60100               ; print 6 hex digits
  229.     mov  edx,esi                   ; copy color
  230.     mov  esi,0xe1e1e1              ; use white
  231.     mov  eax,47                    ; print number function
  232.     mcall
  233.  
  234.     ret
  235.  
  236. do_color:
  237.     dec  eax                       ; use 0 base
  238.     mov  ecx,4                     ; dword length
  239.     mul  ecx                       ; calc pointer
  240.     mov  edi,colors                ; color table
  241.     add  edi,eax                   ; add offset
  242.     mov  edx,[edi]                 ; color
  243.     mov  ecx,esi                   ; recover y an depth
  244.     mov  eax,13                    ; draw bar function
  245.     mcall
  246.  
  247.     ret
  248.  
  249. do_name:
  250.     dec  eax                       ; use 0 base
  251.     mov  ecx,15                    ; string length
  252.     mul  ecx                       ; calc pointer
  253.     mov  edx,names                 ; color table
  254.     add  edx,eax                   ; add offset
  255.     mov  ecx,0xe1e1e1              ; color
  256.     mov  esi,15
  257.     mov  eax,4                     ; print text function
  258.     mcall
  259.  
  260.     ret
  261.  
  262. clear:
  263.     mov  ebx,22*65536+36           ; x and width
  264.     mov  ecx,196*65536+26          ; y and depth
  265.     mov  edx,0x000000              ; color
  266.     mov  eax,13                    ; draw bar funx
  267.     mcall
  268.     mov  ebx,96*65536+90           ; x and width
  269.     mov  ecx,196*65536+26          ; y and depth
  270.     mov  edx,0x000000              ; color
  271.     mov  eax,13                    ; draw bar funx
  272.     mcall
  273.  
  274.     ret
  275.  
  276. help:
  277.         mcall 48,4
  278.         mov ecx, eax
  279.         shl ecx, 16
  280.         add ecx, 236
  281.         sub ecx, eax
  282.  
  283.        
  284.     mov  ebx,5*65536+191           ; x and width
  285.     mov  edx,0x465e8f              ; dark denim color
  286.     mov  eax,13                    ; write text funx
  287.     mcall
  288.     mov  ebx,20*65536+40           ; starting x and y
  289.     mov  edx,text                  ; start of text
  290.     mov  esi,27                    ; width of text
  291.     mov  ecx,14                    ; 14 text lines to do
  292.     mov  eax,4                     ; write text funx
  293. h1: push ecx
  294.     sub  ebx,65537                 ; drop shadow x and y
  295.     mov  ecx,0x000000              ; black shadow
  296.     mcall
  297.     add  ebx,65537                 ; original x and y
  298.     mov  ecx,0xefefef              ; white text
  299.     mcall
  300.     add  edx,27                    ; next line of text
  301.     add  bx,12                     ; next row
  302.     pop  ecx
  303.     loop h1
  304.     mov  eax,10                    ; wait on event
  305.     mcall
  306.     cmp  eax,2                     ; got a key?
  307.     jne  h2                        ; nope
  308.     mov  eax,2                     ; yep, burn it
  309.     mcall
  310. h2:
  311.         call draw_window
  312.  
  313.     ret
  314.  
  315.  
  316. ;   *********************************************
  317. ;   **********  DATA DEFINITIONS AREA ***********
  318. ;   *********************************************
  319.  
  320. title    db   'COLOR REFERENCE H>HELP',0
  321.  
  322. picks:
  323.     dd   31,2           ; selected top/bot colors
  324.  
  325. colors:
  326.     dd   0xe0e0e0       ; white
  327.     dd   0xe7e6a0       ; pale yellow
  328.     dd   0xe7e05a       ; lemon yellow
  329.     dd   0xe7c750       ; mustard
  330.     dd   0xe7b850       ; cadium yellow
  331.     dd   0xbfa461       ; yellow ocre
  332.     dd   0xe0c090       ; cream
  333.     dd   0xe0b27b       ; peach
  334.     dd   0xe2986d       ; dark peach
  335.     dd   0xebb2c0       ; pink
  336.     dd   0xe0b0a0       ; flesh
  337.     dd   0xc79790       ; artificial arm
  338.     dd   0xb88688       ; deep blush
  339.     dd   0xc4a077       ; washed khaki
  340.     dd   0xb69269       ; khaki
  341.     dd   0xa8845b       ; dark khaki
  342.     dd   0xab937a       ; beige
  343.     dd   0xa39370       ; poupon
  344.     dd   0x988c00       ; camouflage
  345.     dd   0x98a024       ; pale olive
  346.     dd   0x838b00       ; olive
  347.     dd   0x6d7600       ; dark olive
  348.     dd   0x5b6200       ; black olive
  349.     dd   0x94946a       ; washed army
  350.     dd   0x74744a       ; army
  351.     dd   0x66a696       ; pale teal
  352.     dd   0x409b90       ; faded teal
  353.     dd   0x008d8d       ; pastel teal
  354.     dd   0x007c7c       ; teal
  355.     dd   0x006464       ; dark teal
  356.     dd   0x00b8ca       ; light turquoise
  357.     dd   0x00a0b2       ; turquoise
  358.     dd   0x00889a       ; dark turquoise
  359.     dd   0x575f8c       ; medium cobalt
  360.     dd   0x4e4e7c       ; cobalt
  361.     dd   0x00459a       ; ultramarine
  362.     dd   0x400088       ; navy blue
  363.     dd   0x4e00e7       ; true blue
  364.     dd   0x508cec       ; sky blue
  365.     dd   0x6a73d0       ; mountain blue
  366.     dd   0x677ab0       ; faded jeans
  367.     dd   0x576fa0       ; denim
  368.     dd   0xd048c8       ; fuschia
  369.     dd   0xb800e7       ; lavendar
  370.     dd   0xa800a8       ; light violet
  371.     dd   0x780078       ; violet
  372.     dd   0x520064       ; purple
  373.     dd   0xb800b8       ; magenta
  374.     dd   0xa4307a       ; rose
  375.     dd   0x90207f       ; mauve
  376.     dd   0xe76e83       ; salmon
  377.     dd   0xea7a7d       ; pastel orange
  378.     dd   0xe26830       ; orange
  379.     dd   0xac5800       ; burnt sienna
  380.     dd   0xcc0000       ; red orange
  381.     dd   0xac0000       ; cadium red
  382.     dd   0x880040       ; brick red
  383.     dd   0x780000       ; rust
  384.     dd   0x683020       ; terra cotta
  385.     dd   0x7f4658       ; light maroon
  386.     dd   0x702050       ; maroon
  387.     dd   0x7a5b5f       ; umber blush
  388.     dd   0x584838       ; burnt umber
  389.     dd   0x8a5d1a       ; cigar brown
  390.     dd   0x64504a       ; ice brown
  391.     dd   0x564242       ; dark chocolate
  392.     dd   0x00aa66       ; celery stalk
  393.     dd   0x107a30       ; forest green
  394.     dd   0x365800       ; hooker's green
  395.     dd   0x8beb88       ; pastel lime
  396.     dd   0x7bbb64       ; lime
  397.     dd   0x4ba010       ; dark lime
  398.  
  399. names:
  400.     db   'WHITE          '
  401.     db   'PALE YELLOW    '
  402.     db   'LEMON YELLOW   '
  403.     db   'MUSTARD        '
  404.     db   'CADIUM YELLOW  '
  405.     db   'YELLOW OCRE    '
  406.     db   'CREAM          '
  407.     db   'PEACH          '
  408.     db   'DARK PEACH     '
  409.     db   'PINK           '
  410.     db   'FLESH          '
  411.     db   'ARTIFICIAL ARM '
  412.     db   'DEEP BLUSH     '
  413.     db   'WASHED KHAKI   '
  414.     db   'KHAKI          '
  415.     db   'DARK KHAKI     '
  416.     db   'BEIGE          '
  417.     db   'POUPON         '
  418.     db   'CAMOUFLAGE     '
  419.     db   'PALE OLIVE     '
  420.     db   'OLIVE          '
  421.     db   'DARK OLIVE     '
  422.     db   'BLACK OLIVE    '
  423.     db   'WASHED ARMY    '
  424.     db   'ARMY           '
  425.     db   'PALE TEAL      '
  426.     db   'FADED TEAL     '
  427.     db   'PASTEL TEAL    '
  428.     db   'TEAL           '
  429.     db   'DARK TEAL      '
  430.     db   'LIGHT TURQUOISE'
  431.     db   'TURQUOISE      '
  432.     db   'DARK TURQUOISE '
  433.     db   'MEDIUM COBALT  '
  434.     db   'COBALT         '
  435.     db   'ULTRAMARINE    '
  436.     db   'NAVY BLUE      '
  437.     db   'TRUE BLUE      '
  438.     db   'SKY BLUE       '
  439.     db   'MOUNTAIN BLUE  '
  440.     db   'FADED JEANS    '
  441.     db   'DENIM          '
  442.     db   'FUSHIA         '
  443.     db   'LAVENDAR       '
  444.     db   'LIGHT VIOLET   '
  445.     db   'VIOLET         '
  446.     db   'PURPLE         '
  447.     db   'MAGENTA        '
  448.     db   'ROSE           '
  449.     db   'MAUVE          '
  450.     db   'SALMON         '
  451.     db   'PASTEL ORANGE  '
  452.     db   'ORANGE         '
  453.     db   'BURNT SIENNA   '
  454.     db   'RED ORANGE     '
  455.     db   'CADIUM RED     '
  456.     db   'BRICK RED      '
  457.     db   'RUST           '
  458.     db   'TERRA COTTA    '
  459.     db   'LIGHT MAROON   '
  460.     db   'MAROON         '
  461.     db   'UMBER BLUSH    '
  462.     db   'BURNT UMBER    '
  463.     db   'CIGAR BROWN    '
  464.     db   'ICE BROWN      '
  465.     db   'DARK CHOCOLATE '
  466.     db   'CELERY STALK   '
  467.     db   'FOREST GREEN   '
  468.     db   "HOOKER'S GREEN "
  469.     db   'PASTEL LIME    '
  470.     db   'LIME           '
  471.     db   'DARK LIME      '
  472.  
  473.  
  474. text:
  475.     db   'TO SEE HOW COLORS COMPARE  '
  476.     db   'TO ONE ANOTHER, LEFT CLICK '
  477.     db   'THE FIRST COLOR AND RIGHT  '
  478.     db   'CLICK THE SECOND. TO GET   '
  479.     db   "A SENSE OF A COLOR'S TRUE  "
  480.     db   'HUE, RIGHT AND LEFT CLICK  '
  481.     db   'THE SAME COLOR TO SEE IT   '
  482.     db   'ON THE NEUTRAL BACKGROUND. '
  483.     db   'TO USE A LIGHTER OR DARKER '
  484.     db   'VALUE OF A COLOR, ADD OR   '
  485.     db   'SUBTRACT 0x10 OR 0x20 FROM '
  486.     db   'EACH BYTE OF ITS HEX VALUE.'
  487.     db   '                           '
  488.     db   '       ANY KEY ...         '
  489.  
  490. stat_table:
  491.  
  492.  
  493. finis: