Sorry for this commit: it is a part of previous one
git-svn-id: svn://kolibrios.org@111 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
1 parent
f9a3eb973f
commit
fca11d7700
58 files changed
+6456
No files matched your search
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,203 @@
|
||||
-= [v 3.78b] =-
|
||||
Версия была сделана сразу после того как я выложил пред., но я её не выкладывал,
|
||||
так как надеялся ещё доработать.
|
||||
|
||||
Новое:
|
||||
- поиск спрятан в меню, горячая клавиша ctrl+F7, поиск далее - ctrl+F8
|
||||
- более длинная строка открытия файлов, не желательно открывать пути
|
||||
>71 символа, так как могут возникнуть ошибки при работе с окном "быстрого с/з"
|
||||
|
||||
|
||||
это просто дополнение к предыдущему выпуску. дальше будет исправлено:
|
||||
- глюк с неактивными окнами.
|
||||
|
||||
-= [v 3.78a] =-
|
||||
|
||||
Вроде работает.. :)
|
||||
|
||||
Новое:
|
||||
- Скролл взят с "Scroll.inc",автор которого Jason Delozier.
|
||||
принцип движения по документу полностью изменён (по сравнению
|
||||
с прошлой версией).
|
||||
- Курсор двигается кликом мышки.
|
||||
- Добавлена функция Goto Line #.
|
||||
(enter-goto; esc - cancel)
|
||||
достаточно полезная функция, когда фасм(на доске отладки) пишет что ошибка
|
||||
в такой-то строке...
|
||||
- Исправлен баг с заданием имени нового файла
|
||||
- Исправлен баг со строкой поиска (при "поиске" последней строки)
|
||||
- Исправлен баг после вызова диалогов открытия/сохранения.
|
||||
теперь скролл после них продолжает работать ;)
|
||||
- Мелкие исправления в работе меню.
|
||||
|
||||
Появился:
|
||||
глюк, как в LC - при нажатии в области окна, даже если окно не активно,
|
||||
курсов и скролл бар всё равно реагируют на мышку.
|
||||
|
||||
Работаю над:
|
||||
-списком последних файлов
|
||||
-загрузкой "color table'a"
|
||||
|
||||
так же, надо посмотреть исходники HeEd'a, а точнее функции перекодировки.
|
||||
|
||||
-------------------------------------------------
|
||||
|
||||
-= [v 3.77a] =-
|
||||
|
||||
Ещё одна альфа.
|
||||
|
||||
На этот раз:
|
||||
- добавлена полоса прокутки
|
||||
- исправлено окно вопроса "сохранить документ", так как я заметил
|
||||
что оно жрало много процессорного времени.
|
||||
- обновление экрана после диалогов сохранения и открытия
|
||||
|
||||
На заметку: скролл полностью сделан мной и поэтому, возможно, есть глюки.
|
||||
так как я не нашёл более хорошей формулы, скролл всегда немного не доезжает до
|
||||
верха, зато никогда не пересекает нижнюю кнопку (вроде бы)
|
||||
|
||||
кнопки скролла "вверх" и "вниз" эквивалентны pg.up и pg.down
|
||||
|
||||
Размер скролла жестко закреплён, так как скоро будет заперщено
|
||||
изменять размены окна.
|
||||
|
||||
|
||||
Не получится:
|
||||
Убрать ограничение в 80 символов и присобачить поддержку BGI шрифтов.
|
||||
Проблема в слишком извращённом алгоритме вывода символов (по крайней
|
||||
мере мне так показалось), проще будет переделать всё по новой,
|
||||
взяв некоторые функции отсюда.
|
||||
|
||||
В следующей версии планируется:
|
||||
- функция "goto string #"
|
||||
- изменение цвета текста (и спец. символов) и рабочей области.
|
||||
- сохранение небольшого списка "последних редактируемых файлов"
|
||||
постараюсь, но всё же ничего не обещаю....
|
||||
|
||||
|
||||
-= [v 3.76 ] =-
|
||||
|
||||
Повторный ремейк тайнипада :) Клавиатура рулит.
|
||||
|
||||
Что нового?
|
||||
|
||||
- "Окно быстрого сохранения и загрузки" для прописывания пути
|
||||
к файлу "вручную". В этом же окне горячие клавиши -
|
||||
ctrl+s - сохранить, ctrl+o - открыть, esc - отмена
|
||||
|
||||
- Горячие клавиши для компиляции(CTRL+F9),
|
||||
компиляции и запуска (CTRL+F10), и доски отладки(F12)
|
||||
|
||||
- главное окно остаётся активным после запуска доски отладки
|
||||
и окна быстрого сохранения (только горячими клавишами)
|
||||
|
||||
- Исправлен глюк вылетания при попытке поиска в пустом
|
||||
документе
|
||||
|
||||
- облагорожен писк из спикера, теперь похож на писк Колибри 3
|
||||
|
||||
- Кнопки выровнены для использования скина
|
||||
|
||||
- по непонятным мне причинам файлы сохранённые в нижнем регистре
|
||||
абсолютно не принимались sysxtree и нужно было их открывать
|
||||
вручную прописывая путь. исправлено обычным переводом в верхний
|
||||
регистр.
|
||||
|
||||
- окна сообщения при переполненном диске (та же процедура, что и для erroff у
|
||||
savedialog)
|
||||
|
||||
- исправлен мой баг - при невозможности сохранения теперь остаётся старый путь
|
||||
к файлу (и имя).
|
||||
|
||||
- исправлено ещё парочка мелких недочётов (моих?!).
|
||||
|
||||
Что не сделано?
|
||||
|
||||
Всё ещё нет поддержки шрифтов BGI и
|
||||
изменения цвета фона/текста. Хотя я сомневаюсь, что BGI шрифты прямо "необходим
|
||||
ы"
|
||||
в асм-блокноте.
|
||||
Пока ещё не обрабатывается ошибка "fat12 заполнен" - вроде бы даже функции в яд
|
||||
ре нет...
|
||||
Хочу перейти на скан-коды, а то в аски повторяются коды.
|
||||
--------------------------------------------
|
||||
и ещё: о ошибках и критике - мне (не "меня") на мыло или на форум.
|
||||
--------------------------------------------
|
||||
|
||||
История...
|
||||
|
||||
-= [ v 3.75b ] =-
|
||||
|
||||
О....
|
||||
Ремейк :) Tinypad'a :
|
||||
Тулбар теперь спрятан в меню. Для сохранения и открытия используются
|
||||
диалоги из ASCL Павлюшина Евгения. Исправлен "жуткий" баг - когда
|
||||
сохраняешь документ под другим именем, в строке заголовка оставалось
|
||||
старое название.
|
||||
Добавлены диалоговые окна при ошибках и выходе. Добавлена кнопка
|
||||
"новый", при нажатии на которую задаётся вопрос о сохранении файла, затем
|
||||
создаётся документ с новым именем. Максимально 99 новых документов. Кнопка
|
||||
"новое окно" открывает новое окно Тайнипада (запускает новый процесс).
|
||||
|
||||
О грустном...
|
||||
Обо всех ошибках мне на мыло, попробую исправить.
|
||||
Диалог "сохранить как" сохраняет только на готовые файлы (то есть поверх них,
|
||||
нельзя создать новый).
|
||||
При попытке поиска строки в пустом документе прога вылетает :(
|
||||
При выходе, когда вылазит окошко с вопросом "сохранить файл?" - да - сохраняет
|
||||
документ и закрывает окно, нет - не сохраняет и выходит, Щелчёк по рабочей обла
|
||||
сти
|
||||
тайнипада эквивалентен кнопке отмена, которой нету ;), правда если окно сообщени
|
||||
я
|
||||
переместить, главное окно не обновляется. Это вызванно "специфическим" кодом, т
|
||||
ак
|
||||
как более простого решения я не нашёл.
|
||||
|
||||
О спасибках...
|
||||
Всем спасиба! Павлюшину за ASCL, Халявину, Willow и всем с нашего форума помощь.
|
||||
|
||||
О будущем...
|
||||
если получится, можно будет реализовать поддержку BGI шрифтов... ещё не смотрел
|
||||
их код -- страшно!
|
||||
|
||||
Кто, бл%?
|
||||
DoomEd Archangel
|
||||
archangel@mail.kz / meos-wall.narod.ru
|
||||
|
||||
|
||||
|
||||
-= [ v 3.75a ------> v 3.6 ] =-
|
||||
|
||||
;******************************************************************************
|
||||
; project name: TINYPAD
|
||||
; compiler: flat assmebler 1.52 alpha 3
|
||||
; version: 3.75a
|
||||
; last update: 24/03/2004
|
||||
; maintained by: Ivan Poddubny
|
||||
; e-mail: ivan-yar@bk.ru
|
||||
;******************************************************************************
|
||||
; HISTORY:
|
||||
; 3.75a
|
||||
; fixed converting char to upper case in read_string
|
||||
; 3.75
|
||||
; rewrote save_file from scratch; bugfix in loadfile;
|
||||
; 3.74
|
||||
; optimisation
|
||||
; 3.73
|
||||
; completly new load_file function
|
||||
; 3.72
|
||||
; speed++
|
||||
; 3.71
|
||||
; error beep
|
||||
; 3.6,3.7:
|
||||
; many bugs fixed
|
||||
; simple toolbar
|
||||
; compile, run applications from TINYPAD, all fasm output is in debug board
|
||||
; TAB button
|
||||
; auto-indent
|
||||
; Ctrl+L - insert comment string
|
||||
;******************************************************************************
|
||||
; Memory 0x300000:
|
||||
; stack 0x00eff0 - стэк
|
||||
; stack for help 0x00fff0 -
|
||||
; stack for help 0x00fff0
|
||||
@@ -0,0 +1,8 @@
|
||||
Для начинающих работать с MeOS - описание файлов в этом архиве:
|
||||
|
||||
tinypad - скомпилированный исполняемый файл MeOS
|
||||
tinypad.asm - исходный код
|
||||
ascl.inc - assembler small code library от Павлюшина Евгения
|
||||
(функция label заменена на putlabel)
|
||||
dialogs1.inc - диалоговые окна, messagebox'ы и не очень хорошее меню.
|
||||
macros.inc - тоже замечательный набор макросов.
|
||||
@@ -0,0 +1,933 @@
|
||||
lang equ ru ; ru en fr ge fi
|
||||
|
||||
;
|
||||
; Assembler
|
||||
; SMALL
|
||||
; CODE
|
||||
; Libary
|
||||
;
|
||||
; Ver 0.14 By Pavlushin Evgeni (RUSSIA)
|
||||
; www.waptap@mail.ru
|
||||
|
||||
;Please compile aplications on FASM ver1.54 or higer!!!
|
||||
|
||||
;InfoList
|
||||
;0.01 scank,putpix,puttxt
|
||||
;0.02 label,random,colors
|
||||
;0.03 window,startwd,endwd,attributes
|
||||
;0.04 close,delay,scevent ~30.04.2004
|
||||
;0.05 small random, ~04.05.2004
|
||||
;0.06 wtevent ~09.05.2004
|
||||
;0.07 timeevent ~23.05.2004
|
||||
;0.08 txtput ~14.06.2004
|
||||
;0.09 opendialog,savedialog ~20.06.2004
|
||||
;0.10 wordstoreg by halyavin, add at ~30.08.2004
|
||||
; random bug deleted eax is use.
|
||||
;0.11 loadfile from me +puttxt bug del ~07.09.2004
|
||||
;0.12 open/save dialog ~13.09.2004
|
||||
;0.13 dialogs bugs deleted
|
||||
;0.14 drawlbut ~03.10.2004
|
||||
;0.15 extendet label!
|
||||
|
||||
; LOADFILE
|
||||
; (SYNTAX) LOADFILE 'full_path_to_file',file_load_area,file_temp_area
|
||||
; (SAMPLE) LOADFILE '/rd/1/clock.bmp',load_area,temp_area
|
||||
|
||||
|
||||
macro loadfile file_name,file_load_area,file_temp_area
|
||||
{
|
||||
local open,fileinfo,string
|
||||
jmp open
|
||||
fileinfo:
|
||||
dd 0
|
||||
dd 0
|
||||
dd 1
|
||||
dd file_load_area
|
||||
dd file_temp_area
|
||||
string:
|
||||
db file_name,0
|
||||
open:
|
||||
mov dword [fileinfo+8],1 ; how many blocks to read (1)
|
||||
mov eax,58
|
||||
mov ebx,fileinfo
|
||||
int 0x40
|
||||
mov eax,[file_load_area+2]
|
||||
shr eax,9 ; поделим на 512 и прибавим 1 - получим число блоков
|
||||
inc eax
|
||||
mov dword [fileinfo+8],eax
|
||||
mov eax,58
|
||||
mov ebx,fileinfo
|
||||
int 0x40
|
||||
}
|
||||
|
||||
|
||||
;***********************************************************
|
||||
macro savefile file_name,file_save_area,file_temp_area,fsize
|
||||
{
|
||||
local save,fileinfo,string ;,counter00
|
||||
jmp save
|
||||
;counter00 dd 0
|
||||
fileinfo:
|
||||
dd 1
|
||||
dd 0
|
||||
dd fsize ;counter00
|
||||
dd file_save_area
|
||||
dd file_temp_area
|
||||
string:
|
||||
db file_name,0
|
||||
save:
|
||||
;xor edi,edi
|
||||
; sub edi,file_save_area ; calculate dump size
|
||||
; mov edx,edi
|
||||
;mov [counter00],edi
|
||||
; mov dword [fileinfo+8],1 ; how many blocks to write (1)
|
||||
; mov eax,58
|
||||
; mov ebx,fileinfo
|
||||
; int 0x40
|
||||
; mov eax,[file_load_area+2]
|
||||
; shr eax,9 ; поделим на 512 и прибавим 1 - получим число блоков
|
||||
; inc eax
|
||||
; mov dword [fileinfo+8],eax
|
||||
mov eax,58
|
||||
mov ebx,fileinfo
|
||||
int 0x40
|
||||
}
|
||||
;***********************************************************
|
||||
|
||||
|
||||
;macro wordstoreg reg,hiword,loword
|
||||
;{
|
||||
;if hiword eqtype 0 & loword eqtype 0
|
||||
; mov reg,dword hiword*65536+loword
|
||||
;else if hiword eqtype 12 & loword eqtype eax
|
||||
; mov reg,dword hiword*65536
|
||||
; add reg,dword loword
|
||||
;else if hiword eqtype 12 & loword eqtype [123]
|
||||
; mov reg,dword hiword*65536
|
||||
; add reg,dword loword
|
||||
;else
|
||||
; mov reg,dword hiword
|
||||
; shl reg,16
|
||||
; add reg,dword loword
|
||||
;end if
|
||||
;}
|
||||
|
||||
macro dword2reg reg,doubleword
|
||||
{
|
||||
if doubleword eq
|
||||
; not changes
|
||||
else
|
||||
mov reg,dword doubleword
|
||||
end if
|
||||
}
|
||||
|
||||
macro words2reg reg,hiword,lowword
|
||||
{
|
||||
if hiword eq
|
||||
if lowword eq
|
||||
; not changes
|
||||
else
|
||||
if lowword eqtype 12
|
||||
and reg,dword 0xffff0000
|
||||
add reg,dword lowword
|
||||
else
|
||||
and reg,dword 0xffff0000
|
||||
add reg,dword lowword
|
||||
end if
|
||||
end if
|
||||
else
|
||||
if lowword eq
|
||||
if hiword eqtype 12
|
||||
and reg,dword 0x0000ffff
|
||||
add reg,dword hiword*65536
|
||||
else
|
||||
shl reg,16
|
||||
add reg,dword hiword
|
||||
ror reg,16
|
||||
end if
|
||||
else
|
||||
if lowword eqtype 12 & hiword eqtype 12
|
||||
if lowword eq 0 & hiword eq 0
|
||||
xor reg,reg
|
||||
else
|
||||
mov reg,dword hiword*65536+lowword
|
||||
end if
|
||||
else
|
||||
mov reg,dword hiword
|
||||
shl reg,16
|
||||
add reg,dword lowword
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
; DRAW BUTTON with label
|
||||
|
||||
macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor
|
||||
{
|
||||
local asd,lab
|
||||
jmp asd
|
||||
lab db text ;arg label
|
||||
asd:
|
||||
words2reg ebx,x,xs
|
||||
words2reg ecx,y,ys
|
||||
mov edx,id
|
||||
mov esi,bcolor
|
||||
mov eax,8
|
||||
int 0x40
|
||||
|
||||
mov eax,asd-lab ;calc size
|
||||
mov ebx,6
|
||||
mul ebx
|
||||
mov esi,eax
|
||||
|
||||
mov eax,xs
|
||||
sub eax,esi
|
||||
shr eax,1
|
||||
add eax,x
|
||||
|
||||
mov edx,ys
|
||||
sub edx,7
|
||||
shr edx,1
|
||||
add edx,y
|
||||
|
||||
mov ebx,eax
|
||||
shl ebx,16
|
||||
add ebx,edx
|
||||
|
||||
mov ecx,tcolor ;arg4 color
|
||||
mov edx,lab
|
||||
mov esi,asd-lab ;calc size
|
||||
mov eax,4
|
||||
int 0x40
|
||||
}
|
||||
|
||||
|
||||
macro opendialog redproc,openoff,erroff,path
|
||||
{
|
||||
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
|
||||
local run_fileinfo, param
|
||||
local getmesloop, loox, mred, mkey, mbutton, mgetmes
|
||||
local dlg_is_work, ready, procinfo
|
||||
;
|
||||
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
|
||||
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
|
||||
;
|
||||
|
||||
cld
|
||||
;; mov esi,path
|
||||
mov edi,path
|
||||
mov eax,0
|
||||
mov ecx,200
|
||||
rep stosb
|
||||
|
||||
;mov [get_loops],0
|
||||
mov [dlg_pid_get],0
|
||||
|
||||
; Get my PID in dec format 4 bytes
|
||||
mov eax,9
|
||||
mov ebx,procinfo
|
||||
mov ecx,-1
|
||||
int 0x40
|
||||
|
||||
; convert eax bin to param dec
|
||||
mov eax,dword [procinfo+30] ;offset of myPID
|
||||
mov edi,param+4-1 ;offset to 4 bytes
|
||||
mov ecx,4
|
||||
mov ebx,10
|
||||
cld
|
||||
new_d:
|
||||
xor edx,edx
|
||||
div ebx
|
||||
add dl,'0'
|
||||
mov [edi],dl
|
||||
dec edi
|
||||
loop new_d
|
||||
|
||||
; wirite 1 byte space to param
|
||||
mov [param+4],byte 32 ;Space for next parametr
|
||||
; and 1 byte type of dialog to param
|
||||
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog)
|
||||
|
||||
;
|
||||
; STEP2 prepare IPC area for get messages
|
||||
;
|
||||
|
||||
; prepare IPC area
|
||||
mov [path],dword 0
|
||||
mov [path+4],dword 8
|
||||
|
||||
; define IPC memory
|
||||
mov eax,60
|
||||
mov ebx,1 ; define IPC
|
||||
mov ecx,path ; offset of area
|
||||
mov edx,150 ; size 150 bytes
|
||||
int 0x40
|
||||
|
||||
; change wanted events list 7-bit IPC event
|
||||
mov eax,40
|
||||
mov ebx,01000111b
|
||||
int 0x40
|
||||
|
||||
;
|
||||
; STEP 3 run SYSTEM XTREE with parameters
|
||||
;
|
||||
|
||||
mov eax,58
|
||||
mov ebx,run_fileinfo
|
||||
int 0x40
|
||||
|
||||
call redproc
|
||||
|
||||
mov [get_loops],0
|
||||
getmesloop:
|
||||
mov eax,23
|
||||
mov ebx,50 ;0.5 sec
|
||||
int 0x40
|
||||
|
||||
cmp eax,1
|
||||
je mred
|
||||
cmp eax,2
|
||||
je mkey
|
||||
cmp eax,3
|
||||
je mbutton
|
||||
cmp eax,7
|
||||
je mgetmes
|
||||
|
||||
; Get number of procces
|
||||
mov ebx,procinfo
|
||||
mov ecx,-1
|
||||
mov eax,9
|
||||
int 0x40
|
||||
mov ebp,eax
|
||||
|
||||
loox:
|
||||
mov eax,9
|
||||
mov ebx,procinfo
|
||||
mov ecx,ebp
|
||||
int 0x40
|
||||
mov eax,[DLGPID]
|
||||
cmp [procinfo+30],eax ;IF Dialog find
|
||||
je dlg_is_work ;jmp to dlg_is_work
|
||||
dec ebp
|
||||
jnz loox
|
||||
|
||||
jmp erroff
|
||||
|
||||
dlg_is_work:
|
||||
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
|
||||
je erroff ;TESTODP2 terminated too
|
||||
|
||||
cmp [dlg_pid_get],dword 1
|
||||
je getmesloop
|
||||
inc [get_loops]
|
||||
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
|
||||
jae erroff
|
||||
jmp getmesloop
|
||||
|
||||
mred:
|
||||
call redproc
|
||||
jmp getmesloop
|
||||
mkey:
|
||||
mov eax,2
|
||||
int 0x40 ; read (eax=2)
|
||||
jmp getmesloop
|
||||
mbutton:
|
||||
mov eax,17 ; get id
|
||||
int 0x40
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jne getmesloop
|
||||
mov eax,-1 ; close this program
|
||||
int 0x40
|
||||
mgetmes:
|
||||
|
||||
; If dlg_pid_get then second message get jmp to still
|
||||
cmp [dlg_pid_get],dword 1
|
||||
je ready
|
||||
|
||||
; First message is number of PID SYSXTREE dialog
|
||||
|
||||
; convert PID dec to PID bin
|
||||
movzx eax,byte [path+16]
|
||||
sub eax,48
|
||||
imul eax,10
|
||||
movzx ebx,byte [path+16+1]
|
||||
add eax,ebx
|
||||
sub eax,48
|
||||
imul eax,10
|
||||
movzx ebx,byte [path+16+2]
|
||||
add eax,ebx
|
||||
sub eax,48
|
||||
imul eax,10
|
||||
movzx ebx,byte [path+16+3]
|
||||
add eax,ebx
|
||||
sub eax,48
|
||||
mov [DLGPID],eax
|
||||
|
||||
; Claear and prepare IPC area for next message
|
||||
mov [path],dword 0
|
||||
mov [path+4],dword 8
|
||||
mov [path+8],dword 0
|
||||
mov [path+12],dword 0
|
||||
mov [path+16],dword 0
|
||||
|
||||
; Set dlg_pid_get for get next message
|
||||
mov [dlg_pid_get],dword 1
|
||||
call redproc ;show DLG_PID
|
||||
jmp getmesloop
|
||||
|
||||
ready:
|
||||
;
|
||||
; The second message get
|
||||
; Second message is 100 bytes path to SAVE/OPEN file
|
||||
; shl path string on 16 bytes
|
||||
;
|
||||
cld
|
||||
mov esi,path+16
|
||||
mov edi,path
|
||||
mov ecx,200
|
||||
rep movsb
|
||||
mov [edi],byte 0
|
||||
|
||||
jmp openoff
|
||||
|
||||
|
||||
; DATA AREA
|
||||
get_loops dd 0
|
||||
dlg_pid_get dd 0
|
||||
DLGPID dd 0
|
||||
|
||||
param:
|
||||
dd 0 ; My dec PID
|
||||
dd 0,0 ; Type of dialog
|
||||
|
||||
run_fileinfo:
|
||||
dd 16
|
||||
dd 0
|
||||
dd param
|
||||
dd 0
|
||||
dd procinfo ; 0x10000
|
||||
;run_filepath
|
||||
db '/RD/1/SYSXTREE',0
|
||||
|
||||
procinfo:
|
||||
times 1024 db 0
|
||||
}
|
||||
|
||||
|
||||
macro savedialog redproc,openoff,erroff,path
|
||||
{
|
||||
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
|
||||
local run_fileinfo, run_filepath, param
|
||||
local getmesloop, loox, mred, mkey, mbutton, mgetmes
|
||||
local dlg_is_work, ready, procinfo
|
||||
;
|
||||
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
|
||||
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
|
||||
;
|
||||
|
||||
cld
|
||||
;; mov esi,path
|
||||
mov edi,path
|
||||
mov eax,0
|
||||
mov ecx,200
|
||||
rep stosb
|
||||
|
||||
;mov [get_loops],0
|
||||
mov [dlg_pid_get],0
|
||||
|
||||
; Get my PID in dec format 4 bytes
|
||||
mov eax,9
|
||||
mov ebx,procinfo
|
||||
mov ecx,-1
|
||||
int 0x40
|
||||
|
||||
; convert eax bin to param dec
|
||||
mov eax,dword [procinfo+30] ;offset of myPID
|
||||
mov edi,param+4-1 ;offset to 4 bytes
|
||||
mov ecx,4
|
||||
mov ebx,10
|
||||
cld
|
||||
new_d:
|
||||
xor edx,edx
|
||||
div ebx
|
||||
add dl,'0'
|
||||
mov [edi],dl
|
||||
dec edi
|
||||
loop new_d
|
||||
|
||||
; wirite 1 byte space to param
|
||||
mov [param+4],byte 32 ;Space for next parametr
|
||||
; and 1 byte type of dialog to param
|
||||
mov [param+5],byte 'S' ;Get Open dialog (Use 'S' for Save dialog)
|
||||
|
||||
;
|
||||
; STEP2 prepare IPC area for get messages
|
||||
;
|
||||
|
||||
; prepare IPC area
|
||||
mov [path],dword 0
|
||||
mov [path+4],dword 8
|
||||
|
||||
; define IPC memory
|
||||
mov eax,60
|
||||
mov ebx,1 ; define IPC
|
||||
mov ecx,path ; offset of area
|
||||
mov edx,150 ; size 150 bytes
|
||||
int 0x40
|
||||
|
||||
; change wanted events list 7-bit IPC event
|
||||
mov eax,40
|
||||
mov ebx,01000111b
|
||||
int 0x40
|
||||
|
||||
;
|
||||
; STEP 3 run SYSTEM XTREE with parameters
|
||||
;
|
||||
|
||||
mov eax,58
|
||||
mov ebx,run_fileinfo
|
||||
int 0x40
|
||||
|
||||
call redproc
|
||||
|
||||
mov [get_loops],0
|
||||
getmesloop:
|
||||
mov eax,23
|
||||
mov ebx,50 ;0.5 sec
|
||||
int 0x40
|
||||
|
||||
cmp eax,1
|
||||
je mred
|
||||
cmp eax,2
|
||||
je mkey
|
||||
cmp eax,3
|
||||
je mbutton
|
||||
cmp eax,7
|
||||
je mgetmes
|
||||
|
||||
; Get number of procces
|
||||
mov ebx,procinfo
|
||||
mov ecx,-1
|
||||
mov eax,9
|
||||
int 0x40
|
||||
mov ebp,eax
|
||||
|
||||
loox:
|
||||
mov eax,9
|
||||
mov ebx,procinfo
|
||||
mov ecx,ebp
|
||||
int 0x40
|
||||
mov eax,[DLGPID]
|
||||
cmp [procinfo+30],eax ;IF Dialog find
|
||||
je dlg_is_work ;jmp to dlg_is_work
|
||||
dec ebp
|
||||
jnz loox
|
||||
|
||||
jmp erroff
|
||||
|
||||
dlg_is_work:
|
||||
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
|
||||
je erroff ;TESTODP2 terminated too
|
||||
|
||||
cmp [dlg_pid_get],dword 1
|
||||
je getmesloop
|
||||
inc [get_loops]
|
||||
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
|
||||
jae erroff
|
||||
jmp getmesloop
|
||||
|
||||
mred:
|
||||
call redproc
|
||||
jmp getmesloop
|
||||
mkey:
|
||||
mov eax,2
|
||||
int 0x40 ; read (eax=2)
|
||||
jmp getmesloop
|
||||
mbutton:
|
||||
mov eax,17 ; get id
|
||||
int 0x40
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jne getmesloop
|
||||
mov eax,-1 ; close this program
|
||||
int 0x40
|
||||
mgetmes:
|
||||
|
||||
; If dlg_pid_get then second message get jmp to still
|
||||
cmp [dlg_pid_get],dword 1
|
||||
je ready
|
||||
|
||||
; First message is number of PID SYSXTREE dialog
|
||||
|
||||
; convert PID dec to PID bin
|
||||
movzx eax,byte [path+16]
|
||||
sub eax,48
|
||||
imul eax,10
|
||||
movzx ebx,byte [path+16+1]
|
||||
add eax,ebx
|
||||
sub eax,48
|
||||
imul eax,10
|
||||
movzx ebx,byte [path+16+2]
|
||||
add eax,ebx
|
||||
sub eax,48
|
||||
imul eax,10
|
||||
movzx ebx,byte [path+16+3]
|
||||
add eax,ebx
|
||||
sub eax,48
|
||||
mov [DLGPID],eax
|
||||
|
||||
; Claear and prepare IPC area for next message
|
||||
mov [path],dword 0
|
||||
mov [path+4],dword 8
|
||||
mov [path+8],dword 0
|
||||
mov [path+12],dword 0
|
||||
mov [path+16],dword 0
|
||||
|
||||
; Set dlg_pid_get for get next message
|
||||
mov [dlg_pid_get],dword 1
|
||||
call redproc ;show DLG_PID
|
||||
jmp getmesloop
|
||||
|
||||
ready:
|
||||
;
|
||||
; The second message get
|
||||
; Second message is 100 bytes path to SAVE/OPEN file
|
||||
; shl path string on 16 bytes
|
||||
;
|
||||
cld
|
||||
mov esi,path+16
|
||||
mov edi,path
|
||||
mov ecx,200
|
||||
rep movsb
|
||||
mov [edi],byte 0
|
||||
|
||||
jmp openoff
|
||||
|
||||
|
||||
; DATA AREA
|
||||
get_loops dd 0
|
||||
dlg_pid_get dd 0
|
||||
DLGPID dd 0
|
||||
|
||||
param:
|
||||
dd 0 ; My dec PID
|
||||
dd 0,0 ; Type of dialog
|
||||
|
||||
run_fileinfo:
|
||||
dd 16
|
||||
dd 0
|
||||
dd param
|
||||
dd 0
|
||||
dd procinfo
|
||||
;run_filepath:
|
||||
db '/RD/1/SYSXTREE',0
|
||||
|
||||
procinfo:
|
||||
times 1024 db 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
; RANDOM - generate random count (small)
|
||||
; (SYNTAX) RANDOM MaxCount,OutArgument
|
||||
; (SAMPLE) RANDOM 10000,eax
|
||||
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations
|
||||
|
||||
randomuse = 0
|
||||
|
||||
macro random arg1,arg2
|
||||
{
|
||||
local rxproc
|
||||
randomuse = randomuse + 1
|
||||
|
||||
jmp rxproc
|
||||
|
||||
if defined randomuse & randomuse = 1
|
||||
randomproc:
|
||||
jmp rnj
|
||||
rsx1 dw 0x4321
|
||||
rsx2 dw 0x1234
|
||||
rnj:
|
||||
; mov eax,arg1
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
push si
|
||||
push di
|
||||
mov cx,ax
|
||||
mov ax,word ptr rsx1
|
||||
mov bx,word ptr rsx2
|
||||
mov si,ax
|
||||
mov di,bx
|
||||
mov dl,ah
|
||||
mov ah,al
|
||||
mov al,bh
|
||||
mov bh,bl
|
||||
xor bl,bl
|
||||
rcr dl,1
|
||||
rcr ax,1
|
||||
rcr bx,1
|
||||
add bx,di
|
||||
adc ax,si
|
||||
add bx,0x62e9
|
||||
adc ax,0x3619
|
||||
mov word ptr rsx1,bx
|
||||
mov word ptr rsx2,ax
|
||||
xor dx,dx
|
||||
cmp ax,0
|
||||
je nodiv
|
||||
cmp cx,0
|
||||
je nodiv
|
||||
div cx
|
||||
nodiv:
|
||||
mov ax,dx
|
||||
pop di
|
||||
pop si
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
and eax,0000ffffh
|
||||
; mov arg2,0
|
||||
; mov arg2,eax
|
||||
ret
|
||||
end if
|
||||
|
||||
rxproc:
|
||||
mov eax,arg1
|
||||
call randomproc
|
||||
mov arg2,eax
|
||||
}
|
||||
|
||||
macro scank
|
||||
{
|
||||
mov eax,10
|
||||
int 0x40
|
||||
}
|
||||
|
||||
macro putpix x,y,color
|
||||
{
|
||||
mov ebx,x
|
||||
mov ecx,y
|
||||
mov edx,color
|
||||
mov eax,1
|
||||
int 0x40
|
||||
}
|
||||
|
||||
macro puttxt x,y,offs,size,color
|
||||
{
|
||||
; mov ebx,x
|
||||
; shl ebx,16
|
||||
; add ebx,y
|
||||
words2reg ebx,x,y
|
||||
|
||||
dword2reg ecx,color
|
||||
dword2reg edx,offs
|
||||
dword2reg esi,size
|
||||
|
||||
; mov ecx,color
|
||||
; mov edx,offs
|
||||
; mov esi,size
|
||||
mov eax,4
|
||||
int 0x40
|
||||
}
|
||||
|
||||
macro outcount data, x, y, color, numtype
|
||||
{
|
||||
mov ecx,data
|
||||
mov ebx,numtype
|
||||
mov bl,0
|
||||
; mov edx,x*65536+y
|
||||
words2reg edx,x,y
|
||||
mov esi,color
|
||||
mov eax,47
|
||||
int 0x40
|
||||
}
|
||||
|
||||
; SCEVENT - Scan event
|
||||
|
||||
macro scevent red,key,but
|
||||
{
|
||||
mov eax,11
|
||||
int 0x40
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
; WTEVENT - Wait event
|
||||
|
||||
macro wtevent red,key,but
|
||||
{
|
||||
mov eax,10
|
||||
int 0x40
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
; TIMEEVENT - Wite for event with timeout
|
||||
|
||||
macro timeevent xfps,noevent,red,key,but
|
||||
{
|
||||
mov eax,23
|
||||
mov ebx,xfps
|
||||
int 0x40
|
||||
cmp eax,0
|
||||
je noevent
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
|
||||
; CLOSE - Close program
|
||||
|
||||
macro close
|
||||
{
|
||||
mov eax,-1
|
||||
int 0x40
|
||||
}
|
||||
|
||||
; DELAY - Create delay 1/100 sec
|
||||
; (SYNTAX) Delay time
|
||||
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec
|
||||
|
||||
macro delay arg1
|
||||
{
|
||||
mov eax,5
|
||||
mov ebx,arg1
|
||||
int 0x40
|
||||
}
|
||||
|
||||
; WINDOW - Draw window
|
||||
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color
|
||||
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned
|
||||
|
||||
macro window arg1,arg2,arg3,arg4,arg5
|
||||
{
|
||||
; mov ebx,arg1*65536+arg3
|
||||
; mov ecx,arg2*65536+arg4
|
||||
words2reg ebx,arg1,arg3
|
||||
words2reg ecx,arg2,arg4
|
||||
mov edx,arg5
|
||||
mov eax,0
|
||||
int 0x40
|
||||
}
|
||||
|
||||
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7
|
||||
{
|
||||
; mov ebx,arg1*65536+arg3
|
||||
; mov ecx,arg2*65536+arg4
|
||||
words2reg ebx,arg1,arg3
|
||||
words2reg ecx,arg2,arg4
|
||||
mov edx,arg5
|
||||
mov esi,arg6
|
||||
mov edi,arg7
|
||||
mov eax,0
|
||||
int 0x40
|
||||
}
|
||||
|
||||
|
||||
; STARTWD - Start of window draw
|
||||
|
||||
macro startwd
|
||||
{
|
||||
mov eax,12
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
}
|
||||
|
||||
; ENDWD - End window draw
|
||||
|
||||
macro endwd
|
||||
{
|
||||
mov eax,12
|
||||
mov ebx,2
|
||||
int 0x40
|
||||
}
|
||||
|
||||
; LABEL - Put text to frame
|
||||
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color
|
||||
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big
|
||||
|
||||
macro putlabel arg1,arg2,arg3,arg4
|
||||
{
|
||||
local asd,lab
|
||||
jmp asd
|
||||
lab db arg3 ;arg label
|
||||
asd:
|
||||
; mov ebx,arg1 ;arg1=y arg2=x
|
||||
; shl ebx,16
|
||||
; add ebx,arg2
|
||||
|
||||
words2reg ebx,arg1,arg2
|
||||
|
||||
dword2reg ecx,arg4
|
||||
|
||||
mov edx,lab
|
||||
mov esi,asd-lab ;calc size
|
||||
mov eax,4
|
||||
int 0x40
|
||||
}
|
||||
|
||||
;Key's
|
||||
key_Up equ 178
|
||||
key_Down equ 177
|
||||
key_Right equ 179
|
||||
key_Left equ 176
|
||||
key_Esc equ 27
|
||||
key_Space equ 32
|
||||
key_Enter equ 13
|
||||
key_Bspace equ 8
|
||||
key_F1 equ 50
|
||||
key_F2 equ 51
|
||||
key_F3 equ 52
|
||||
key_F4 equ 53
|
||||
key_F5 equ 54
|
||||
key_F6 equ 55
|
||||
key_F7 equ 56
|
||||
key_F8 equ 57
|
||||
key_F9 equ 48
|
||||
key_F10 equ 49
|
||||
key_F11 equ 68
|
||||
key_F12 equ 255
|
||||
key_Home equ 180
|
||||
key_End equ 181
|
||||
key_PgUp equ 184
|
||||
key_PgDown equ 183
|
||||
|
||||
;Attributes
|
||||
|
||||
;Window Attributes
|
||||
window_Skinned equ 0x03000000
|
||||
window_Type2 equ 0x02000000
|
||||
window_Type1 equ 0x00000000
|
||||
window_Reserve equ 0x01000000
|
||||
|
||||
;Font Attributes
|
||||
font_Big equ 0x10000000
|
||||
|
||||
;Colors
|
||||
cl_White equ 0x00ffffff
|
||||
cl_Black equ 0x00000000
|
||||
cl_Grey equ 0x00888888
|
||||
cl_Red equ 0x00ff0000
|
||||
cl_Lime equ 0x0000ff00
|
||||
cl_Green equ 0x0000af00
|
||||
cl_Blue equ 0x000000ff
|
||||
cl_Purple equ 0x008080ff
|
||||
cl_Violet equ 0x008040ff
|
||||
cl_Cyan equ 0x0040e0ff
|
||||
@@ -0,0 +1,4 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en >lang.inc
|
||||
@fasm tinypad2.asm tinypad2
|
||||
@pause
|
||||
@@ -0,0 +1,4 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru >lang.inc
|
||||
@fasm tinypad2.asm tinypad2
|
||||
@pause
|
||||
@@ -0,0 +1,597 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; ;
|
||||
; DIALOGS1.INC ;
|
||||
; ;
|
||||
; COMPILE WITH FASM for MENUET ;
|
||||
; ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
menus dd 3 ; number of menus
|
||||
m_x dd 0x5 ; x start
|
||||
m_y dd 20 ; y start
|
||||
m_xs dd 290 ; x size
|
||||
m_ys dd 14 ; y size
|
||||
g_stack dd 0xf000 ; thread stack - required
|
||||
|
||||
|
||||
menu:; AB C D E F G
|
||||
|
||||
db '*D FILE +Save File +Load File +- +Quit '
|
||||
db '*B EDIT +Copy +Paste '
|
||||
db '*B HELP +Setup +About.. '
|
||||
db '@' ; end mark
|
||||
|
||||
; A : Data type '*' -> New menu , '+' -> menu selection
|
||||
; B : Number of selections in menu (A+)
|
||||
; C : Menu header text
|
||||
; D-G : Menu selection text
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; DATA BELOW IS FOR DIALOGS1.INC INTERNALS
|
||||
|
||||
menu_action dd '----'
|
||||
|
||||
window_on db 0
|
||||
|
||||
g_n dd -1
|
||||
g_x dd 0x0
|
||||
g_t dd 0x0
|
||||
g_1 dd 0x0
|
||||
g_l dd 0x0
|
||||
closet db 0
|
||||
|
||||
table: times 1024 db 0
|
||||
|
||||
last_mouse dd 0x0
|
||||
|
||||
mo_x dd 0x0
|
||||
mo_y dd 0x0
|
||||
|
||||
|
||||
check_mouse:
|
||||
|
||||
pusha
|
||||
|
||||
cmp [window_on],1
|
||||
je no_open
|
||||
|
||||
mov eax,37
|
||||
mov ebx,2
|
||||
int 0x40
|
||||
|
||||
cmp [window_on],0
|
||||
jne openw2
|
||||
|
||||
cmp eax,0
|
||||
je no_open
|
||||
|
||||
openw2:
|
||||
|
||||
waitformouse:
|
||||
|
||||
mov eax,23
|
||||
mov ebx,2
|
||||
int 0x40
|
||||
|
||||
cmp eax,0
|
||||
jne no_open
|
||||
|
||||
mov eax,37
|
||||
mov ebx,2
|
||||
int 0x40
|
||||
|
||||
cmp eax,0
|
||||
jne waitformouse
|
||||
|
||||
|
||||
mov eax,37
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
|
||||
mov esi,eax
|
||||
|
||||
shr eax,16
|
||||
xor edx,edx
|
||||
mov ebx,50
|
||||
div ebx
|
||||
mov edx,eax
|
||||
cmp edx,[g_n]
|
||||
je no_open
|
||||
cmp edx,[menus]
|
||||
jge no_open
|
||||
mov eax,esi
|
||||
|
||||
and eax,0xffff
|
||||
|
||||
mov ebx,[m_y]
|
||||
cmp eax,ebx
|
||||
jbe no_open
|
||||
add ebx,[m_ys]
|
||||
cmp eax,ebx
|
||||
jge no_open
|
||||
|
||||
cmp [window_on],0
|
||||
je noww
|
||||
|
||||
mov [closet],1
|
||||
mov ecx,100
|
||||
waitm:
|
||||
mov eax,5
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
dec ecx
|
||||
jz no_open
|
||||
cmp [window_on],0
|
||||
jne waitm
|
||||
noww:
|
||||
|
||||
mov eax,edx
|
||||
jmp cll
|
||||
|
||||
no_open:
|
||||
|
||||
mov [last_mouse],esi
|
||||
|
||||
popa
|
||||
|
||||
ret
|
||||
|
||||
cll:
|
||||
|
||||
mov [window_on],2
|
||||
|
||||
mov [g_n],eax
|
||||
mov [g_x],96
|
||||
mov [g_t],0
|
||||
mov [g_1],1
|
||||
|
||||
mov eax,9
|
||||
mov ebx,table
|
||||
mov ecx,-1
|
||||
int 0x40
|
||||
|
||||
mov eax,[table+34]
|
||||
mov [mo_x],eax
|
||||
mov eax,[table+38]
|
||||
mov [mo_y],eax
|
||||
|
||||
mov eax,51
|
||||
mov ebx,1
|
||||
mov ecx,alert_entry
|
||||
mov edx,[g_stack]
|
||||
int 0x40
|
||||
|
||||
mov [esp+28],dword 0 ; clear button entry
|
||||
|
||||
mov [menu_action],'MD '
|
||||
|
||||
check_gr:
|
||||
|
||||
popa
|
||||
|
||||
ret
|
||||
|
||||
|
||||
draw_menu:
|
||||
|
||||
mov eax,9
|
||||
mov ebx,table
|
||||
mov ecx,-1
|
||||
int 0x40
|
||||
|
||||
cmp [table+46],dword 30
|
||||
jb drmr
|
||||
|
||||
mov eax,13 ; white background
|
||||
mov ebx,[m_x]
|
||||
shl ebx,16
|
||||
add ebx,[m_xs]
|
||||
inc ebx
|
||||
mov ecx,[m_y]
|
||||
shl ecx,16
|
||||
add ecx,[m_ys]
|
||||
mov edx,0xf0f8ff
|
||||
int 0x40
|
||||
|
||||
mov eax,38 ; egde lines
|
||||
mov ebx,[m_x]
|
||||
shl ebx,16
|
||||
add ebx,[m_x]
|
||||
add ebx,[m_xs]
|
||||
mov ecx,[m_y]
|
||||
shl ecx,16
|
||||
add ecx,[m_y]
|
||||
mov edx,0x000000
|
||||
int 0x40
|
||||
mov eax,38
|
||||
mov ecx,[m_y]
|
||||
add ecx,[m_ys]
|
||||
shl ecx,16
|
||||
add ecx,[m_y]
|
||||
add ecx,[m_ys]
|
||||
int 0x40
|
||||
|
||||
mov esi,menu-1
|
||||
mov edi,[m_x]
|
||||
mov ebp,1
|
||||
new_menu:
|
||||
inc esi
|
||||
|
||||
cmp [esi],byte '*'
|
||||
jne drmnl1
|
||||
push esi
|
||||
mov eax,4
|
||||
mov ebx,edi
|
||||
shl ebx,16
|
||||
add ebx,[m_y]
|
||||
add ebx,0x00050004
|
||||
mov ecx,0x000000
|
||||
mov edx,esi
|
||||
add edx,3
|
||||
mov esi,12
|
||||
int 0x40 ; draw text
|
||||
pop esi
|
||||
add esi,2
|
||||
add edi,50
|
||||
inc ebp
|
||||
|
||||
drmnl1:
|
||||
cmp [esi],byte '@'
|
||||
jne new_menu
|
||||
|
||||
drmr:
|
||||
|
||||
ret
|
||||
|
||||
alert_box:
|
||||
|
||||
; eax : x size - min 200
|
||||
; ebx : pointer to ASCIIZ - max 128 character text
|
||||
; ecx : button 1 id ( OK or YES )
|
||||
; edx : button 2 id or zero ( NO )
|
||||
|
||||
|
||||
cmp [window_on],0
|
||||
jne alert_box_return
|
||||
|
||||
mov [window_on],1
|
||||
|
||||
cmp eax,100
|
||||
jg size_ok
|
||||
mov eax,100
|
||||
size_ok:
|
||||
|
||||
mov [g_x],eax
|
||||
mov [g_t],ebx
|
||||
mov [g_1],ecx
|
||||
|
||||
mov ecx,0
|
||||
new_search:
|
||||
cmp [ebx],byte 0
|
||||
je found_len
|
||||
inc ebx
|
||||
inc ecx
|
||||
cmp ecx,128
|
||||
jbe new_search
|
||||
found_len:
|
||||
mov [g_l],ecx
|
||||
|
||||
mov eax,51
|
||||
mov ebx,1
|
||||
mov ecx,alert_entry
|
||||
mov edx,[g_stack]
|
||||
int 0x40
|
||||
|
||||
mov [menu_action],'MA '
|
||||
|
||||
alert_box_return:
|
||||
|
||||
ret
|
||||
|
||||
alert_entry:
|
||||
|
||||
call alert_draw_window
|
||||
|
||||
alert_still:
|
||||
|
||||
mov eax,23 ; wait here for event
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
|
||||
cmp eax,1 ; redraw request ?
|
||||
je alert_red
|
||||
cmp eax,2 ; key in buffer ?
|
||||
je alert_key
|
||||
cmp eax,3 ; button in buffer ?
|
||||
je alert_button
|
||||
|
||||
cmp [closet],0
|
||||
jne ccc
|
||||
|
||||
mov eax,9
|
||||
mov ebx,table
|
||||
mov ecx,-1
|
||||
int 0x40
|
||||
|
||||
cmp ax,[table+4]
|
||||
je no_close
|
||||
ccc:
|
||||
mov [closet],0
|
||||
mov [g_n],-1
|
||||
mov [menu_action],'----'
|
||||
mov [window_on],0
|
||||
mov eax,-1
|
||||
int 0x40
|
||||
no_close:
|
||||
|
||||
jmp alert_still
|
||||
|
||||
alert_red: ; redraw
|
||||
call alert_draw_window
|
||||
jmp alert_still
|
||||
|
||||
alert_key: ; key
|
||||
mov eax,2 ; just read it and ignore
|
||||
int 0x40
|
||||
jmp alert_still
|
||||
|
||||
alert_button: ; button
|
||||
mov eax,17 ; get id
|
||||
int 0x40
|
||||
|
||||
shr eax,8
|
||||
cmp eax,3
|
||||
jg no_action1
|
||||
dec eax
|
||||
shl eax,2
|
||||
mov eax,dword [eax+rtext]
|
||||
mov [menu_action],eax
|
||||
jmp action_done
|
||||
no_action1:
|
||||
sub eax,16
|
||||
add eax,65
|
||||
shl eax,8
|
||||
mov ebx,[g_n]
|
||||
add ebx,65
|
||||
add eax,ebx
|
||||
mov [menu_action],eax
|
||||
|
||||
action_done:
|
||||
|
||||
mov [closet],0
|
||||
mov [g_n],-1
|
||||
mov [window_on],0
|
||||
mov eax,-1 ; close this program
|
||||
int 0x40
|
||||
|
||||
rtext db 'NO YES OK '
|
||||
|
||||
jmp alert_still
|
||||
|
||||
|
||||
; *********************************************
|
||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
||||
; *********************************************
|
||||
|
||||
|
||||
alert_draw_window:
|
||||
|
||||
|
||||
mov eax,12 ; function 12:tell os about windowdraw
|
||||
mov ebx,1 ; 1, start of draw
|
||||
int 0x40
|
||||
|
||||
cmp [window_on],2
|
||||
jne no_win_type_2
|
||||
|
||||
mov edx,menu-1
|
||||
mov ecx,[g_n]
|
||||
add ecx,1
|
||||
find_menu:
|
||||
inc edx
|
||||
cmp [edx],byte '*'
|
||||
je menu_loop
|
||||
jmp find_menu
|
||||
menu_loop:
|
||||
loop find_menu
|
||||
movzx ebp,byte [edx+1]
|
||||
sub ebp,64
|
||||
push edx
|
||||
; DRAW WINDOW
|
||||
mov eax,0 ; function 0 : define and draw window
|
||||
mov ebx,[g_n]
|
||||
imul ebx,50
|
||||
add ebx,[mo_x]
|
||||
add ebx,[m_x]
|
||||
shl ebx,16
|
||||
add ebx,[g_x]
|
||||
mov ecx,[mo_y]
|
||||
add ecx,[m_y]
|
||||
add ecx,[m_ys]
|
||||
shl ecx,16
|
||||
mov edx,14
|
||||
imul edx,ebp
|
||||
add edx,7
|
||||
add ecx,edx
|
||||
mov edx,0x00ffffff ; color of work area RRGGBB,8->color gl
|
||||
mov esi,0x00ffffff ; color of grab bar RRGGBB,8->color gl
|
||||
mov edi,0x000000cc ; color of frames RRGGBB
|
||||
int 0x40
|
||||
|
||||
pop edx
|
||||
|
||||
mov ebx,5*65536+7 ; draw info text with function 4
|
||||
mov ecx,0x10000000
|
||||
mov esi,12
|
||||
mov ebp,16
|
||||
no_d_found:
|
||||
inc edx
|
||||
cmp [edx],byte '*'
|
||||
je d_drawed
|
||||
cmp [edx],byte '@'
|
||||
je d_drawed
|
||||
cmp [edx],byte '+'
|
||||
jne no_d_found
|
||||
inc edx
|
||||
pusha ; draw button
|
||||
mov eax,8
|
||||
mov ecx,ebx
|
||||
mov ebx,[g_x]
|
||||
add ebx,0x0000fffe
|
||||
shl ecx,16
|
||||
add ecx,0xfffc0000+14
|
||||
mov edx,0x40000000
|
||||
add edx,ebp
|
||||
mov esi,0
|
||||
int 0x40
|
||||
popa
|
||||
mov eax,4 ; draw text
|
||||
int 0x40
|
||||
inc ebp
|
||||
add ebx,14
|
||||
jmp no_d_found
|
||||
d_drawed:
|
||||
|
||||
no_win_type_2:
|
||||
|
||||
|
||||
cmp [window_on],1
|
||||
jne no_win_1
|
||||
|
||||
mov eax,14 ; to middle of screen
|
||||
int 0x40
|
||||
mov ecx,eax
|
||||
and ecx,0xffff
|
||||
shr ecx,1
|
||||
shr eax,1
|
||||
mov ebx,[g_x]
|
||||
shr ebx,1
|
||||
shl ebx,16
|
||||
sub eax,ebx
|
||||
mov ebx,eax
|
||||
|
||||
mov eax,0 ; function 0 : define and draw window
|
||||
mov bx,word [g_x]
|
||||
sub ecx,80
|
||||
shl ecx,16
|
||||
mov cx,110 ; [y start] *65536 + [y size]
|
||||
mov edx,0x02ffffff ; color of work area RRGGBB,8->color gl
|
||||
mov esi,0x80d05050 ; color of grab bar RRGGBB,8->color gl
|
||||
mov edi,0x00d05050 ; color of frames RRGGBB
|
||||
int 0x40
|
||||
|
||||
|
||||
mov eax,4 ; label
|
||||
mov ebx,8*65536+8
|
||||
mov ecx,0x10ddeeff
|
||||
mov edx,alert_labelt1
|
||||
mov esi,alert_label1len-alert_labelt1
|
||||
int 0x40
|
||||
|
||||
mov eax,4
|
||||
mov ebx,10*65536+43
|
||||
mov ecx,0x10000000
|
||||
mov edx,[g_t]
|
||||
mov esi,[g_l]
|
||||
int 0x40
|
||||
|
||||
cmp [g_1],1
|
||||
jne gadgets_no_1
|
||||
|
||||
mov eax,8
|
||||
mov ebx,[g_x]
|
||||
sub ebx,100
|
||||
shr ebx,1
|
||||
shl ebx,16
|
||||
add ebx,30*65536+40
|
||||
mov ecx,75*65536+16
|
||||
mov edx,3
|
||||
mov esi,0x446688
|
||||
int 0x40
|
||||
|
||||
mov eax,4
|
||||
mov ebx,[g_x]
|
||||
sub ebx,100
|
||||
shr ebx,1
|
||||
shl ebx,16
|
||||
add ebx,31*65536+80
|
||||
mov ecx,0x10ffffff
|
||||
mov edx,alert_t2
|
||||
mov esi,alert_t2len-alert_t2
|
||||
int 0x40
|
||||
|
||||
gadgets_no_1:
|
||||
|
||||
cmp [g_1],2
|
||||
jne gadgets_no_2
|
||||
|
||||
mov eax,8
|
||||
mov ebx,[g_x]
|
||||
sub ebx,100
|
||||
shr ebx,1
|
||||
shl ebx,16
|
||||
add ebx,0*65536+40
|
||||
mov ecx,75*65536+16
|
||||
mov edx,1
|
||||
mov esi,0x446688
|
||||
int 0x40
|
||||
|
||||
mov eax,8
|
||||
mov ebx,[g_x]
|
||||
sub ebx,100
|
||||
shr ebx,1
|
||||
shl ebx,16
|
||||
add ebx,57*65536+40
|
||||
mov ecx,75*65536+16
|
||||
mov edx,2
|
||||
mov esi,0x446688
|
||||
int 0x40
|
||||
|
||||
mov eax,4
|
||||
mov ebx,[g_x]
|
||||
sub ebx,100
|
||||
shr ebx,1
|
||||
shl ebx,16
|
||||
add ebx,1*65536+80
|
||||
mov ecx,0x10ffffff
|
||||
mov edx,alert_t1
|
||||
mov esi,alert_t1len-alert_t1
|
||||
int 0x40
|
||||
|
||||
gadgets_no_2:
|
||||
|
||||
no_win_1:
|
||||
|
||||
mov eax,12 ; function 12:tell os about windowdraw
|
||||
mov ebx,2 ; 2, end of draw
|
||||
int 0x40
|
||||
|
||||
ret
|
||||
|
||||
|
||||
; DATA AREA
|
||||
|
||||
|
||||
alert_t1:
|
||||
db ' No Yes'
|
||||
alert_t1len:
|
||||
|
||||
|
||||
alert_t2:
|
||||
db ' OK'
|
||||
alert_t2len:
|
||||
|
||||
|
||||
alert_labelt1:
|
||||
db 'ALERT'
|
||||
alert_label1len:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,266 @@
|
||||
; new application structure
|
||||
macro meos_app_start
|
||||
{
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01'
|
||||
dd 0x01
|
||||
dd __start
|
||||
dd __end
|
||||
dd __memory
|
||||
dd __stack
|
||||
|
||||
if used __params & ~defined __params
|
||||
dd __params
|
||||
else
|
||||
dd 0x0
|
||||
end if
|
||||
|
||||
dd 0x0
|
||||
}
|
||||
MEOS_APP_START fix meos_app_start
|
||||
|
||||
macro code
|
||||
{
|
||||
__start:
|
||||
}
|
||||
CODE fix code
|
||||
|
||||
macro data
|
||||
{
|
||||
__data:
|
||||
}
|
||||
DATA fix data
|
||||
|
||||
macro udata
|
||||
{
|
||||
if used __params & ~defined __params
|
||||
__params:
|
||||
db 0
|
||||
__end:
|
||||
rb 255
|
||||
else
|
||||
__end:
|
||||
end if
|
||||
__udata:
|
||||
}
|
||||
UDATA fix udata
|
||||
|
||||
macro meos_app_end
|
||||
{
|
||||
align 32
|
||||
rb 2048
|
||||
__stack:
|
||||
__memory:
|
||||
}
|
||||
MEOS_APP_END fix meos_app_end
|
||||
|
||||
|
||||
; macro for defining multiline text data
|
||||
struc mstr [sstring]
|
||||
{
|
||||
forward
|
||||
local ssize
|
||||
virtual at 0
|
||||
db sstring
|
||||
ssize = $
|
||||
end virtual
|
||||
dd ssize
|
||||
db sstring
|
||||
common
|
||||
dd -1
|
||||
}
|
||||
|
||||
|
||||
; strings
|
||||
macro sz name,[data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
if used name
|
||||
label name
|
||||
end if
|
||||
forward
|
||||
if used name
|
||||
db data
|
||||
end if
|
||||
common
|
||||
if used name
|
||||
.size = $-name
|
||||
end if
|
||||
}
|
||||
|
||||
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
if used name
|
||||
label name
|
||||
end if
|
||||
forward
|
||||
if (used name)&(lang eq lng)
|
||||
db data
|
||||
end if
|
||||
common
|
||||
if used name
|
||||
.size = $-name
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
|
||||
; easy system call macro
|
||||
macro mpack dest, hsrc, lsrc
|
||||
{
|
||||
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
||||
mov dest, (hsrc) shl 16 + lsrc
|
||||
else
|
||||
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
||||
mov dest, (hsrc) shl 16
|
||||
add dest, lsrc
|
||||
else
|
||||
mov dest, hsrc
|
||||
shl dest, 16
|
||||
add dest, lsrc
|
||||
end if
|
||||
end if
|
||||
}
|
||||
|
||||
macro __mov reg,a { ; mike.dld
|
||||
if ~a eq
|
||||
mov reg,a
|
||||
end if
|
||||
}
|
||||
|
||||
macro mcall a,b,c,d,e,f { ; mike.dld
|
||||
__mov eax,a
|
||||
__mov ebx,b
|
||||
__mov ecx,c
|
||||
__mov edx,d
|
||||
__mov esi,e
|
||||
__mov edi,f
|
||||
int 0x40
|
||||
}
|
||||
|
||||
|
||||
|
||||
; language for programs
|
||||
lang fix ru ; ru en fr ge fi
|
||||
|
||||
|
||||
|
||||
; optimize the code for size
|
||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||
|
||||
macro add arg1,arg2
|
||||
{
|
||||
if (arg2 eqtype 0)
|
||||
if (arg2) = 1
|
||||
inc arg1
|
||||
else
|
||||
add arg1,arg2
|
||||
end if
|
||||
else
|
||||
add arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
macro sub arg1,arg2
|
||||
{
|
||||
if (arg2 eqtype 0)
|
||||
if (arg2) = 1
|
||||
dec arg1
|
||||
else
|
||||
sub arg1,arg2
|
||||
end if
|
||||
else
|
||||
sub arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
macro mov arg1,arg2
|
||||
{
|
||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
||||
if (arg2) = 0
|
||||
xor arg1,arg1
|
||||
else if (arg2) = 1
|
||||
xor arg1,arg1
|
||||
inc arg1
|
||||
else if (arg2) = -1
|
||||
or arg1,-1
|
||||
else if (arg2) > -128 & (arg2) < 128
|
||||
push arg2
|
||||
pop arg1
|
||||
else
|
||||
mov arg1,arg2
|
||||
end if
|
||||
else
|
||||
mov arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
macro struct name
|
||||
{
|
||||
virtual at 0
|
||||
name name
|
||||
sizeof.#name = $ - name
|
||||
end virtual
|
||||
}
|
||||
|
||||
; structures used in MeOS
|
||||
struc process_information
|
||||
{
|
||||
.cpu_usage dd ? ; +0
|
||||
.window_stack_position dw ? ; +4
|
||||
.window_stack_value dw ? ; +6
|
||||
.not_used1 dw ? ; +8
|
||||
.process_name rb 12 ; +10
|
||||
.memory_start dd ? ; +22
|
||||
.used_memory dd ? ; +26
|
||||
.PID dd ? ; +30
|
||||
.x_start dd ? ; +34
|
||||
.y_start dd ? ; +38
|
||||
.x_size dd ? ; +42
|
||||
.y_size dd ? ; +46
|
||||
.slot_state dw ? ; +50
|
||||
rb (1024-52)
|
||||
}
|
||||
struct process_information
|
||||
|
||||
struc system_colors
|
||||
{
|
||||
.frame dd ?
|
||||
.grab dd ?
|
||||
.grab_button dd ?
|
||||
.grab_button_text dd ?
|
||||
.grab_text dd ?
|
||||
.work dd ?
|
||||
.work_button dd ?
|
||||
.work_button_text dd ?
|
||||
.work_text dd ?
|
||||
.work_graph dd ?
|
||||
}
|
||||
struct system_colors
|
||||
|
||||
|
||||
; constants
|
||||
|
||||
; events
|
||||
EV_IDLE = 0
|
||||
EV_TIMER = 0
|
||||
EV_REDRAW = 1
|
||||
EV_KEY = 2
|
||||
EV_BUTTON = 3
|
||||
EV_EXIT = 4
|
||||
EV_BACKGROUND = 5
|
||||
EV_MOUSE = 6
|
||||
EV_IPC = 7
|
||||
EV_STACK = 8
|
||||
|
||||
; event mask bits for function 40
|
||||
EVM_REDRAW = 1b
|
||||
EVM_KEY = 10b
|
||||
EVM_BUTTON = 100b
|
||||
EVM_EXIT = 1000b
|
||||
EVM_BACKGROUND = 10000b
|
||||
EVM_MOUSE = 100000b
|
||||
EVM_IPC = 1000000b
|
||||
EVM_STACK = 10000000b
|
||||
@@ -0,0 +1,440 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;
|
||||
;; Scroll.inc ;
|
||||
;; ;
|
||||
;; Vertical Scroll Bar Example for MenuetOS ;
|
||||
;; ;
|
||||
;; Version 0.2 27 February 2005 ;
|
||||
;; ;
|
||||
;; ;
|
||||
;; GNU GENERAL PUBLIC LICENSE ;
|
||||
;; Version 2, June 1991 ;
|
||||
;; ;
|
||||
;; Copyright 2005 Jason Delozier, ;
|
||||
;; cordata51@hotmail.com ;
|
||||
;; ;
|
||||
;; See file COPYING for details ;
|
||||
;; ;
|
||||
;; Updates: ;
|
||||
;; - FPU not longer used for calculations -Feb 27, 2005 ;
|
||||
;; ;
|
||||
;; ;
|
||||
;; TODO: ;
|
||||
;; - Create Message Handler and only allow runtime arguments ;
|
||||
;; to be processed through the message handler ;
|
||||
;; - Remove all local varibles and only allow working varible to ;
|
||||
;; reside in scroll bar structure. ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;*****************************************************************************
|
||||
;*
|
||||
;* VScroll Structure Equates
|
||||
;*
|
||||
;*****************************************************************************
|
||||
|
||||
VScroll_width equ 0
|
||||
VScroll_x equ 2
|
||||
VScroll_height equ 4
|
||||
VScroll_y equ 6
|
||||
VScroll_min equ 8
|
||||
VScroll_max equ 12
|
||||
VScroll_current equ 16
|
||||
VScroll_s_change equ 20
|
||||
VScroll_b_change equ 24
|
||||
|
||||
;Example VScroll Structure
|
||||
;VScroll_1:
|
||||
; dw 16 ;width +0
|
||||
; dw 100 ;x +2
|
||||
; dw 200 ;height +4
|
||||
; dw 40 ;y +6
|
||||
; dd 0 ;min +8
|
||||
; dd 1000;max +12
|
||||
; dd 1 ;current +16
|
||||
; dd 1 ;small change +20
|
||||
; dd 10 ;big change +24
|
||||
|
||||
VScroll_Min_Height dw 16 ;scroll box
|
||||
Vscroll_Fixed_Height dw 16 ;height of scroll buttons (up and down)
|
||||
|
||||
;**************************************
|
||||
;*
|
||||
;* Mouse Over VScroll
|
||||
;*
|
||||
;**************************************
|
||||
vsm1 dd 0
|
||||
vstoff dd 0
|
||||
|
||||
VScroll_mouse_over:
|
||||
cmp [mouseb], 1
|
||||
je VScroll_Mouse_Has_Mouse
|
||||
cmp [mouseb], 0
|
||||
jne VScroll_mouse_over_done2
|
||||
mov [vsm1], 0
|
||||
jmp VScroll_mouse_over_done2
|
||||
VScroll_Mouse_Has_Mouse:
|
||||
push ecx
|
||||
mov ecx, [vsm1]
|
||||
shl ecx,2
|
||||
call dword [VScroll_Mouse_Jumptable+ecx]
|
||||
VScroll_mouse_over_done:
|
||||
pop ecx
|
||||
VScroll_mouse_over_done2:
|
||||
ret
|
||||
|
||||
VScroll_Mouse_Jumptable:
|
||||
dd VScroll_Mouse_Find
|
||||
dd VScroll_Mouse_On_Up
|
||||
dd VScroll_Mouse_On_Down
|
||||
dd VScroll_Mouse_Above_Thumb
|
||||
dd VScroll_Mouse_Below_Thumb
|
||||
dd VScroll_Mouse_On_Thumb
|
||||
|
||||
VScroll_Mouse_Find:
|
||||
inc ecx
|
||||
call dword [VScroll_Mouse_Jumptable+ecx*4]
|
||||
cmp [vsm1], 0
|
||||
jne VScroll_mouse_over_done2
|
||||
cmp ecx, 5
|
||||
je VScroll_mouse_over_done2
|
||||
jmp VScroll_Mouse_Find
|
||||
|
||||
|
||||
;**************************************
|
||||
;Is Mouse at Up button
|
||||
VScroll_Mouse_On_Up:
|
||||
push eax
|
||||
movzx eax, word [ebp+VScroll_y]
|
||||
add ax, word [Vscroll_Fixed_Height]
|
||||
cmp [mousey], ax
|
||||
pop eax
|
||||
ja VScroll_Mouse_On_Up2
|
||||
mov [vsm1], 1
|
||||
call VScroll_Small_Up
|
||||
VScroll_Mouse_On_Up2:
|
||||
ret
|
||||
|
||||
;**************************************
|
||||
;Is Mouse at Down button
|
||||
VScroll_Mouse_On_Down:
|
||||
push eax
|
||||
movzx eax,word [ebp+VScroll_y]
|
||||
add ax, word [ebp+VScroll_height]
|
||||
sub ax, word [Vscroll_Fixed_Height]
|
||||
cmp [mousey], ax
|
||||
pop eax
|
||||
jb VScroll_Mouse_On_Down2
|
||||
mov [vsm1], 2
|
||||
call VScroll_Small_Down
|
||||
VScroll_Mouse_On_Down2:
|
||||
ret
|
||||
|
||||
;**************************************
|
||||
;Is Mouse above Scroll Thumb
|
||||
VScroll_Mouse_Above_Thumb:
|
||||
push eax
|
||||
push ecx
|
||||
push edx
|
||||
call Vscroll_SBox_Area
|
||||
add cx, word [ebp+VScroll_y]
|
||||
add cx, word [Vscroll_Fixed_Height] ;plus height of scroll button
|
||||
cmp cx, [mousey]
|
||||
pop edx
|
||||
pop ecx
|
||||
pop eax
|
||||
jb VScroll_Mouse_Above_Thumb2
|
||||
mov [vsm1], 3
|
||||
call VScroll_Big_Up
|
||||
VScroll_Mouse_Above_Thumb2:
|
||||
ret
|
||||
|
||||
;**************************************
|
||||
;Is Mouse below scroll thumb
|
||||
VScroll_Mouse_Below_Thumb:
|
||||
push eax
|
||||
push ecx
|
||||
push edx
|
||||
call Vscroll_SBox_Area
|
||||
add cx, word [ebp+VScroll_y]
|
||||
add cx, word [Vscroll_Fixed_Height] ;plus height of scroll button
|
||||
add cx, ax
|
||||
cmp cx, [mousey]
|
||||
pop edx
|
||||
pop ecx
|
||||
pop eax
|
||||
ja VScroll_Mouse_Below_Thumb2
|
||||
mov [vsm1], 4
|
||||
call VScroll_Big_Down
|
||||
VScroll_Mouse_Below_Thumb2:
|
||||
ret
|
||||
|
||||
;**************************************
|
||||
;Mouse is on Scroll Thumb
|
||||
VScroll_Mouse_On_Thumb:
|
||||
|
||||
pusha
|
||||
cmp [vsm1], 5 ;first time moving since we clicked?
|
||||
je VScroll_Mouse_On_Thumb1 ;if not jump.. we already have offset
|
||||
mov [vsm1], 5 ;determine offset between mouse pointer and top of thumb
|
||||
call Vscroll_SBox_Area ;get top of thumb coordinate
|
||||
add cx, word [ebp+VScroll_y] ;make screen coordinate
|
||||
add cx, word [Vscroll_Fixed_Height] ;plus height of scroll button and top
|
||||
movzx esi,word [mousey] ;get mouse position
|
||||
sub esi, ecx ;make offset between top of thumb
|
||||
mov [vstoff], esi ;and mouse pointer then save it
|
||||
VScroll_Mouse_On_Thumb1: ;
|
||||
movzx esi, [mousey] ;get mouse y value
|
||||
sub si, word [ebp+VScroll_y] ;get y starting value of scroll bar
|
||||
sub si, [Vscroll_Fixed_Height]
|
||||
sub esi, [vstoff] ;
|
||||
call Vscroll_SBox_Area ;
|
||||
VScroll_Mouse_On_Thumb2: ;
|
||||
cmp [ebp+VScroll_current], edx ;only redraw if change occured
|
||||
je VScroll_Mouse_On_Thumb3 ;
|
||||
mov [ebp+VScroll_current], edx ;new current value
|
||||
call drawvscrolla ;redraw scroll background and thumb
|
||||
VScroll_Mouse_On_Thumb3: ;
|
||||
popa ;
|
||||
ret
|
||||
;**************************************
|
||||
|
||||
|
||||
|
||||
|
||||
;*****************************************************************************
|
||||
;*
|
||||
;* Vscroll_SBox_Area
|
||||
;*
|
||||
;* Purpose: To determine the area of the Scroll Bar Thumb and the current
|
||||
;* value of scroll based on top pixel of thumb.
|
||||
;*
|
||||
;* Inputs:
|
||||
;* EBP - Structure of scroll bar
|
||||
;* ESI - Top of Thumb - optional
|
||||
;*
|
||||
;* Outputs:
|
||||
;* EAX - Thumb Height
|
||||
;* ECX - Top of thumb
|
||||
;* EDX - Current Value based on top pixel of thumb. Valid when ESI
|
||||
;* is given as input.
|
||||
;*
|
||||
;* This procedure is divided up into 5 specific functions.
|
||||
;* 1. ((Vmax-VMin)/Small Change)= Total Changes
|
||||
;* 2. Height - (2* Fixed Button Height) = Total Pixels
|
||||
;* 3. Total Pixels - Total Changes = Thumb Height (must be >= 16)
|
||||
;* Minimum Height of 16 is varible [VScroll_Min_Height]
|
||||
;* 4. (((Tot Pixels - Thumb Height)* Current)/Max-min)=Top Pixel of Thumb
|
||||
;* 5. ((Mouse Top * (max-Min))/(Total Pix - Thumb Height)) = Current
|
||||
;* Step 5 is only valid if ESI is supplied as an input.
|
||||
;*
|
||||
;*
|
||||
;*****************************************************************************
|
||||
|
||||
Vscroll_SBox_Area:
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
;Step 1. Determine Total Changes
|
||||
mov eax, dword [ebp+VScroll_max] ;get max scroll
|
||||
sub eax, dword [ebp+VScroll_min] ;sub minmum scroll for total scro
|
||||
xor edx,edx
|
||||
push eax
|
||||
div dword [ebp+VScroll_s_change] ;
|
||||
;eax = total changes ((max-min)/Small Change)
|
||||
|
||||
;Step 2. Determine Total Pixels
|
||||
movzx ecx, word [ebp+VScroll_height] ;height of entire scroll bar
|
||||
mov bx, word [Vscroll_Fixed_Height] ;minus height of both scroll button
|
||||
shl bx, 1
|
||||
sub cx, bx
|
||||
push ecx
|
||||
;ecx = total pixels (Total Height - (2*Fixed Button Height)
|
||||
|
||||
;Step 3. Determine Thumb Height
|
||||
cmp ecx, eax
|
||||
jbe vs1
|
||||
sub ecx, eax
|
||||
cmp cx, word [VScroll_Min_Height]
|
||||
jb vs1
|
||||
jmp vs2
|
||||
vs1:
|
||||
movzx ecx, word [VScroll_Min_Height]
|
||||
vs2:
|
||||
;ecx = Thumb Height (Total Pixels - Total Changes) >=16
|
||||
|
||||
;Step 4. Determine Top Pixel of Thumb
|
||||
pop edi ;Total Pixels
|
||||
sub edi, ecx ;
|
||||
;edi = Total Pixels - thumb Height
|
||||
mov eax, edi ;
|
||||
mul dword [ebp+VScroll_current] ;get current scroll value
|
||||
pop ebx ;max scroll
|
||||
push ecx ;
|
||||
div ebx ;
|
||||
mov ecx, eax ;
|
||||
;ecx = top pixel of thumb
|
||||
|
||||
;Step 5. Determine Current Value based on Mouse Position
|
||||
cmp si,0
|
||||
jge vss4
|
||||
mov eax, dword [ebp+VScroll_min]
|
||||
jmp vsdone1
|
||||
vss4:
|
||||
cmp esi, edi
|
||||
jbe vss3
|
||||
mov eax, dword [ebp+VScroll_max]
|
||||
jmp vsdone1
|
||||
vss3:
|
||||
mov eax,ebx ;max scroll
|
||||
mul esi ;Top Pixel of mouse
|
||||
div edi ;Total Pixels - Thumb Height
|
||||
;eax = Current Value
|
||||
|
||||
vsdone1:
|
||||
mov edx, eax ;Current Value
|
||||
pop eax ;Thumb Height
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
;*****************************************************************************
|
||||
;*
|
||||
;*****************************************************************************
|
||||
;ebp is structure
|
||||
drawvscroll:
|
||||
pusha
|
||||
;up button
|
||||
mov eax, 13 ;button system function
|
||||
mov edx,0x00777777 ;0x6677cc ;color
|
||||
mov ebx, [ebp+VScroll_width] ;x-start/width
|
||||
mov cx, word [ebp+VScroll_y] ;get bottom of scroll bar
|
||||
shl ecx, 16
|
||||
mov cx, [Vscroll_Fixed_Height] ;fixed height
|
||||
int 0x40
|
||||
|
||||
;down button
|
||||
mov ebx, [ebp+VScroll_width] ;x-start/width
|
||||
mov cx, word [ebp+VScroll_y] ;get bottom of scroll bar
|
||||
add cx, word [ebp+VScroll_height] ;
|
||||
sub cx, [Vscroll_Fixed_Height] ;y-start is 12 pixel from bottom
|
||||
shl ecx, 16 ;
|
||||
mov cx, [Vscroll_Fixed_Height] ;fixed height
|
||||
int 0x40
|
||||
;------- 'ASCL.INC' needs to be included to use this --
|
||||
putlabel 493,46,'',cl_Black
|
||||
putlabel 493,372,'',cl_Black
|
||||
;------------------------------------------------------
|
||||
|
||||
popa
|
||||
drawvscrolla:
|
||||
pusha
|
||||
|
||||
mov eax, 13 ;Draw Scroll Box Background
|
||||
mov edx, 0x00999999;0 ;color
|
||||
push edx
|
||||
movzx edx, word [Vscroll_Fixed_Height]
|
||||
mov ebx, [ebp+VScroll_width] ;x-start/width
|
||||
movzx ecx,word [ebp+VScroll_y] ;y-start
|
||||
add ecx, edx ;add fixed height button
|
||||
shl ecx, 16 ;do height next
|
||||
mov cx,word [ebp+VScroll_height] ;y-start
|
||||
sub cx, dx ;subtract fixed height of up button
|
||||
sub cx, dx ;subtract fixed height of down button
|
||||
pop edx
|
||||
int 0x40 ;tell system to draw it
|
||||
|
||||
;determine height of scroll box (thumb)
|
||||
|
||||
call Vscroll_SBox_Area
|
||||
add cx, [ebp+VScroll_y]
|
||||
add cx, 16
|
||||
shl ecx, 16
|
||||
mov cx, ax
|
||||
|
||||
mov eax, 13 ;draw scroll box
|
||||
mov ebx, [ebp+VScroll_width] ;x-start/width
|
||||
mov edx, 0x00bbbbbb ;0x999999
|
||||
int 0x40
|
||||
;call Draw_Scroll_info
|
||||
popa
|
||||
ret
|
||||
;*****************************************************************************
|
||||
|
||||
;*****************************************************************************
|
||||
;* VScroll_Big_Up
|
||||
;* VScroll_Small_Up
|
||||
;*****************************************************************************
|
||||
;need to update for signed values
|
||||
VScroll_Big_Up:
|
||||
push eax
|
||||
push ebx
|
||||
mov eax, dword [ebp+VScroll_b_change]
|
||||
jmp VScroll_Up
|
||||
VScroll_Small_Up:
|
||||
push eax
|
||||
push ebx
|
||||
mov eax, dword [ebp+VScroll_s_change]
|
||||
VScroll_Up:
|
||||
mov ebx, dword [ebp+VScroll_min] ;get minimum value
|
||||
cmp [ebp+VScroll_current], ebx ;are we at minimum already?
|
||||
je VScroll_Up_exit ;if so leave
|
||||
sub [ebp+VScroll_current], eax ;
|
||||
jnc VScroll_Up_done
|
||||
mov [ebp+VScroll_current], ebx
|
||||
VScroll_Up_done:
|
||||
cmp [ebp+VScroll_current], ebx ;if current is greater then max
|
||||
jae VScroll_Up_done2
|
||||
mov [ebp+VScroll_current], ebx
|
||||
VScroll_Up_done2:
|
||||
;redraw
|
||||
call drawvscroll ;temp?
|
||||
VScroll_Up_exit:
|
||||
pop ebx
|
||||
pop eax
|
||||
|
||||
ret
|
||||
;*****************************************************************************
|
||||
|
||||
|
||||
;*****************************************************************************
|
||||
;* VScroll_Big_Down
|
||||
;* VScroll_Small_Down
|
||||
;*****************************************************************************
|
||||
;need to update for signed values
|
||||
VScroll_Big_Down:
|
||||
push eax
|
||||
push ebx
|
||||
mov eax, dword [ebp+VScroll_b_change];get big change value
|
||||
jmp VScroll_Down
|
||||
VScroll_Small_Down:
|
||||
push eax
|
||||
push ebx
|
||||
mov eax, dword [ebp+VScroll_s_change];get small change value
|
||||
VScroll_Down:
|
||||
mov ebx, dword [ebp+VScroll_max] ;get maximum scroll value
|
||||
cmp [ebp+VScroll_current], ebx ;are we at max already?
|
||||
je VScroll_Down_exit ;if so leave
|
||||
add [ebp+VScroll_current], eax ;add change to current
|
||||
jno VScroll_Down_done ;dont go beyond bounds of register
|
||||
mov [ebp+VScroll_current], ebx ;if we did then we at max
|
||||
VScroll_Down_done: ;
|
||||
cmp [ebp+VScroll_current], ebx ;if current is greater then max
|
||||
jbe VScroll_Down_done2 ;
|
||||
mov [ebp+VScroll_current], ebx ;then we at max
|
||||
VScroll_Down_done2: ;
|
||||
;redraw
|
||||
call drawvscroll ;temp?
|
||||
VScroll_Down_exit:
|
||||
pop ebx
|
||||
pop eax
|
||||
ret
|
||||
;*****************************************************************************
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user