0,0 → 1,165 |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01,start,i_end,e_end,e_end,0,0 |
|
include '../../proc32.inc' |
include '../../macros.inc' |
|
|
NUMCOLORS = 148 ; CSS4 named colors (http://dev.w3.org/csswg/css-color/) |
|
|
start: |
mcall 66, 1, 1 ; set kbd mode to scancodes |
still: |
mcall 10 |
dec eax |
jz redraw |
dec eax |
jz key |
|
button: |
mcall 17 |
shr eax, 8 |
|
cmp eax, 1 |
jz quit |
jmp still |
|
redraw: |
mcall 12, 1 |
|
mov ebx, [window.left] |
shl ebx, 16 |
add ebx, [window.width] |
mov ecx, [window.top] |
shl ecx, 16 |
add ecx, [window.height] |
mcall 0, , , [window_style], , window_title |
mcall 9, proc_info, -1 |
|
|
mov eax, [current_color] |
mov ebx, [proc_info.client_box.width] |
inc ebx |
mov ecx, [proc_info.client_box.height] |
inc ecx |
or edx, [colors + eax*4] |
mcall 13, , , |
|
mov eax, [current_color] |
movzx edx, byte[colors + eax*4 + 0] |
add dl, byte[colors + eax*4 + 1] |
adc dh, 0 |
add dl, byte[colors + eax*4 + 2] |
adc dh, 0 |
xor ecx, ecx |
cmp edx, 0x80*3 |
jae @f |
add ecx, 0xffffff |
@@: |
movzx edx, [names + eax*2] |
movzx esi, byte[edx] |
inc edx |
lea eax, [esi*3] |
add eax, eax |
|
mov ebx, [proc_info.client_box.width] |
sub ebx, eax |
inc ebx |
shr ebx, 1 |
shl ebx, 16 |
add ebx, [proc_info.client_box.height] |
sub ebx, 9 |
shr bx, 1 |
|
mcall 4, , , |
|
mcall 12, 2 |
jmp still |
|
key: |
mcall 2 |
cmp ah, 63 ; f5 |
jnz @f |
call toggle_fullscreen |
jmp redraw |
@@: |
cmp ah, 1 ; esc |
jnz @f |
bt [window_style], 25 |
jc quit |
call toggle_fullscreen |
jmp redraw |
@@: |
cmp ah, 72 ; up |
jz .prev |
cmp ah, 75 ; left |
jz .prev |
cmp ah, 73 ; page up |
jz .prev |
cmp ah, 77 ; right |
jz .next |
cmp ah, 80 ; down |
jz .next |
cmp ah, 81 ; page down |
jz .next |
jmp still |
|
.prev: |
dec [current_color] |
jns @f |
mov [current_color], NUMCOLORS - 1 |
@@: |
jmp redraw |
|
.next: |
inc [current_color] |
cmp [current_color], NUMCOLORS |
jnz @f |
mov [current_color], 0 |
@@: |
jmp redraw |
|
|
toggle_fullscreen: |
btc [window_style], 25 |
jc .fullscreen |
; back from fullscreen |
mcall 67, [window.left], [window.top], [window.width], [window.height] |
jmp .done |
.fullscreen: |
mov eax, [proc_info.box.width] |
mov [window.width], eax |
mov eax, [proc_info.box.height] |
mov [window.height], eax |
mov eax, [proc_info.box.left] |
mov [window.left], eax |
mov eax, [proc_info.box.top] |
mov [window.top], eax |
mcall 14 |
mov edx, eax |
shr edx, 16 |
movzx eax, ax |
mov esi, eax |
mcall 67, 0, 0, , |
.done: |
ret |
|
quit: |
mcall -1 |
|
|
window_title db 'Rainbow',0 |
window_style dd 0x73000000 |
window BOX 300, 300, 315, 184 ; left top width height |
current_color dd 0 |
|
align 4 |
include 'colors.asm' ; generated data |
|
i_end: |
proc_info process_information |
rb 0x100 ;stack |
e_end: |