media/paint: Post-SVN tidy

- Move source code from `trunk` into root directory.
- Update ASM include paths.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.
This commit is contained in:
2025-06-01 00:13:52 +01:00
parent 38f7d72837
commit 930b704c6c
2 changed files with 337 additions and 331 deletions

View File

@@ -1,331 +1,337 @@
;********************************* ; SPDX-License-Identifier: NOASSERTION
;* * ;
;* PAINT 0.02 ¤«ï MenuetOS *
;* * ; Text encoded with Code Page 866 - Cyrillic
;* Š®¬¯¨«¨à®¢ âì FASM'®¬ *
;* *
;********************************* ;*********************************
;* *
;****************************************************************************** ;* PAINT 0.02 ¤«ï MenuetOS *
; <20>â㠯ணࠬ¬ã ­¥ ­ã¦­® á¥à쥧­® à áᬠâਢ âì - íâ® ¢á¥£® «¨èì ¯à¨¬¥à, ;* *
; ¢ ª®â®à®¬ ¯®ª § ­®, ª ª à ¡®â âì á ­¥ª®â®à묨 á¨á⥬­ë¬¨ äã­ªæ¨ï¬¨ Œ¥Ž‘, ;* Š®¬¯¨«¨à®¢ âì FASM'®¬ *
; ­® ­¨ª ª ­¥ ­®à¬ «ì­ë© £à ä¨ç¥áª¨© । ªâ®à. Š®¤ ¯à®£à ¬¬ë Ž—…<E28094>œ ¯à®á⮩, ;* *
; ¨ ®­  ¯à¥¤­ §­ ç¥­  ¤«ï â¥å, ªâ® ⮫쪮 ­ ç¨­ ¥â ¨§ãç âì  áᥬ¡«¥à, ;*********************************
; ¯®í⮬ã ï áâ६¨«áï ᤥ« âì ¥£® ª ª ¬®¦­® ¡®«¥¥ ¯®­ïâ­ë¬.
; ’¥¬ ­¥ ¬¥­¥¥, ª®¤ ¤®¢®«ì­® ­¥¯«®å® ®¯â¨¬¨§¨à®¢ ­, å®âï íâ® ­¥¬­®£® ;******************************************************************************
; ¬®¦¥â § âà㤭¨âì ¥£® ¯®­¨¬ ­¨¥. Ÿ ¯®áâ à «áï âé â¥«ì­® ¯à®ª®¬¬¥­â¨à®¢ âì ; <EFBFBD>â㠯ணࠬ¬ã ­¥ ­ã¦­® á¥à쥧­® à áᬠâਢ âì - íâ® ¢á¥£® «¨èì ¯à¨¬¥à,
; á«®¦­ë¥ ¬¥áâ . Šáâ â¨, ¨¤¥ï ¯à®£à ¬¬ë ¯à¨­ ¤«¥¦¨â ­¥ ¬­¥,   Sniper'ã, ¤«ï ; ¢ ª®â®à®¬ ¯®ª § ­®, ª ª à ¡®â âì á ­¥ª®â®à묨 á¨á⥬­ë¬¨ äã­ªæ¨ï¬¨ Œ¥Ž‘,
; ª®â®à®£® ¢®¡é¥¬-â® ¢á¥ ¨ ¯¨á «®áì. ; ­® ­¨ª ª ­¥ ­®à¬ «ì­ë© £à ä¨ç¥áª¨© । ªâ®à. Š®¤ ¯à®£à ¬¬ë Ž—…<E28094>œ ¯à®á⮩,
; “¤ ç¨ ¢ ¨§ã祭¨¨  á¬ ! ; ¨ ®­  ¯à¥¤­ §­ ç¥­  ¤«ï â¥å, ªâ® ⮫쪮 ­ ç¨­ ¥â ¨§ãç âì  áᥬ¡«¥à,
; ˆ¢ ­ <20>®¤¤ã¡­ë©, ivan-yar@bk.ru ; ¯®í⮬ã ï áâ६¨«áï ᤥ« âì ¥£® ª ª ¬®¦­® ¡®«¥¥ ¯®­ïâ­ë¬.
;****************************************************************************** ; ’¥¬ ­¥ ¬¥­¥¥, ª®¤ ¤®¢®«ì­® ­¥¯«®å® ®¯â¨¬¨§¨à®¢ ­, å®âï íâ® ­¥¬­®£®
; ¬®¦¥â § âà㤭¨âì ¥£® ¯®­¨¬ ­¨¥. Ÿ ¯®áâ à «áï âé â¥«ì­® ¯à®ª®¬¬¥­â¨à®¢ âì
; <EFBFBD>®¤ª«îç ¥¬ ­¥®¡å®¤¨¬ë¥ ¬ ªà®áë ; á«®¦­ë¥ ¬¥áâ . Šáâ â¨, ¨¤¥ï ¯à®£à ¬¬ë ¯à¨­ ¤«¥¦¨â ­¥ ¬­¥,   Sniper'ã, ¤«ï
include '../../../macros.inc' ; ª®â®à®£® ¢®¡é¥¬-â® ¢á¥ ¨ ¯¨á «®áì.
; “¤ ç¨ ¢ ¨§ã祭¨¨  á¬ !
;****************************************************************************** ; ˆ¢ ­ <20>®¤¤ã¡­ë©, ivan-yar@bk.ru
;******************************************************************************
; <20>€—€Ž <20><>Žƒ<C5BD>€ŒŒ
use32 ; <20>®¤ª«îç ¥¬ ­¥®¡å®¤¨¬ë¥ ¬ ªà®áë
org 0x0 include '../../macros.inc'
db 'MENUET01' ; 8 byte id
dd 0x01 ; title version ;******************************************************************************
dd START ; start of code
dd I_END ; size of image ; <20>€—€Ž <20><>Žƒ<C5BD>€ŒŒ
dd E_END ; memory for app use32
dd E_END ; esp org 0x0
dd 0x0,0x0 ; I_Param , I_Icon db 'MENUET01' ; 8 byte id
dd 0x01 ; title version
; Ž<>œ ŠŽ„€ dd START ; start of code
START: dd I_END ; size of image
mov eax,40 ; á®®¡é¨¬ á¨á⥬¥, ª ª¨¥ ᮡëâ¨ï ¡ã¤¥¬ ®¡à ¡ â뢠âì dd E_END ; memory for app
mov ebx,0100101b ; ¬ áª  ᮡë⨩ - ¯¥à¥à¨á®¢ª  (1) + ª­®¯ª  (3) + ¬ëèì (6 dd E_END ; esp
int 0x40 ; íâ  ª®¬ ­¤  ¢ë§ë¢ ¥â á¨á⥬­ãî äã­ªæ¨î dd 0x0,0x0 ; I_Param , I_Icon
mov [workarea.cx],5 ; ª®®à¤¨­ âë à ¡®ç¥© (ª«¨¥­â᪮©) ®¡« á⨠; Ž<>œ ŠŽ„€
mov [workarea.cy],30 ; ¤«ï à¨á®¢ ­¨ï START:
mov eax,40 ; á®®¡é¨¬ á¨á⥬¥, ª ª¨¥ ᮡëâ¨ï ¡ã¤¥¬ ®¡à ¡ â뢠âì
red: mov ebx,0100101b ; ¬ áª  ᮡë⨩ - ¯¥à¥à¨á®¢ª  (1) + ª­®¯ª  (3) + ¬ëèì (6
call draw_window ; ¢ë§ë¢ ¥¬ ¯à®æ¥¤ãàã ®âà¨á®¢ª¨ ®ª­  int 0x40 ; íâ  ª®¬ ­¤  ¢ë§ë¢ ¥â á¨á⥬­ãî äã­ªæ¨î
still: ; ƒ<EFBFBD>‰ –ˆŠ‹ <20><>Žƒ<C5BD>€ŒŒ - –ˆŠ‹ Ž<><C5BD><EFBFBD>ŽŠˆ ŽŽ<C5BD>™…<E284A2>ˆ mov [workarea.cx],5 ; ª®®à¤¨­ âë à ¡®ç¥© (ª«¨¥­â᪮©) ®¡« áâ¨
mov [workarea.cy],30 ; ¤«ï à¨á®¢ ­¨ï
mov eax,10 ; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï; ¯à®£à ¬¬  ®áâ ­ ¢«¨¢ ¥âáï ­ 
int 0x40 ; á«¥¤ãîé ï ª®¬ ­¤  ­¥ ¡ã¤¥â ¢ë¯®«­¥­  ¤® â¥å ¯®à, ¯®ª  red:
; ­¥ ¯à®¨§®©¤ñâ ᮡë⨥ call draw_window ; ¢ë§ë¢ ¥¬ ¯à®æ¥¤ãàã ®âà¨á®¢ª¨ ®ª­ 
; ⥯¥àì ॣ¨áâà eax ᮤ¥à¦¨â ­®¬¥à ᮡëâ¨ï still: ; ƒ<E282AC>‰ –ˆŠ‹ <20><>Žƒ<C5BD>€ŒŒ - –ˆŠ‹ Ž<><C5BD><EFBFBD>ŽŠˆ ŽŽ<C5BD>™…<E284A2>ˆ
; ¯®®ç¥à¥¤­® áà ¢­¨¬ ¥£® á® ¢á¥¬¨ ¢®§¬®¦­ë¬¨ §­ ç¥­¨ï¬¨, çâ®¡ë ¢ë§¢ âì
; ­ã¦­ë© ®¡à ¡®â稪 mov eax,10 ; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï; ¯à®£à ¬¬  ®áâ ­ ¢«¨¢ ¥âáï ­ 
int 0x40 ; á«¥¤ãîé ï ª®¬ ­¤  ­¥ ¡ã¤¥â ¢ë¯®«­¥­  ¤® â¥å ¯®à, ¯®ª 
cmp eax,1 ; ¯¥à¥à¨á®¢ âì ®ª­® ? ; ­¥ ¯à®¨§®©¤ñâ ᮡë⨥
je red ; ¥á«¨ ॣ¨áâà eax à ¢¥­ ¥¤¨­¨æ¥, â® ¯¥à¥å®¤¨¬ ­  ¬¥âªã red
cmp eax,3 ; ­ ¦ â  ª­®¯ª  ? ; ⥯¥àì ॣ¨áâà eax ᮤ¥à¦¨â ­®¬¥à ᮡëâ¨ï
je button ; ¯®®ç¥à¥¤­® áà ¢­¨¬ ¥£® á® ¢á¥¬¨ ¢®§¬®¦­ë¬¨ §­ ç¥­¨ï¬¨, çâ®¡ë ¢ë§¢ âì
cmp eax,6 ; ¬ëèì? ; ­ã¦­ë© ®¡à ¡®â稪
je mouse
cmp eax,1 ; ¯¥à¥à¨á®¢ âì ®ª­® ?
jmp still ; ¥á«¨ ¯à®¨§®è«® ᮡë⨥, ª®â®à®¥ ¬ë ­¥ ®¡à ¡ â뢠¥¬, je red ; ¥á«¨ ॣ¨áâà eax à ¢¥­ ¥¤¨­¨æ¥, â® ¯¥à¥å®¤¨¬ ­  ¬¥âªã red
; ¯à®áâ® ¢®§¢à é ¥¬áï ª ­ ç «ã 横« , å®âï â ª®£® ¡ëâì cmp eax,3 ; ­ ¦ â  ª­®¯ª  ?
; ­¥ ¤®«¦­®! .¥. ¥á«¨ íâã ª®¬ ­¤ã ®âá ã¡à âì, â® je button
; ­¨ç¥£® áâà è­®£® ­¥ á«ãç¨âáï. cmp eax,6 ; ¬ëèì?
je mouse
;******************************************************************************
jmp still ; ¥á«¨ ¯à®¨§®è«® ᮡë⨥, ª®â®à®¥ ¬ë ­¥ ®¡à ¡ â뢠¥¬,
button: ; ®¡à ¡®â稪 ­ ¦ â¨ï ª­®¯ª¨ ¢ ®ª­¥ ¯à®£à ¬¬ë ; ¯à®áâ® ¢®§¢à é ¥¬áï ª ­ ç «ã 横« , å®âï â ª®£® ¡ëâì
mov eax,17 ; äã­ªæ¨ï N17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨ ; ­¥ ¤®«¦­®! .¥. ¥á«¨ íâã ª®¬ ­¤ã ®âá ã¡à âì, â®
int 0x40 ; ­¨ç¥£® áâà è­®£® ­¥ á«ãç¨âáï.
; ⥯¥àì ¢ ॣ¨áâॠah ᮤ¥à¦¨âáï ¨¤¥­â¨ä¨ª â®à. ;******************************************************************************
shr eax,8 ; ah -> al (ᤢ¨£ ­  8 ¡¨â ¢¯à ¢®) button: ; ®¡à ¡®â稪 ­ ¦ â¨ï ª­®¯ª¨ ¢ ®ª­¥ ¯à®£à ¬¬ë
mov eax,17 ; äã­ªæ¨ï N17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
dec al ; ¨¤¥­â¨ä¨ª â®à_ª­®¯ª¨--; int 0x40
jnz .noclose ; ¥á«¨ १ã«ìâ â ¯à¥¤ë¤ã饩 ª®¬ ­¤ë à ¢¥­ ­ã«î, § ªà뢠¥¬áï
; ¨­ ç¥ - ¨¤ñ¬ ­  ¬¥âªã noclose ; ⥯¥àì ¢ ॣ¨áâॠah ᮤ¥à¦¨âáï ¨¤¥­â¨ä¨ª â®à.
or eax,-1 ; ¢ë室 ¨§ ¯à®£à ¬¬ë shr eax,8 ; ah -> al (ᤢ¨£ ­  8 ¡¨â ¢¯à ¢®)
int 0x40
dec al ; ¨¤¥­â¨ä¨ª â®à_ª­®¯ª¨--;
.noclose: jnz .noclose ; ¥á«¨ १ã«ìâ â ¯à¥¤ë¤ã饩 ª®¬ ­¤ë à ¢¥­ ­ã«î, § ªà뢠¥¬áï
; ¥á«¨ ¬ë á ¯®¯ «¨, §­ ç¨â ¨¤¥­â¨ä¨ª â®à ª­®¯ª¨ ­¥ ¡ë« à ¢¥­ ­ã«î... ; ¨­ ç¥ - ¨¤ñ¬ ­  ¬¥âªã noclose
; ⥯¥àì ã ­ á ¢ eax ᮤ¥à¦¨âáï (­®¬¥à 梥⭮© ª­®¯ª¨ - 1),
; â.¥ ¨«¨ 1, ¨«¨ 2, ... ,¨«¨ 5 or eax,-1 ; ¢ë室 ¨§ ¯à®£à ¬¬ë
int 0x40
; 㬥­ì訬 ­  1:
dec eax .noclose:
; ¥á«¨ ¬ë á ¯®¯ «¨, §­ ç¨â ¨¤¥­â¨ä¨ª â®à ª­®¯ª¨ ­¥ ¡ë« à ¢¥­ ­ã«î...
; ¢®â íâ  ¢®â ª®¬ ­¤  ¨§¢«¥ª ¥â ¢ eax ¤¢®©­®¥ á«®¢® ¯®  ¤à¥áã colors+eax*4 ; ⥯¥àì ã ­ á ¢ eax ᮤ¥à¦¨âáï (­®¬¥à 梥⭮© ª­®¯ª¨ - 1),
; £¤¥ colors - ᬥ饭¨¥ ¬¥âª¨ colors, ¯®á«¥ ª®â®à®© ¨¤¥â ¯®á«¥¤®¢ â¥«ì­®áâì ; â.¥ ¨«¨ 1, ¨«¨ 2, ... ,¨«¨ 5
; 梥⮢, eax*4 - ­®¬¥à 梥â , 㬭®¦¥­­ë© ­  4, â.ª. ­  ®¤¨­ 梥⠭㦭®
; ç¥âëॠ¡ ©â . ; 㬥­ì訬 ­  1:
mov eax,[colors+eax*4] dec eax
; ⥯¥àì ¬ë ãáâ ­®¢¨¬ 梥â, ᮤ¥à¦ é¨©áï ¢ ॣ¨áâॠeax ª ª ®á­®¢­®©: ; ¢®â íâ  ¢®â ª®¬ ­¤  ¨§¢«¥ª ¥â ¢ eax ¤¢®©­®¥ á«®¢® ¯®  ¤à¥áã colors+eax*4
mov [active_color],eax ; £¤¥ colors - ᬥ饭¨¥ ¬¥âª¨ colors, ¯®á«¥ ª®â®à®© ¨¤¥â ¯®á«¥¤®¢ â¥«ì­®áâì
; 梥⮢, eax*4 - ­®¬¥à 梥â , 㬭®¦¥­­ë© ­  4, â.ª. ­  ®¤¨­ 梥⠭㦭®
; ­ã ¢®â, ᮡá⢥­­®, ¨ ¢áñ, çâ® ®â ­ á âॡ®¢ «®áì ;) ; ç¥âëॠ¡ ©â .
; ¢¥à­ñ¬áï ª ­ ç «ã 横«  ®¡à ¡®âª¨ ᮡë⨩ mov eax,[colors+eax*4]
jmp still
; ⥯¥àì ¬ë ãáâ ­®¢¨¬ 梥â, ᮤ¥à¦ é¨©áï ¢ ॣ¨áâॠeax ª ª ®á­®¢­®©:
;****************************************************************************** mov [active_color],eax
mouse: ; ®¡à ¡®â稪 ¬ëè¨ ; ­ã ¢®â, ᮡá⢥­­®, ¨ ¢áñ, çâ® ®â ­ á âॡ®¢ «®áì ;)
mov eax,37 ; á­ ç «  ¯®«ã稬 ⥪ã騥 ª®®à¤¨­ âë ¬ëè¨ ; ¢¥à­ñ¬áï ª ­ ç «ã 横«  ®¡à ¡®âª¨ ᮡë⨩
mov ebx,1 jmp still
int 0x40
;******************************************************************************
mov ebx,eax ; ¯à¥®¡à §ã¥¬ ¨å
shr eax,16 ; eax=x; mouse: ; ®¡à ¡®â稪 ¬ëè¨
and ebx,0xffff ; ebx=y; mov eax,37 ; á­ ç «  ¯®«ã稬 ⥪ã騥 ª®®à¤¨­ âë ¬ëè¨
mov ebx,1
cmp ebx,22 int 0x40
jb save_canvas
mov ebx,eax ; ¯à¥®¡à §ã¥¬ ¨å
sub eax,[workarea.cx] ; x-=[workarea.cx] shr eax,16 ; eax=x;
cmp eax,0 ; ¥á«¨ ¬ëèì «¥¢¥¥ ª«¨¥­â᪮© ®¡« áâ¨, and ebx,0xffff ; ebx=y;
jle .not_pressed ; ­¨ç¥£® ­¥ à¨á㥬
cmp eax,[workarea.sx] ; ¥á«¨ ¬ëèì ¯à ¢¥¥... cmp ebx,22
jae .not_pressed jb save_canvas
sub ebx,[workarea.cy] sub eax,[workarea.cx] ; x-=[workarea.cx]
cmp ebx,0 ; ...¢ëè¥... cmp eax,0 ; ¥á«¨ ¬ëèì «¥¢¥¥ ª«¨¥­â᪮© ®¡« áâ¨,
jle .not_pressed jle .not_pressed ; ­¨ç¥£® ­¥ à¨á㥬
cmp ebx,[workarea.sy] ; ...­¨¦¥... cmp eax,[workarea.sx] ; ¥á«¨ ¬ëèì ¯à ¢¥¥...
jae .not_pressed jae .not_pressed
; ª ª¨¥ ª­®¯ª¨ ­ ¦ âë? sub ebx,[workarea.cy]
mov eax,37 cmp ebx,0 ; ...¢ëè¥...
mov ebx,2 jle .not_pressed
int 0x40 cmp ebx,[workarea.sy] ; ...­¨¦¥...
jae .not_pressed
; ¥á«¨ «¥¢ ï ª­®¯ª  (â.¥. eax = 1), ⥠¯®©¤ñ¬ ¤ «ìè¥
cmp eax,1 ; ª ª¨¥ ª­®¯ª¨ ­ ¦ âë?
je .leftbtn mov eax,37
mov ebx,2
.not_pressed: int 0x40
; ‹¥¢ ï ª­®¯ª  ­¥ ­ ¦ â , § ¯®¬­¨¬ ⥪ã騥 ª®®à¤¨­ âë ¨ ¡ã¤¥¬ ¦¤ âì ᮡëâ¨ï
mov [mouse_pressed],0 ; ¬ëèì ­¥ ­ ¦ â  ; ¥á«¨ «¥¢ ï ª­®¯ª  (â.¥. eax = 1), ⥠¯®©¤ñ¬ ¤ «ìè¥
mov eax,37 ; ¯®«ã稬 ª®®à¤¨­ âë cmp eax,1
mov ebx,1 je .leftbtn
int 0x40
mov ebx,eax .not_pressed:
shr eax,16 ; ‹¥¢ ï ª­®¯ª  ­¥ ­ ¦ â , § ¯®¬­¨¬ ⥪ã騥 ª®®à¤¨­ âë ¨ ¡ã¤¥¬ ¦¤ âì ᮡëâ¨ï
and ebx,0xffff mov [mouse_pressed],0 ; ¬ëèì ­¥ ­ ¦ â 
mov [old_x],eax ; § ¯®¬­¨¬ ¨å mov eax,37 ; ¯®«ã稬 ª®®à¤¨­ âë
mov [old_y],ebx mov ebx,1
jmp still int 0x40
mov ebx,eax
.leftbtn: shr eax,16
; ‹¥¢ ï ª­®¯ª  ­ ¦ â , ­ ¤® íâ® § ¯¨á âì! and ebx,0xffff
mov [mouse_pressed],1 mov [old_x],eax ; § ¯®¬­¨¬ ¨å
mov [old_y],ebx
; <20>®«ã稬 ª®®à¤¨­ âë ªãàá®à  ¬ëè¨ (®â­®á¨â¥«ì­® ®ª­ ) jmp still
mcall 37,1 ; ¯®«ãç¨âì á®áâ®ï­¨¥ ¬ëè¨
.leftbtn:
; <EFBFBD>¥à¥¤¥« ¥¬ ¨å â ª, çâ®¡ë ®­¨ ¡ë«¨ ¢ à §­ëå ॣ¨áâà å, â.¥. eax ¨ ebx ; ‹¥¢ ï ª­®¯ª  ­ ¦ â , ­ ¤® íâ® § ¯¨á âì!
mov ebx,eax mov [mouse_pressed],1
shr eax,16
and ebx,0xffff ; <20>®«ã稬 ª®®à¤¨­ âë ªãàá®à  ¬ëè¨ (®â­®á¨â¥«ì­® ®ª­ )
mcall 37,1 ; ¯®«ãç¨âì á®áâ®ï­¨¥ ¬ëè¨
; <20>®¤£®â®¢¨¬ ¯ à ¬¥âàë ¤«ï ä㭪樨 à¨á®¢ ­¨ï «¨­¨¨
mov ecx,[old_x] ; ¤«ï ­ ç «  § £à㧨¬ áâ àë¥ ª®®à¤¨­ âë ; <20>¥à¥¤¥« ¥¬ ¨å â ª, çâ®¡ë ®­¨ ¡ë«¨ ¢ à §­ëå ॣ¨áâà å, â.¥. eax ¨ ebx
mov edx,[old_y] mov ebx,eax
mov [old_x],eax ; ⥯¥àì á®åà ­¨¬ ⥪ã騥 ¢ áâ àë¥ shr eax,16
mov [old_y],ebx and ebx,0xffff
shl ecx,16 ; ¢ ¢¥àå­¥¥ á«®¢® ­ ç «ì­ë¥ (⥪ã騥) ª®®à¤¨­ âë
shl edx,16 ; <20>®¤£®â®¢¨¬ ¯ à ¬¥âàë ¤«ï ä㭪樨 à¨á®¢ ­¨ï «¨­¨¨
add eax,ecx ;   ¢ ­¨¦­¥¥ á«®¢® ª®­¥ç­ë¥, â.¥. áâ àë¥ mov ecx,[old_x] ; ¤«ï ­ ç «  § £à㧨¬ áâ àë¥ ª®®à¤¨­ âë
add ebx,edx mov edx,[old_y]
mov [old_x],eax ; ⥯¥àì á®åà ­¨¬ ⥪ã騥 ¢ áâ àë¥
mov ecx,ebx ; ¯®¬¥­ï¥¬ ॣ¨áâàë â ª, ª ª íâ㠭㦭® 38 ä㭪樨 mov [old_y],ebx
mov ebx,eax shl ecx,16 ; ¢ ¢¥àå­¥¥ á«®¢® ­ ç «ì­ë¥ (⥪ã騥) ª®®à¤¨­ âë
mov eax,38 ; ­®¬¥à ä㭪樨 ¢ eax shl edx,16
mov edx,[active_color] ; ¢ edx 梥â add eax,ecx ;   ¢ ­¨¦­¥¥ á«®¢® ª®­¥ç­ë¥, â.¥. áâ àë¥
int 0x40 add ebx,edx
;  - ¯®¯à®¡ã©â¥ ¯®áâ ¢¨âì ¤à㣨¥ §­ ç¥­¨ï (00090001) mov ecx,ebx ; ¯®¬¥­ï¥¬ ॣ¨áâàë â ª, ª ª íâ㠭㦭® 38 ä㭪樨
mov edi,0x00010001 ; çâ®¡ë «¨­¨ï ­¥ ¡ë«  ᫨誮¬ â®­ª®©, mov ebx,eax
add ebx,edi ; ­ à¨á㥬 à冷¬ ¥é¥ 3! mov eax,38 ; ­®¬¥à ä㭪樨 ¢ eax
int 0x40 mov edx,[active_color] ; ¢ edx 梥â
add ecx,edi int 0x40
int 0x40
sub ebx,edi ;  - ¯®¯à®¡ã©â¥ ¯®áâ ¢¨âì ¤à㣨¥ §­ ç¥­¨ï (00090001)
int 0x40 mov edi,0x00010001 ; çâ®¡ë «¨­¨ï ­¥ ¡ë«  ᫨誮¬ â®­ª®©,
add ebx,edi ; ­ à¨á㥬 à冷¬ ¥é¥ 3!
sub ebx,edi ; ­ã   ç⮡ë ᬮâ५®áì ᮢᥬ ªàãâ®, int 0x40
int 0x40 ; ¤®à¨á㥬 ¥é¥ 5! add ecx,edi
sub ecx,edi int 0x40
int 0x40 sub ebx,edi
sub ecx,edi int 0x40
int 0x40
add ebx,edi sub ebx,edi ; ­ã   ç⮡ë ᬮâ५®áì ᮢᥬ ªàãâ®,
int 0x40 int 0x40 ; ¤®à¨á㥬 ¥é¥ 5!
add ebx,edi sub ecx,edi
int 0x40 int 0x40
sub ecx,edi
jmp still int 0x40
add ebx,edi
;****************************************************************************** int 0x40
add ebx,edi
save_canvas: int 0x40
mov eax,[proc_info.box.width]
add eax,[workarea.cx] jmp still
mov ebx,[proc_info.box.height]
add ebx,[workarea.cy] ;******************************************************************************
jmp still save_canvas:
mov eax,[proc_info.box.width]
;****************************************************************************** add eax,[workarea.cx]
mov ebx,[proc_info.box.height]
; ********************************************* add ebx,[workarea.cy]
; ******* Ž<><C5BD>…„…<E280B9>ˆˆ Ž<C5BD>ˆŽŠ€ ŽŠ<C5BD>€ *******
; ********************************************* jmp still
draw_window: ;******************************************************************************
mcall 48,3,sc,sizeof.system_colors ; <20>Ž„ƒ<E2809E>“†€…Œ ˆ…Œ<E280A6>… –‚…’€ ; *********************************************
mcall 12, 1 ; ­ ç «® ®âà¨á®¢ª¨ ®ª­  ; ******* Ž<><C5BD>…„…<E280B9>ˆˆ Ž<C5BD>ˆŽŠ€ ŽŠ<C5BD>€ *******
mov edx, [sc.work] ; *********************************************
or edx, 0x33000000
mcall 0, (100 shl 16)+400, (100 shl 16)+300, , , title ; à¨á㥬 ®ª­® draw_window:
mcall 12, 1
mcall 48,3,sc,sizeof.system_colors ; <20>Ž„ƒ<E2809E>“†€…Œ ˆ…Œ<E280A6>… –‚…’€
mcall 9,proc_info,-1 ; ¯®«ã稬 ¨­ä®à¬ æ¨î ® ᢮¥¬ ¯®â®ª¥ mcall 12, 1 ; ­ ç «® ®âà¨á®¢ª¨ ®ª­ 
mov edx, [sc.work]
mov eax,[proc_info.box.width] ; ­ áâந¬ à §¬¥à à ¡®ç¥© ®¡« á⨠or edx, 0x33000000
sub eax,20 ; (å à §¬¥à ®ª­  - 20) mcall 0, (100 shl 16)+400, (100 shl 16)+300, , , title ; à¨á㥬 ®ª­®
mov [workarea.sx],eax mcall 12, 1
mov eax,[proc_info.box.height]
sub eax,63 ; (ã à §¬¥à - 63) mcall 9,proc_info,-1 ; ¯®«ã稬 ¨­ä®à¬ æ¨î ® ᢮¥¬ ¯®â®ª¥
mov [workarea.sy],eax
mov eax,[proc_info.box.width] ; ­ áâந¬ à §¬¥à à ¡®ç¥© ®¡« áâ¨
cmp [proc_info.box.height],80 sub eax,20 ; (å à §¬¥à ®ª­  - 20)
jb .finish mov [workarea.sx],eax
mov eax,[proc_info.box.height]
mov eax, 8 sub eax,63 ; (ã à §¬¥à - 63)
mov edx, 1 mov [workarea.sy],eax
; á®§¤ ñ¬ ª­®¯ª¨ ¢ë¡®à  梥â :
mov ebx,10*65536+15 ; ­ ç «ì­ ï x ª®®à¤¨­ â  ¨ à §¬¥à cmp [proc_info.box.height],80
mov ecx, 7*65536+15 ; ­ ç «ì­ ï y ª®®à¤¨­ â  & size jb .finish
.new_button:
inc edx ; ¨¤¥­â¨ä¨ª â®à++; mov eax, 8
mov esi,[btn_colors-8+edx*4] ; 梥⠪­®¯ª¨ mov edx, 1
int 0x40 ; áâ ¢¨¬ ª­®¯ªã ; á®§¤ ñ¬ ª­®¯ª¨ ¢ë¡®à  梥â :
add ebx,18*65536 ; á«¥¤ãîé ï ª­®¯ª  ¯à ¢¥¥ ­  12 mov ebx,10*65536+15 ; ­ ç «ì­ ï x ª®®à¤¨­ â  ¨ à §¬¥à
cmp edx,9 ; áà ¢­¨¢ ¥¬ edx (¨¤¥­â¨ä¨ª â®à) á 9 mov ecx, 7*65536+15 ; ­ ç «ì­ ï y ª®®à¤¨­ â  & size
jbe .new_button ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­® -> ¥éñ ®¤­ã ª¯®ªã .new_button:
inc edx ; ¨¤¥­â¨ä¨ª â®à++;
mov eax,13 ; ç¨á⨬ "宫áâ" - ª«¨¥­âáªãî ®¡« áâì mov esi,[btn_colors-8+edx*4] ; 梥⠪­®¯ª¨
mov ebx,[workarea.cx] int 0x40 ; áâ ¢¨¬ ª­®¯ªã
mov ecx,[workarea.cy] add ebx,18*65536 ; á«¥¤ãîé ï ª­®¯ª  ¯à ¢¥¥ ­  12
shl ebx,16 cmp edx,9 ; áà ¢­¨¢ ¥¬ edx (¨¤¥­â¨ä¨ª â®à) á 9
shl ecx,16 jbe .new_button ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­® -> ¥éñ ®¤­ã ª¯®ªã
add ebx,[workarea.sx]
add ecx,[workarea.sy] mov eax,13 ; ç¨á⨬ "宫áâ" - ª«¨¥­âáªãî ®¡« áâì
mov edx,0xffffff mov ebx,[workarea.cx]
mcall 13 mov ecx,[workarea.cy]
shl ebx,16
.finish: shl ecx,16
ret add ebx,[workarea.sx]
add ecx,[workarea.sy]
;****************************************************************************** mov edx,0xffffff
; ­ ç «® ®¡« á⨠¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå mcall 13
; ¥á«¨ ªâ® ¥éñ ­¥ §­ ¥â, çâ® §­ ç¨â "¨­¨æ¨ «¨§¨à®¢ ­­ë¥", â® ¯®ïá­ïî:
; í⮠⥠¤ ­­ë¥, ª®â®àë¬ ¯à¨á¢®¥­® ­ ç «ì­®¥ §­ ç¥­¨¥ .finish:
ret
;data
;******************************************************************************
title db 'Simple Paint v0.3',0 ; ­ ç «® ®¡« á⨠¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå
; ¥á«¨ ªâ® ¥éñ ­¥ §­ ¥â, çâ® §­ ç¨â "¨­¨æ¨ «¨§¨à®¢ ­­ë¥", â® ¯®ïá­ïî:
mouse_pressed db 0 ; ¯®ª §ë¢ ¥â, ­ ¦ â  «¨ ¡ë«  ¬ëèì ¢ ¯à¥¤ë¤ã騩 ¬®¬¥­â ; í⮠⥠¤ ­­ë¥, ª®â®àë¬ ¯à¨á¢®¥­® ­ ç «ì­®¥ §­ ç¥­¨¥
; æ¢¥â  ª­®¯®ª ;data
btn_colors:
dd 0xdddddd ; white title db 'Simple Paint v0.3',0
dd 0x444444 ; black
dd 0x00dd00 ; green mouse_pressed db 0 ; ¯®ª §ë¢ ¥â, ­ ¦ â  «¨ ¡ë«  ¬ëèì ¢ ¯à¥¤ë¤ã騩 ¬®¬¥­â
dd 0x0000dd ; blue
dd 0xdd0000 ; red ; æ¢¥â  ª­®¯®ª
dd 0xdd00dd ; magenta btn_colors:
dd 0xdddd00 ; yellow dd 0xdddddd ; white
dd 0x00dddd ; cyan dd 0x444444 ; black
dd 0x559955 ; warm green dd 0x00dd00 ; green
dd 0x0000dd ; blue
; æ¢¥â  ª¨á⨠(¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ æ¢¥â  ª­®¯®ª) dd 0xdd0000 ; red
colors: dd 0xdd00dd ; magenta
dd 0xffffff ; ¡¥«ë© dd 0xdddd00 ; yellow
dd 0x000000 ; ç¥à­ë© dd 0x00dddd ; cyan
dd 0x00ff00 ; §¥«¥­ë© dd 0x559955 ; warm green
dd 0x0000ff ; ᨭ¨©
dd 0xff0000 ; ªà á­ë© ; æ¢¥â  ª¨á⨠(¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ æ¢¥â  ª­®¯®ª)
dd 0xff00ff ; ¯ãà¯ãà­ë© colors:
dd 0xffff00 ; ¦¥«âë© dd 0xffffff ; ¡¥«ë©
dd 0x00ffff ; £®«ã¡®© dd 0x000000 ; ç¥à­ë©
dd 0x77bb77 ; ⥯«ë© §¥«¥­ë© dd 0x00ff00 ; §¥«¥­ë©
dd 0x0000ff ; ᨭ¨©
;****************************************************************************** dd 0xff0000 ; ªà á­ë©
;   ¢®â âãâ ­ ç¨­ ¥âáï ®¡« áâì <20>…¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå, â.¥. dd 0xff00ff ; ¯ãà¯ãà­ë©
; §¤¥áì ¤ ­­ë¬ §­ ç¥­¨ï ­¥ ¯à¨á¢®¥­ë. ®â«¨ç¨¥ ®â ¨­¨æ., ­¥ 㢥«¨ç¨¢ îâ à §¬¥à dd 0xffff00 ; ¦¥«âë©
; ä ©«  dd 0x00ffff ; £®«ã¡®©
dd 0x77bb77 ; ⥯«ë© §¥«¥­ë©
I_END:
;******************************************************************************
active_color dd ? ;  ªâ¨¢­ë© 梥â ;   ¢®â âãâ ­ ç¨­ ¥âáï ®¡« áâì <20>…¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå, â.¥.
; §¤¥áì ¤ ­­ë¬ §­ ç¥­¨ï ­¥ ¯à¨á¢®¥­ë. ®â«¨ç¨¥ ®â ¨­¨æ., ­¥ 㢥«¨ç¨¢ îâ à §¬¥à
old_x dd ? ; áâ àë¥ ª®®à¤¨­ âë ¬ëè¨ ; ä ©« 
old_y dd ?
I_END:
workarea: ; ª®®à¤¨­ âë ¨ à §¬¥àë ª«¨¥­â᪮© ®¡« áâ¨
.cx dd ? ; c - ª®®¤¨­ âë active_color dd ? ;  ªâ¨¢­ë© 梥â
.cy dd ?
.sx dd ? ; s - à §¬¥àë old_x dd ? ; áâ àë¥ ª®®à¤¨­ âë ¬ëè¨
.sy dd ? old_y dd ?
sc system_colors ; á¨á⥬­ë¥ æ¢¥â  workarea: ; ª®®à¤¨­ âë ¨ à §¬¥àë ª«¨¥­â᪮© ®¡« áâ¨
proc_info process_information ; ¨­ä®à¬ æ¨ï ® ¯à®æ¥áᥠ.cx dd ? ; c - ª®®¤¨­ âë
.cy dd ?
restflag dd ? .sx dd ? ; s - à §¬¥àë
canvas rb 800*600*3 .sy dd ?
E_END: sc system_colors ; á¨á⥬­ë¥ 梥â 
proc_info process_information ; ¨­ä®à¬ æ¨ï ® ¯à®æ¥áá¥
restflag dd ?
canvas rb 800*600*3
E_END: