All: Update locale codes (Part 2) (#76)

- Update language codes and add comments.
- Correct `en_US` translations.
- Some whitespace clean-up (mainly EOL sanitation).

Reviewed-on: #76
Co-authored-by: Andrew <dent.ace@gmail.com>
Co-committed-by: Andrew <dent.ace@gmail.com>
This commit was merged in pull request #76.
This commit is contained in:
2024-06-14 10:35:46 +02:00
committed by Andrew
parent c0324e5907
commit f222e98a09
93 changed files with 61410 additions and 60666 deletions
+295 -294
View File
@@ -1,294 +1,295 @@
;---------------------------------------------------------------------
; Screen Ruler v1.0
; Version for KolibriOS 2005-2023
;---------------------------------------------------------------------
; last update: 11.09.2023
; created by: Subbotin Anton aka Spaceraven
;---------------------------------------------------------------------
use32
org 0x0
db 'MENUET01'; 8 byte id
dd 1 ; header version
dd START ; program start
dd I_END ; program image size
dd 0x1000 ; required amount of memory
dd 0x1000 ; esp
dd 0, 0 ; no parameters, no path
;---------------------------------------------------------------------
include 'lang.inc'
include '..\..\macros.inc'
delay = 20
magnify_width = 48
magnify_height = 30
magnify_halfwidth = magnify_width / 2
magnify_halfheight = magnify_height / 2
aim0 = (magnify_halfheight - 1) * 65536 + magnify_halfwidth - 1
aim1 = (magnify_halfheight - 1) * 65536 + magnify_halfwidth + 1
aim2 = (magnify_halfheight + 1) * 65536 + magnify_halfwidth - 1
aim3 = (magnify_halfheight + 1) * 65536 + magnify_halfwidth + 1
;------------------------- Main cycle
START:
redraw:
call draw_window
still:
call draw_magnify
wtevent:
mcall 23, delay ; wait here for event with timeout
dec eax
js still
jz redraw
dec eax
jnz button
; key in buffer
mov eax, 2
mcall
cmp ah, 32
jnz wtevent
mov eax, [mouse_x]
mov [pix1_x], eax
mov eax, [mouse_y]
mov [pix1_y], eax
jmp wtevent
;---------------------------------------------------------------------
button:
; we have only one button, close
or eax, -1
mcall
;------------------------- Window draw
draw_window:
mcall 12, 1
mov al, 48 ; function 48 : graphics parameters
mov bl, 4 ; subfunction 4 : get skin height
mcall
; DRAW WINDOW
mov ebx, 100*65536 + 4*magnify_width + 9
lea ecx, [eax + 100*65536 + 4*magnify_height + 128]
mov edx, 0x34000000 ; color of work area RRGGBB
mov edi, labelt ; header
xor eax, eax ; function 0 : define and draw window
mcall
mcall 71, 1, labelt
mcall 12,2
ret
;------------------------- Magnify draw
draw_magnify:
mcall 9, procinfo, -1
mov eax, [procinfo+70] ;status of window
test eax,100b
jne .end
mcall 14 ; get screen size
movzx ecx, ax
inc ecx
mov [screen_size_y], ecx
shr eax, 16
inc eax
mov [screen_size_x], eax
xor ebx, ebx
mcall 37 ; get mouse coordinates
mov ecx, eax
shr ecx, 16 ; ecx = x
movzx edx, ax ; edx = y
mov [mouse_x], ecx
mov [mouse_y], edx
add ecx, magnify_halfwidth
add edx, magnify_halfheight
mov [magnify_area_end_x], ecx
mov [magnify_area_end_y], edx
sub ecx, magnify_width
sub edx, magnify_height
mov [magnify_area_start_x], ecx
mov [magnify_area_start_y], edx
.loop_y:
.loop_x:
xor eax, eax ; assume black color for invalid pixels
test ecx, ecx
js .nopix
cmp ecx, [screen_size_x]
jge .nopix
test edx, edx
js .nopix
cmp edx, [screen_size_y]
jge .nopix
mov ebx, edx
sub ebx, [magnify_area_start_y]
shl ebx, 16
mov bx, cx
sub ebx, [magnify_area_start_x]
cmp ebx, aim0
jz .nopix
cmp ebx, aim1
jz .nopix
cmp ebx, aim2
jz .nopix
cmp ebx, aim3
jz .nopix
mov ebx, edx
imul ebx, [screen_size_x]
add ebx, ecx
mcall 35 ; read pixel
.nopix:
push ecx edx
sub ecx, [magnify_area_start_x]
sub edx, [magnify_area_start_y]
mov ebx, ecx
shl ebx, 2+16
mov bl, 4
mov ecx, edx
shl ecx, 2+16
mov cl, 4
mov edx, eax
mcall 13 ; draw rectangle 8x8
pop edx ecx
inc ecx
cmp ecx, [magnify_area_end_x]
jnz .loop_x
mov ecx, [magnify_area_start_x]
inc edx
cmp edx, [magnify_area_end_y]
jnz .loop_y
;------------------------- Measure labels draw
mov eax, 4
mov ebx, 8*65536 + 124
mov ecx, 11110000111100001111000011110000b
mov edx, start_pix
xor edi, edi
mcall 4
add ebx, 20
mov edx, end_pix
mcall 4
add ebx, 20
mov edx, measure_x
mcall 4
add ebx, 20
mov edx, measure_y
mcall 4
add ebx, 20
mov edx, measure_d
mcall 4
add ebx, 20
mov edx, inf
mcall 4
mov ebx, 0x80040000
mov ecx, [mouse_x]
mov edx, 12*8*65536 + 144
mov esi, 0x50FFFFFF
xor edi, edi
mcall 47
sub ecx, [pix1_x]
jns .sign1
neg ecx
.sign1:
mov edx, 14*8*65536 + 164
mov [dist_x], ecx
mcall 47
mov ecx, [mouse_y]
mov edx, 18*8*65536 + 144
mcall 47
sub ecx, [pix1_y]
jns .sign2
neg ecx
.sign2:
mov [dist_y], ecx
mov edx, 14*8*65536 + 184
mcall 47
mov ecx, [pix1_y]
mov edx, 18*8*65536 + 124
mcall 47
mov ecx, [pix1_x]
mov edx, 12*8*65536 + 124
mcall 47
mov eax, [dist_x]
mov ebx, eax
mul bx
mov cx, dx
shl ecx, 16
mov cx, ax
mov eax, [dist_y]
mov ebx, eax
mul bx
mov si, dx
shl esi, 16
mov si, ax
add ecx, esi
mov [diag_l], ecx
finit
fild [diag_l]
fsqrt
fistp [diag_l]
mov ebx, 0x80040000
mov ecx, [diag_l]
mov edx, 12*8*65536 + 204
mov esi, 0x50FFFFFF
xor edi, edi
mcall 47
.end:
ret
;------------------------- Data area
if lang eq ru_RU
labelt:
db 3, 'Измеритель', 0
start_pix:
db 'Пиксель 1 ( , )', 0
end_pix:
db 'Пиксель 2 ( , )', 0
measure_x:
db 'Дистанция x ( )', 0
measure_y:
db 'Дистанция y ( )', 0
measure_d:
db 'Диагональ ( )', 0
inf:
db 'Нажмите пробел', 0
else
labelt:
db 3, 'Ruler', 0
start_pix:
db 'Pixel 1 ( , )', 0
end_pix:
db 'Pixel 2 ( , )', 0
measure_x:
db 'Distance x ( )', 0
measure_y:
db 'Distance y ( )', 0
measure_d:
db 'Diagonal ( )', 0
inf:
db 'Press Space', 0
end if
I_END:
align 4
magnify_area_start_x dd ?
magnify_area_start_y dd ?
magnify_area_end_x dd ?
magnify_area_end_y dd ?
screen_size_x dd ?
screen_size_y dd ?
mouse_x dd ?
mouse_y dd ?
pix1_x dd 0
pix1_y dd 0
dist_x dd 0
dist_y dd 0
diag_l dd 0
;---------------------------------------------------------------------
procinfo:
rb 1024
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; Screen Ruler v1.0
; Version for KolibriOS 2005-2023
;---------------------------------------------------------------------
; last update: 11.09.2023
; created by: Subbotin Anton aka Spaceraven
;---------------------------------------------------------------------
use32
org 0x0
db 'MENUET01'; 8 byte id
dd 1 ; header version
dd START ; program start
dd I_END ; program image size
dd 0x1000 ; required amount of memory
dd 0x1000 ; esp
dd 0, 0 ; no parameters, no path
;---------------------------------------------------------------------
include 'lang.inc' ; Language support for locales: ru_RU (UTF-8), en_US.
include '..\..\macros.inc'
delay = 20
magnify_width = 48
magnify_height = 30
magnify_halfwidth = magnify_width / 2
magnify_halfheight = magnify_height / 2
aim0 = (magnify_halfheight - 1) * 65536 + magnify_halfwidth - 1
aim1 = (magnify_halfheight - 1) * 65536 + magnify_halfwidth + 1
aim2 = (magnify_halfheight + 1) * 65536 + magnify_halfwidth - 1
aim3 = (magnify_halfheight + 1) * 65536 + magnify_halfwidth + 1
;------------------------- Main cycle
START:
redraw:
call draw_window
still:
call draw_magnify
wtevent:
mcall 23, delay ; wait here for event with timeout
dec eax
js still
jz redraw
dec eax
jnz button
; key in buffer
mov eax, 2
mcall
cmp ah, 32
jnz wtevent
mov eax, [mouse_x]
mov [pix1_x], eax
mov eax, [mouse_y]
mov [pix1_y], eax
jmp wtevent
;---------------------------------------------------------------------
button:
; we have only one button, close
or eax, -1
mcall
;------------------------- Window draw
draw_window:
mcall 12, 1
mov al, 48 ; function 48 : graphics parameters
mov bl, 4 ; subfunction 4 : get skin height
mcall
; DRAW WINDOW
mov ebx, 100*65536 + 4*magnify_width + 9
lea ecx, [eax + 100*65536 + 4*magnify_height + 128]
mov edx, 0x34000000 ; color of work area RRGGBB
mov edi, labelt ; header
xor eax, eax ; function 0 : define and draw window
mcall
mcall 71, 1, labelt
mcall 12,2
ret
;------------------------- Magnify draw
draw_magnify:
mcall 9, procinfo, -1
mov eax, [procinfo+70] ;status of window
test eax,100b
jne .end
mcall 14 ; get screen size
movzx ecx, ax
inc ecx
mov [screen_size_y], ecx
shr eax, 16
inc eax
mov [screen_size_x], eax
xor ebx, ebx
mcall 37 ; get mouse coordinates
mov ecx, eax
shr ecx, 16 ; ecx = x
movzx edx, ax ; edx = y
mov [mouse_x], ecx
mov [mouse_y], edx
add ecx, magnify_halfwidth
add edx, magnify_halfheight
mov [magnify_area_end_x], ecx
mov [magnify_area_end_y], edx
sub ecx, magnify_width
sub edx, magnify_height
mov [magnify_area_start_x], ecx
mov [magnify_area_start_y], edx
.loop_y:
.loop_x:
xor eax, eax ; assume black color for invalid pixels
test ecx, ecx
js .nopix
cmp ecx, [screen_size_x]
jge .nopix
test edx, edx
js .nopix
cmp edx, [screen_size_y]
jge .nopix
mov ebx, edx
sub ebx, [magnify_area_start_y]
shl ebx, 16
mov bx, cx
sub ebx, [magnify_area_start_x]
cmp ebx, aim0
jz .nopix
cmp ebx, aim1
jz .nopix
cmp ebx, aim2
jz .nopix
cmp ebx, aim3
jz .nopix
mov ebx, edx
imul ebx, [screen_size_x]
add ebx, ecx
mcall 35 ; read pixel
.nopix:
push ecx edx
sub ecx, [magnify_area_start_x]
sub edx, [magnify_area_start_y]
mov ebx, ecx
shl ebx, 2+16
mov bl, 4
mov ecx, edx
shl ecx, 2+16
mov cl, 4
mov edx, eax
mcall 13 ; draw rectangle 8x8
pop edx ecx
inc ecx
cmp ecx, [magnify_area_end_x]
jnz .loop_x
mov ecx, [magnify_area_start_x]
inc edx
cmp edx, [magnify_area_end_y]
jnz .loop_y
;------------------------- Measure labels draw
mov eax, 4
mov ebx, 8*65536 + 124
mov ecx, 11110000111100001111000011110000b
mov edx, start_pix
xor edi, edi
mcall 4
add ebx, 20
mov edx, end_pix
mcall 4
add ebx, 20
mov edx, measure_x
mcall 4
add ebx, 20
mov edx, measure_y
mcall 4
add ebx, 20
mov edx, measure_d
mcall 4
add ebx, 20
mov edx, inf
mcall 4
mov ebx, 0x80040000
mov ecx, [mouse_x]
mov edx, 12*8*65536 + 144
mov esi, 0x50FFFFFF
xor edi, edi
mcall 47
sub ecx, [pix1_x]
jns .sign1
neg ecx
.sign1:
mov edx, 14*8*65536 + 164
mov [dist_x], ecx
mcall 47
mov ecx, [mouse_y]
mov edx, 18*8*65536 + 144
mcall 47
sub ecx, [pix1_y]
jns .sign2
neg ecx
.sign2:
mov [dist_y], ecx
mov edx, 14*8*65536 + 184
mcall 47
mov ecx, [pix1_y]
mov edx, 18*8*65536 + 124
mcall 47
mov ecx, [pix1_x]
mov edx, 12*8*65536 + 124
mcall 47
mov eax, [dist_x]
mov ebx, eax
mul bx
mov cx, dx
shl ecx, 16
mov cx, ax
mov eax, [dist_y]
mov ebx, eax
mul bx
mov si, dx
shl esi, 16
mov si, ax
add ecx, esi
mov [diag_l], ecx
finit
fild [diag_l]
fsqrt
fistp [diag_l]
mov ebx, 0x80040000
mov ecx, [diag_l]
mov edx, 12*8*65536 + 204
mov esi, 0x50FFFFFF
xor edi, edi
mcall 47
.end:
ret
;------------------------- Data area
if lang eq ru_RU
labelt:
db 3, 'Измеритель', 0
start_pix:
db 'Пиксель 1 ( , )', 0
end_pix:
db 'Пиксель 2 ( , )', 0
measure_x:
db 'Дистанция x ( )', 0
measure_y:
db 'Дистанция y ( )', 0
measure_d:
db 'Диагональ ( )', 0
inf:
db 'Нажмите пробел', 0
else ; Default to en_US
labelt:
db 3, 'Ruler', 0
start_pix:
db 'Pixel 1 ( , )', 0
end_pix:
db 'Pixel 2 ( , )', 0
measure_x:
db 'Distance x ( )', 0
measure_y:
db 'Distance y ( )', 0
measure_d:
db 'Diagonal ( )', 0
inf:
db 'Press Space', 0
end if
I_END:
align 4
magnify_area_start_x dd ?
magnify_area_start_y dd ?
magnify_area_end_x dd ?
magnify_area_end_y dd ?
screen_size_x dd ?
screen_size_y dd ?
mouse_x dd ?
mouse_y dd ?
pix1_x dd 0
pix1_y dd 0
dist_x dd 0
dist_y dd 0
diag_l dd 0
;---------------------------------------------------------------------
procinfo:
rb 1024
;---------------------------------------------------------------------
+5 -5
View File
@@ -19,7 +19,7 @@
dd 0x1000 ; esp
dd 0, 0 ; no parameters, no path
;---------------------------------------------------------------------
include 'lang.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '..\..\..\macros.inc'
delay equ 20
@@ -52,7 +52,7 @@ button:
;---------------------------------------------------------------------
draw_window:
mcall 12,1
mov al, 48 ; function 48 : graphics parameters
mov bl, 4 ; subfunction 4 : get skin height
mcall
@@ -63,7 +63,7 @@ draw_window:
mov edi, labelt ; header
xor eax, eax ; function 0 : define and draw window
mcall
mcall 12,2
ret
;---------------------------------------------------------------------
@@ -80,7 +80,7 @@ draw_magnify:
shr eax, 16
inc eax
mov [size_x], eax
xor ebx, ebx
mcall 37 ; get mouse coordinates
mov ecx, eax
@@ -137,7 +137,7 @@ draw_magnify:
if lang eq ru_RU
labelt:
db 'Magnifier - Экранная лупа', 0
else
else ; Default to en_US
labelt:
db 'Magnifier', 0
end if
+2 -2
View File
@@ -16,7 +16,7 @@ use32
dd 0x1000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
include 'lang.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '..\..\..\macros.inc'
START: ; start of execution
@@ -139,7 +139,7 @@ draw_window:
if lang eq ru_RU
title db 'ТАЙМЕР',0
else
else ; Default to en_US
title db 'TIMER',0
end if
@@ -1,5 +1,5 @@
@erase lang.inc
@echo lang fix fr >lang.inc
@echo lang fix fr_FR >lang.inc
@fasm template.asm template
@erase lang.inc
@pause
@pause
@@ -5,10 +5,10 @@
; last update: 1/03/2007
; written by: Ivan Poddubny
; e-mail: ivan-yar@bk.ru
;modified by: Heavyiron, maxcodehack
; modified by: Heavyiron, maxcodehack
; <--- include all KolibriOS stuff --->
include "lang.inc"
include "lang.inc" ; Language support for locales: ru_RU (CP866), fr_FR, en_US.
include "..\..\..\..\macros.inc"
@@ -62,7 +62,7 @@ CODE
xor eax, eax ; create and draw the window
mov ebx, 100*65536+200 ; (window_cx)*65536+(window_sx)
mov ecx, 100*65536+100 ; (window_cy)*65536+(window_sy)
mov edx, [sc.work] ; work area color
mov edx, [sc.work] ; work area color
or edx, 0x33000000 ; & window type 3
mov edi, title ; window title
int 0x40
@@ -80,7 +80,7 @@ if lang eq ru_RU
title db 'Шаблон программы',0
else if lang eq fr_FR
title db 'La programme poncive',0
else
else ; Default to en_US
title db 'Template program',0
end if
@@ -15,7 +15,7 @@
dd 0x2000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
include 'lang.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '..\..\..\..\macros.inc'
@@ -97,7 +97,7 @@ draw_window:
mov edi,title ; WINDOW LABEL
mcall
mov eax,8 ; NEW THREAD BUTTON
mov ebx,20*65536+128
mov ecx,63*65536+20
@@ -136,11 +136,11 @@ if lang eq ru_RU
db 'Память для всех потоков общая. '
db ' '
db ' СОЗДАТЬ НОВЫЙ ПОТОК '
db 'x' ; <- END MARKER, DONT DELETE
db 'x' ; <- END MARKER, DO NOT DELETE
title db 'Пример использования потоков',0
else
else ; Default to en_US
text:
db 'THIS EXAMPLE CREATES THREADS BY RUNNING '
db 'THE SAME CODE MULTIPLE TIMES. ALL WE '
@@ -149,7 +149,7 @@ else
db ' '
db ' '
db ' CREATE NEW THREAD '
db 'x' ; <- END MARKER, DONT DELETE
db 'x' ; <- END MARKER, DO NOT DELETE
title db 'THREAD EXAMPLE',0
+42 -43
View File
@@ -1,43 +1,42 @@
include 'lang.inc'
if lang eq ru_RU
text db ' ВхФайл:','ВыхФайл:',' Путь:'
.line_size = ($-text)/3
s_compile db 'Компил.'
s_run db ' Пуск '
s_debug db 'Отладка'
s_dbgdescr db 'Создавать отладочную информацию',0
sz_EPnotFound db 'Not found entry point to ',0
sizeof.sz_EPnotFound = $-sz_EPnotFound
sz_cantLL db 'Can not load library ',0
sizeof.sz_cantLL = $-sz_cantLL
sz_system_error db 'System error: ',0
sizeof.sz_system_error = $-sz_system_error
else
text db ' InFile:','OutFile:',' Path:'
.line_size = ($-text)/3
s_compile db 'COMPILE'
s_run db ' RUN '
s_debug db ' DEBUG '
s_dbgdescr db 'Generate debug information',0
sz_EPnotFound db 'Not found entry point to ',0
sizeof.sz_EPnotFound = $-sz_EPnotFound
sz_cantLL db 'Can not load library ',0
sizeof.sz_cantLL = $-sz_cantLL
sz_system_error db 'System error: ',0
sizeof.sz_system_error = $-sz_system_error
end if
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
if lang eq ru_RU
text db ' ВхФайл:','ВыхФайл:',' Путь:'
.line_size = ($-text)/3
s_compile db 'Компил.'
s_run db ' Пуск '
s_debug db 'Отладка'
s_dbgdescr db 'Создавать отладочную информацию',0
sz_EPnotFound db 'Not found entry point to ',0
sizeof.sz_EPnotFound = $-sz_EPnotFound
sz_cantLL db 'Cannot load library ',0
sizeof.sz_cantLL = $-sz_cantLL
sz_system_error db 'System error: ',0
sizeof.sz_system_error = $-sz_system_error
else ; Default to en_US
text db ' InFile:','OutFile:',' Path:'
.line_size = ($-text)/3
s_compile db 'COMPILE'
s_run db ' RUN '
s_debug db ' DEBUG '
s_dbgdescr db 'Generate debug information',0
sz_EPnotFound db 'Not found entry point to ',0
sizeof.sz_EPnotFound = $-sz_EPnotFound
sz_cantLL db 'Cannot load library ',0
sizeof.sz_cantLL = $-sz_cantLL
sz_system_error db 'System error: ',0
sizeof.sz_system_error = $-sz_system_error
end if
+4 -4
View File
@@ -22,7 +22,7 @@ include '../../../macros.inc' ;
include '../../../KOSfuncs.inc'
include '../../../load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
include 'lang.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
@use_library
@@ -170,7 +170,7 @@ draw_window:
;or esi, [sys_colors.grab_text]
mcall SF_CREATE_WINDOW, 200*65536+WIN_W, 200*65536+179, ,,title
mcall SF_DEFINE_BUTTON, 15*65536+42,106*65536+ 21, 2, [sys_colors.work_button] ; кнопка shl
mcall , 70*65536+42, , , ; кнопка sal
mcall , (WIN_W-55)*65536+42, , 3, ; кнопка shr
@@ -196,7 +196,7 @@ draw_window:
mcall SF_DRAW_NUMBER, 10*65536, ,(WIN_W-92)*65536+62, ; 10-ная со знаком
BIN_LINE_BLOCK_W = 76
mcall SF_DRAW_NUMBER, 8*65536+512,,(WIN_W-BIN_LINE_BLOCK_W)*65536+30 ; 2-ная
mcall SF_DRAW_NUMBER, 8*65536+512,,(WIN_W-BIN_LINE_BLOCK_W)*65536+30 ; 2-ная
ror ecx, 8
mov edx, (WIN_W-BIN_LINE_BLOCK_W*2)*65536+30
mcall
@@ -275,7 +275,7 @@ string1_end:
if lang eq ru_RU
numstr db 'Число:',0
Okstr db 'Ввод',0
else
else ; Default to en_US
numstr db 'Number:',0
Okstr db 'Enter',0
end if
+23 -23
View File
@@ -13,7 +13,7 @@
; Marat Zakiyanov aka Mario79, aka Mario
;--------------------------------------------------------------------
; v.014 05.02.2010
;
;
; PageUp, PageDown - страница вверх/вниз
; Ctrl+UP, Ctrl+Down - прокрутка страницы на строку вверх/вниз без смещения курсора
; Home,End - в начало/конец строки
@@ -59,9 +59,9 @@ use32
;--------------------------------------------------------------------
_title equ 'HeEd 0.16', 0
include 'lang.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '../../../KOSfuncs.inc'
include '../../../config.inc' ;for nightbuild
include '../../../config.inc' ; for nightbuild
include '../../../macros.inc'
include '../../libraries/box_lib/trunk/box_lib.mac'
include '../../../load_lib.mac'
@@ -108,25 +108,25 @@ load_libraries l_libs_start,end_l_libs
;OpenDialog initialisation
push dword OpenDialog_data
call [OpenDialog_Init]
;--------------------------------------------------------------------
;--------------------------------------------------------------------
mov esi,fname_buf
cmp [esi],byte 0
je .start_temp_file_name
cld
@@:
lodsb
test al,al
jne @b
std
@@:
lodsb
cmp al,'/'
cmp al,'/'
jne @b
add esi,2
jmp .selected_start_file_name
;--------------------------------------------------------------------
;--------------------------------------------------------------------
.start_temp_file_name:
mov esi,start_temp_file_name
.selected_start_file_name:
@@ -1068,7 +1068,7 @@ main_area:
mov ecx,edx
mov edx,frgrd_color
movzx ebx,[scroll_bar_data_vertical.x_pos]
mov ax,[scroll_bar_data_vertical.x_size]
test ax,ax
jnz .no_inc_ebx
@@ -1091,7 +1091,7 @@ main_area:
shl ebx,16
mov bx,ax
mov cx,16
mov ax,[scroll_bar_data_vertical.x_size]
test ax,ax
jnz .no_inc_ebx_2
@@ -1938,13 +1938,13 @@ draw_ed_box: ;
cmp al,1
jne .2
call draw_window
mov eax,[threath_buf+70]
test eax,10b
jnz .2
test eax,100b
jnz .2
call main_area
bt [flags],2
jnc @f
@@ -2805,7 +2805,7 @@ Ctrl_V:
mov [shblock_end],eax
jmp red
;--------------------------------------------------------------------
;если блок не выделен, то вставляем блок перед курсором
;если блок не выделен, то вставляем блок перед курсором
.past_kurs:
; bt [flags],1
; jnc still
@@ -2965,7 +2965,7 @@ menu_data_1:
.x1:
if lang eq ru_RU
.size_x1 dw 4*2+9*6 ;+32
else
else ; Default to en_US
.size_x1 dw 40 ;+32
end if
.start_x1 dw 2 ;+34
@@ -3000,7 +3000,7 @@ if lang eq ru_RU
db 'Открыть',0
db 'Сохранить',0
db 'Выход',0
else
else ; Default to en_US
db 'File',0
.1:
db 'Open',0
@@ -3056,7 +3056,7 @@ menu_text_area_2:
if lang eq ru_RU
db 'Вид',0
.1:
else
else ; Default to en_US
db 'View',0
.1:
end if
@@ -3074,7 +3074,7 @@ menu_data_3:
.x:
if lang eq ru_RU
.size_x dw 4*2+7*6 ;+32
else
else ; Default to en_US
.size_x dw 40 ;+4
end if
.start_x dw 84 ;+6
@@ -3089,7 +3089,7 @@ end if
.x1:
if lang eq ru_RU
.size_x1 dw 4*2+7*6 ;+32
else
else ; Default to en_US
.size_x1 dw 40 ;+32
end if
.start_x1 dw 84 ;+34
@@ -3122,7 +3122,7 @@ if lang eq ru_RU
db 'Справка',0
.1:
db 'Справка',0
else
else ; Default to en_US
db 'Help',0
.1:
db 'Help',0
@@ -3155,7 +3155,7 @@ if lang eq ru_RU
.e2:
.3 db 'Назад'
.e3:
else
else ; Default to en_US
.1 db 'Absolutely'
.e1:
.2 db 'Forward'
@@ -3181,7 +3181,7 @@ head_f_i:
if lang eq ru_RU
error_open_file_string db "Файл не найден!",0
error_save_file_string db "Файл не сохранен!",0
else
else ; Default to en_US
error_open_file_string db "Isn't found!",0
error_save_file_string db "Isn't saved!",0
end if
@@ -3240,7 +3240,7 @@ if lang eq ru_RU
db 'Ctrl+C - копировать блок '
db 'Ctrl+V - вставить в выделенную область'
db 'Ctrl+X - вырезать в буфер '
else
else ; Default to en_US
db 'Ctrl+O - open file '
db 'Ctrl+S - save file '
db 'PageUp, PageDown - page up/down '
@@ -3268,7 +3268,7 @@ help_end:
;align 4096
font_buffer file 'cp866-8x16' ;ASCII+cp866 (+Ё,ё)
cp1251 file 'cp1251-8x16'
koi8_r file 'koi8-r-8x16'
koi8_r file 'koi8-r-8x16'
title db _title
;---------------------------------------------------------------------
+460 -459
View File
@@ -1,459 +1,460 @@
;
; Функции для преобразования файла *.stl в *.3ds
;
; Структура создаваемого файла *.3ds:
; CHUNK_MAIN (40+n+v+f)
; + CHUNK_OBJMESH (34+n+v+f)
; + CHUNK_OBJBLOCK (28+n+v+f)
; + CHUNK_TRIMESH (22+v+f)
; + CHUNK_VERTLIST (8+v)
; + CHUNK_FACELIST (8+f)
;
; в скобках указаны размеры блоков:
; n - память для имени объекта
; v - память для вершин
; f - память для граней
; Формат бинарного *.stl:
; char[80] - заголовок
; uint32 - число граней
; для каждой грани:
; float[3] - вектор нормали
; float[9] - вершины 1,2,3
; uint16 - атрибуты
if lang eq ru_RU
txt_err_stl_open:
db '"STL',13,10
db 'Файл *.stl очень большой." -tW',0
txt_err_stl_null_v:
db '"STL',13,10
db 'Вершины не найдены." -tE',0
else
txt_err_stl_open:
db '"STL',13,10
db 'File *.stl is very large." -tW',0
txt_err_stl_null_v:
db '"STL',13,10
db 'Vertexes not found." -tE',0
end if
;output:
; eax - указатель на сформированый файл 3ds (в случае неудачи 0)
; ecx - размер сформированого файла 3ds
align 4
proc convert_stl_3ds uses ebx edx edi esi, f_data:dword, f_size:dword
locals
c_mem dd ? ;память для преобразования (convert memory)
c_size dd ? ;размер памяти для преобразований (convert memory size)
vert_c dd ? ;число вершин (vertex count)
face_c dd ? ;число граней (faces count)
endl
xor eax,eax
mov esi,[f_data]
cmp dword[esi],'soli'
jne .bin_stl
cmp word[esi+4],'d '
jne .bin_stl
jmp @f
.bin_stl:
;проверяем файл на бинарный формат
mov ecx,[esi+80]
imul ecx,50
add ecx,84 ;заголовок
cmp ecx,[f_size]
jne .no_stl
call convert_binary_stl
jmp .no_stl
@@:
;в начале найдено 'solid '
stdcall txt_next_line, 80
mov eax,[f_data]
sub eax,esi
add eax,[f_size]
stdcall get_stl_vertex_count, esi,eax
or eax,eax
jnz @f
notify_window_run txt_err_stl_null_v
jmp .no_stl
@@:
cmp eax,0xffff
jle @f
notify_window_run txt_err_stl_open
mov eax,0xffff
@@:
mov [vert_c],eax
mov ecx,3
xor edx,edx
div ecx
mov [face_c],eax
shl eax,3
mov ecx,[vert_c]
imul ecx,12
lea ecx,[ecx+eax+40]
lea edx,[esi-6]
sub edx,[f_data]
cmp edx,2
jge @f
mov edx,2 ;минимальный размер для имени объекта
@@:
add ecx,edx ;for object name
mov [c_size],ecx
stdcall mem.Alloc,ecx
mov [c_mem],eax
mov ebx,eax
mov word[ebx],CHUNK_MAIN
mov dword[ebx+2],ecx
add ebx,6
;3d3d
mov word[ebx],CHUNK_OBJMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4000
mov word[ebx],CHUNK_OBJBLOCK
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
push ecx esi
mov ecx,edx
mov edi,ebx
mov esi,[f_data]
add esi,6 ;пропускаем 'solid '
rep movsb ;копируем имя объекта
mov byte[edi-1],0
add ebx,edx
pop esi ecx
;4100
mov word[ebx],CHUNK_TRIMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4110
mov word[ebx],CHUNK_VERTLIST
mov dword[ebx+2],8 ;+ число вершин * 12
add ebx,6
mov edx,ebx
mov word[edx],0 ;кол. вершин
add ebx,2
finit
.cycle0:
call txt_ignore_space
cmp dword[esi],'face'
jne .end_v
stdcall txt_next_line, 80
call txt_ignore_space
cmp dword[esi],'oute'
jne .end_v
stdcall txt_next_line, 80
mov ecx,3 ;3 точки на 1 грань
@@:
stdcall stl_vertex_init, ebx
or eax,eax
jz .end_v
add ebx,12
inc word[edx]
loop @b
mov eax,[vert_c]
cmp word[edx],ax
jge .end_v
call txt_ignore_space
cmp dword[esi],'endl'
jne .end_v
stdcall txt_next_line, 80
call txt_ignore_space
cmp dword[esi],'endf'
jne .end_v
stdcall txt_next_line, 80
jmp .cycle0
.end_v:
movzx eax,word[edx]
imul eax,12
add [edx-4],eax ;исправляем размер блока 4110
;4120
mov word[ebx],CHUNK_FACELIST
mov ecx,[face_c]
mov edx,ecx
shl edx,3 ;кол. граней * 8
add edx,8
mov [ebx+2],edx
add ebx,6
mov [ebx],cx ;кол. граней
add ebx,2
xor eax,eax
@@:
mov [ebx],ax
inc eax
mov [ebx+2],ax
inc eax
mov [ebx+4],ax
inc eax
mov word[ebx+6],0 ;атрибуты
add ebx,8
loop @b
mov eax,[c_mem]
mov ecx,[c_size]
.no_stl:
ret
endp
;input:
; esi - указатель на начало файла
; ecx - размер файла
align 4
proc convert_binary_stl
locals
c_mem dd ? ;память для преобразования (convert memory)
c_size dd ? ;размер памяти для преобразований (convert memory size)
vert_c dd ? ;число вершин (vertex count)
face_c dd ? ;число граней (faces count)
endl
mov eax,[esi+80]
or eax,eax
jnz @f
notify_window_run txt_err_stl_null_v
jmp .no_stl
@@:
cmp eax,0xffff/3
jle @f
notify_window_run txt_err_stl_open
mov eax,0xffff/3
@@:
mov [face_c],eax
mov ecx,eax
imul eax,3
mov [vert_c],eax
shl ecx,3
imul eax,12
lea ecx,[ecx+eax+40+4] ;+4 размер для имени объекта
mov [c_size],ecx
stdcall mem.Alloc,ecx
mov [c_mem],eax
mov ebx,eax
mov word[ebx],CHUNK_MAIN
mov dword[ebx+2],ecx
add ebx,6
;3d3d
mov word[ebx],CHUNK_OBJMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4000
mov word[ebx],CHUNK_OBJBLOCK
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
mov dword[ebx],'Stl' ;имя объекта
add ebx,4
;4100
mov word[ebx],CHUNK_TRIMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4110
mov word[ebx],CHUNK_VERTLIST
mov dword[ebx+2],8 ;+ число вершин * 12
add ebx,6
mov edx,ebx
mov ecx,[vert_c]
mov word[edx],cx ;кол. вершин
add ebx,2
add esi,80+4+12 ;пропуск заголовка, числа граней, 1-го вектора нормалей
mov edi,ebx
mov eax,[face_c]
@@: ;цикл по граням
mov ecx,9
rep movsd ;копируем координаты 3-х вершин
add esi,14 ;пропуск вектора нормалей и атрибутов
dec eax
jnz @b
mov ebx,edi
movzx eax,word[edx]
imul eax,12
add [edx-4],eax ;исправляем размер блока 4110
;4120
mov word[ebx],CHUNK_FACELIST
mov ecx,[face_c]
mov edx,ecx
shl edx,3 ;кол. граней * 8
add edx,8
mov [ebx+2],edx
add ebx,6
mov [ebx],cx ;кол. граней
add ebx,2
xor eax,eax
@@:
mov [ebx],ax
inc eax
mov [ebx+2],ax
inc eax
mov [ebx+4],ax
inc eax
mov word[ebx+6],0 ;атрибуты
add ebx,8
loop @b
mov eax,[c_mem]
mov ecx,[c_size]
.no_stl:
ret
endp
;output:
; eax - vertex count
align 4
proc get_stl_vertex_count uses ebx ecx edi, f_data:dword, f_size:dword
mov al,'v'
xor ebx,ebx
mov ecx,[f_size]
mov edi,[f_data]
.cycle0:
repne scasb
cmp dword[edi],'erte'
jne @f
inc ebx
add edi,4
sub ecx,4
cmp ecx,4
jg .cycle0
@@:
mov eax,ebx
ret
endp
;input:
; esi - input description text
; ppoi - pointer to vertex struct
;output:
; eax - 0 (if error init) or 1
; esi - output description text
align 4
proc stl_vertex_init uses ebx ecx edi, ppoi:dword
call txt_ignore_space
cmp dword[esi],'vert'
jne .err_init
cmp word[esi+4],'ex'
jne .err_init
add esi,6
mov ebx,[ppoi]
call txt_copy_data
call String_to_DoubleFloat
fld qword[Data_Double]
fstp dword[ebx] ;coord X
call txt_copy_data
call String_to_DoubleFloat
fld qword[Data_Double]
fstp dword[ebx+4] ;coord X
call txt_copy_data
call String_to_DoubleFloat
fld qword[Data_Double]
fstp dword[ebx+8] ;coord Z
stdcall txt_next_line, 80
jmp @f
.err_init:
xor eax,eax
jmp .end_f
@@:
xor eax,eax
inc eax
.end_f:
ret
endp
;input:
; esi - указатель на начало строки с пробелами
;output:
; al - destroy
; ecx - destroy
; esi - указатель на первый непробельный символ
align 4
txt_ignore_space:
mov ecx,64 ;защита от зацикливания
@@:
lodsb
cmp al,' '
jne @f
loop @b
@@:
dec esi
ret
;input:
; esi - указатель на строку с числом (пробелы в начале строки игнорируються)
;output:
; al - destroy
; ecx - destroy
; edi - destroy
; esi - указатель на конец копированного числа
; Data_String - строка с числом из esi
align 4
txt_copy_data:
call txt_ignore_space
mov ecx,32
mov edi,esi
@@:
lodsb
or al,al
jz @f
cmp al,' '
je @f
cmp al,13
je @f
loop @b
@@:
mov esi,edi
sub ecx,32
neg ecx
mov edi,Data_String
rep movsb
mov byte[edi],0
ret
;input:
; esi - text pointer
align 4
proc txt_next_line uses eax ecx edi, mlen:dword
mov al,13
mov ecx,[mlen]
mov edi,esi
repne scasb
cmp byte[edi],10
jne @f
inc edi
@@:
mov esi,edi
ret
endp
;
; Функции для преобразования файла *.stl в *.3ds
;
; Структура создаваемого файла *.3ds:
; CHUNK_MAIN (40+n+v+f)
; + CHUNK_OBJMESH (34+n+v+f)
; + CHUNK_OBJBLOCK (28+n+v+f)
; + CHUNK_TRIMESH (22+v+f)
; + CHUNK_VERTLIST (8+v)
; + CHUNK_FACELIST (8+f)
;
; в скобках указаны размеры блоков:
; n - память для имени объекта
; v - память для вершин
; f - память для граней
; Формат бинарного *.stl:
; char[80] - заголовок
; uint32 - число граней
; для каждой грани:
; float[3] - вектор нормали
; float[9] - вершины 1,2,3
; uint16 - атрибуты
; Language support for locales: ru_RU (CP866), en_US.
if lang eq ru_RU
txt_err_stl_open:
db '"STL',13,10
db 'Файл *.stl очень большой." -tW',0
txt_err_stl_null_v:
db '"STL',13,10
db 'Вершины не найдены." -tE',0
else ; Default to en_US
txt_err_stl_open:
db '"STL',13,10
db 'File *.stl is very large." -tW',0
txt_err_stl_null_v:
db '"STL',13,10
db 'Vertexes not found." -tE',0
end if
;output:
; eax - указатель на сформированый файл 3ds (в случае неудачи 0)
; ecx - размер сформированого файла 3ds
align 4
proc convert_stl_3ds uses ebx edx edi esi, f_data:dword, f_size:dword
locals
c_mem dd ? ;память для преобразования (convert memory)
c_size dd ? ;размер памяти для преобразований (convert memory size)
vert_c dd ? ;число вершин (vertex count)
face_c dd ? ;число граней (faces count)
endl
xor eax,eax
mov esi,[f_data]
cmp dword[esi],'soli'
jne .bin_stl
cmp word[esi+4],'d '
jne .bin_stl
jmp @f
.bin_stl:
;проверяем файл на бинарный формат
mov ecx,[esi+80]
imul ecx,50
add ecx,84 ;заголовок
cmp ecx,[f_size]
jne .no_stl
call convert_binary_stl
jmp .no_stl
@@:
;в начале найдено 'solid '
stdcall txt_next_line, 80
mov eax,[f_data]
sub eax,esi
add eax,[f_size]
stdcall get_stl_vertex_count, esi,eax
or eax,eax
jnz @f
notify_window_run txt_err_stl_null_v
jmp .no_stl
@@:
cmp eax,0xffff
jle @f
notify_window_run txt_err_stl_open
mov eax,0xffff
@@:
mov [vert_c],eax
mov ecx,3
xor edx,edx
div ecx
mov [face_c],eax
shl eax,3
mov ecx,[vert_c]
imul ecx,12
lea ecx,[ecx+eax+40]
lea edx,[esi-6]
sub edx,[f_data]
cmp edx,2
jge @f
mov edx,2 ;минимальный размер для имени объекта
@@:
add ecx,edx ;for object name
mov [c_size],ecx
stdcall mem.Alloc,ecx
mov [c_mem],eax
mov ebx,eax
mov word[ebx],CHUNK_MAIN
mov dword[ebx+2],ecx
add ebx,6
;3d3d
mov word[ebx],CHUNK_OBJMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4000
mov word[ebx],CHUNK_OBJBLOCK
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
push ecx esi
mov ecx,edx
mov edi,ebx
mov esi,[f_data]
add esi,6 ;пропускаем 'solid '
rep movsb ;копируем имя объекта
mov byte[edi-1],0
add ebx,edx
pop esi ecx
;4100
mov word[ebx],CHUNK_TRIMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4110
mov word[ebx],CHUNK_VERTLIST
mov dword[ebx+2],8 ;+ число вершин * 12
add ebx,6
mov edx,ebx
mov word[edx],0 ;кол. вершин
add ebx,2
finit
.cycle0:
call txt_ignore_space
cmp dword[esi],'face'
jne .end_v
stdcall txt_next_line, 80
call txt_ignore_space
cmp dword[esi],'oute'
jne .end_v
stdcall txt_next_line, 80
mov ecx,3 ;3 точки на 1 грань
@@:
stdcall stl_vertex_init, ebx
or eax,eax
jz .end_v
add ebx,12
inc word[edx]
loop @b
mov eax,[vert_c]
cmp word[edx],ax
jge .end_v
call txt_ignore_space
cmp dword[esi],'endl'
jne .end_v
stdcall txt_next_line, 80
call txt_ignore_space
cmp dword[esi],'endf'
jne .end_v
stdcall txt_next_line, 80
jmp .cycle0
.end_v:
movzx eax,word[edx]
imul eax,12
add [edx-4],eax ;исправляем размер блока 4110
;4120
mov word[ebx],CHUNK_FACELIST
mov ecx,[face_c]
mov edx,ecx
shl edx,3 ;кол. граней * 8
add edx,8
mov [ebx+2],edx
add ebx,6
mov [ebx],cx ;кол. граней
add ebx,2
xor eax,eax
@@:
mov [ebx],ax
inc eax
mov [ebx+2],ax
inc eax
mov [ebx+4],ax
inc eax
mov word[ebx+6],0 ;атрибуты
add ebx,8
loop @b
mov eax,[c_mem]
mov ecx,[c_size]
.no_stl:
ret
endp
;input:
; esi - указатель на начало файла
; ecx - размер файла
align 4
proc convert_binary_stl
locals
c_mem dd ? ;память для преобразования (convert memory)
c_size dd ? ;размер памяти для преобразований (convert memory size)
vert_c dd ? ;число вершин (vertex count)
face_c dd ? ;число граней (faces count)
endl
mov eax,[esi+80]
or eax,eax
jnz @f
notify_window_run txt_err_stl_null_v
jmp .no_stl
@@:
cmp eax,0xffff/3
jle @f
notify_window_run txt_err_stl_open
mov eax,0xffff/3
@@:
mov [face_c],eax
mov ecx,eax
imul eax,3
mov [vert_c],eax
shl ecx,3
imul eax,12
lea ecx,[ecx+eax+40+4] ;+4 размер для имени объекта
mov [c_size],ecx
stdcall mem.Alloc,ecx
mov [c_mem],eax
mov ebx,eax
mov word[ebx],CHUNK_MAIN
mov dword[ebx+2],ecx
add ebx,6
;3d3d
mov word[ebx],CHUNK_OBJMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4000
mov word[ebx],CHUNK_OBJBLOCK
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
mov dword[ebx],'Stl' ;имя объекта
add ebx,4
;4100
mov word[ebx],CHUNK_TRIMESH
sub ecx,6
mov dword[ebx+2],ecx
add ebx,6
;4110
mov word[ebx],CHUNK_VERTLIST
mov dword[ebx+2],8 ;+ число вершин * 12
add ebx,6
mov edx,ebx
mov ecx,[vert_c]
mov word[edx],cx ;кол. вершин
add ebx,2
add esi,80+4+12 ;пропуск заголовка, числа граней, 1-го вектора нормалей
mov edi,ebx
mov eax,[face_c]
@@: ;цикл по граням
mov ecx,9
rep movsd ;копируем координаты 3-х вершин
add esi,14 ;пропуск вектора нормалей и атрибутов
dec eax
jnz @b
mov ebx,edi
movzx eax,word[edx]
imul eax,12
add [edx-4],eax ;исправляем размер блока 4110
;4120
mov word[ebx],CHUNK_FACELIST
mov ecx,[face_c]
mov edx,ecx
shl edx,3 ;кол. граней * 8
add edx,8
mov [ebx+2],edx
add ebx,6
mov [ebx],cx ;кол. граней
add ebx,2
xor eax,eax
@@:
mov [ebx],ax
inc eax
mov [ebx+2],ax
inc eax
mov [ebx+4],ax
inc eax
mov word[ebx+6],0 ;атрибуты
add ebx,8
loop @b
mov eax,[c_mem]
mov ecx,[c_size]
.no_stl:
ret
endp
;output:
; eax - vertex count
align 4
proc get_stl_vertex_count uses ebx ecx edi, f_data:dword, f_size:dword
mov al,'v'
xor ebx,ebx
mov ecx,[f_size]
mov edi,[f_data]
.cycle0:
repne scasb
cmp dword[edi],'erte'
jne @f
inc ebx
add edi,4
sub ecx,4
cmp ecx,4
jg .cycle0
@@:
mov eax,ebx
ret
endp
;input:
; esi - input description text
; ppoi - pointer to vertex struct
;output:
; eax - 0 (if error init) or 1
; esi - output description text
align 4
proc stl_vertex_init uses ebx ecx edi, ppoi:dword
call txt_ignore_space
cmp dword[esi],'vert'
jne .err_init
cmp word[esi+4],'ex'
jne .err_init
add esi,6
mov ebx,[ppoi]
call txt_copy_data
call String_to_DoubleFloat
fld qword[Data_Double]
fstp dword[ebx] ;coord X
call txt_copy_data
call String_to_DoubleFloat
fld qword[Data_Double]
fstp dword[ebx+4] ;coord X
call txt_copy_data
call String_to_DoubleFloat
fld qword[Data_Double]
fstp dword[ebx+8] ;coord Z
stdcall txt_next_line, 80
jmp @f
.err_init:
xor eax,eax
jmp .end_f
@@:
xor eax,eax
inc eax
.end_f:
ret
endp
;input:
; esi - указатель на начало строки с пробелами
;output:
; al - destroy
; ecx - destroy
; esi - указатель на первый непробельный символ
align 4
txt_ignore_space:
mov ecx,64 ;защита от зацикливания
@@:
lodsb
cmp al,' '
jne @f
loop @b
@@:
dec esi
ret
;input:
; esi - указатель на строку с числом (пробелы в начале строки игнорируються)
;output:
; al - destroy
; ecx - destroy
; edi - destroy
; esi - указатель на конец копированного числа
; Data_String - строка с числом из esi
align 4
txt_copy_data:
call txt_ignore_space
mov ecx,32
mov edi,esi
@@:
lodsb
or al,al
jz @f
cmp al,' '
je @f
cmp al,13
je @f
loop @b
@@:
mov esi,edi
sub ecx,32
neg ecx
mov edi,Data_String
rep movsb
mov byte[edi],0
ret
;input:
; esi - text pointer
align 4
proc txt_next_line uses eax ecx edi, mlen:dword
mov al,13
mov ecx,[mlen]
mov edi,esi
repne scasb
cmp byte[edi],10
jne @f
inc edi
@@:
mov esi,edi
ret
endp
+324 -320
View File
@@ -1,320 +1,324 @@
;
; здесь собраны данные по блокам *.3ds
;
MAX_FILE_LEVEL equ 20 ;максимальный уровень вложенности блоков для анализа
sizeof.block_3ds equ 9
can_save db 0 ;изменялся ли файл
macro block_3ds id,icon,par,caption
{
dw id ;+0 идентификатор блока в файле 3ds
dw icon ;+2 номер иконки для блока
db par ;+4 содержит ли блок подблоки (0-да 1-нет)
dd caption+0 ;+5 описание блока
}
CHUNK_MAIN equ 0x4D4D ; [-] сцена
CHUNK_ambient_color equ 0x2100 ; [-] ambient color
CHUNK_OBJMESH equ 0x3D3D ; [-] набор объектов
CHUNK_OBJBLOCK equ 0x4000 ; [+] объект
CHUNK_TRIMESH equ 0x4100 ; [-] trimesh-объект
CHUNK_VERTLIST equ 0x4110 ; [+] список вершин
CHUNK_FACELIST equ 0x4120 ; [+] список граней
CHUNK_FACEMAT equ 0x4130 ; [+] материалы граней
CHUNK_MAPLIST equ 0x4140 ; [+] текстурные координаты
CHUNK_TRMATRIX equ 0x4160 ; [+] матрица перевода
CHUNK_CAMERA equ 0x4700 ; [+] объект-камера
CHUNK_MATERIAL equ 0xAFFF ; [-] материал
CHUNK_MATNAME equ 0xA000 ; [+] название материала
CHUNK_TEXTURE equ 0xA200 ; [-] текстура материала
CHUNK_MAPFILE equ 0xA300 ; [+] имя файла текстуры
CHUNK_KEYFRAMER equ 0xB000 ; [-] информация об анимации
CHUNK_TRACKINFO equ 0xB002 ; [-] поведение объекта
CHUNK_TRACKOBJNAME equ 0xB010 ; [+] название этого объекта
CHUNK_TRACKPIVOT equ 0xB013 ; [+] центр вращения объекта
CHUNK_TRACKPOS equ 0xB020 ; [+] траектория объекта
CHUNK_TRACKROTATE equ 0xB021 ; [+] траектория вращения объекта
CHUNK_TRACKCAMERA equ 0xB003 ; [-] поведение камеры
CHUNK_TRACKFOV equ 0xB023 ; [+] поведение fov камеры
CHUNK_TRACKROLL equ 0xB024 ; [+] поведение roll камеры
CHUNK_TRACKCAMTGT equ 0xB004 ; [-] поведение "цели" камеры
;данные содержат лишь блоки, отмеченные плюсом, остальные блоки
; состоят лишь из подблоков
align 4
type_bloks:
block_3ds 0x0002,5,1,txt_0002
block_3ds 0x3d3e,5,1 ; [+] mesh version
block_3ds 0x0011,4,1,txt_0011
block_3ds 0x0100,3,1,txt_0100
block_3ds CHUNK_ambient_color,3,0,txt_2100 ; [-] ambient color
block_3ds CHUNK_OBJMESH, 3,0,txt_3d3d
block_3ds CHUNK_OBJBLOCK,11,1,txt_4000
block_3ds CHUNK_TRIMESH, 3,0,txt_4100
block_3ds CHUNK_VERTLIST,8,1,txt_4110
block_3ds CHUNK_FACELIST,3,1,txt_4120
block_3ds CHUNK_FACEMAT,10,1,txt_4130
block_3ds CHUNK_MAPLIST, 3,1,txt_4140
block_3ds CHUNK_TRMATRIX,3,1,txt_4160
block_3ds 0x4600,3,1,txt_4600
block_3ds CHUNK_CAMERA, 3,1,txt_4700
block_3ds CHUNK_MATERIAL,10,0,txt_afff
block_3ds CHUNK_MATNAME, 3,1,txt_a000
block_3ds 0xa010,4,0,txt_a010
block_3ds 0xa020,4,0,txt_a020
block_3ds 0xa030,4,0,txt_a030
block_3ds 0xa100,5,1,txt_a100
block_3ds CHUNK_TEXTURE, 3,0,txt_a200
block_3ds CHUNK_MAPFILE, 6,1,txt_a300
block_3ds CHUNK_KEYFRAMER, 7,0,txt_b000
block_3ds CHUNK_TRACKINFO, 3,0,txt_b002
block_3ds CHUNK_TRACKOBJNAME,3,1,txt_b010
block_3ds 0xb011,3,1,txt_b011
block_3ds CHUNK_TRACKPIVOT, 3,1,txt_b013
block_3ds 0xb014,3,1,txt_b014
block_3ds CHUNK_TRACKPOS, 3,1,txt_b020
block_3ds CHUNK_TRACKROTATE, 3,1,txt_b021
block_3ds CHUNK_TRACKCAMERA, 7,0,txt_b003
block_3ds CHUNK_TRACKFOV, 7,1,txt_b023
block_3ds CHUNK_TRACKROLL, 7,1,txt_b024
block_3ds CHUNK_TRACKCAMTGT, 7,0,txt_b004
;--- далее не во всех блоках смог найти описание на русском языке
block_3ds 0x4111, 3,1,txt_4111
block_3ds 0x4150, 3,1,txt_4150
block_3ds 0x4165, 3,1,txt_4165
block_3ds 0x4610, 3,1,txt_4610
block_3ds 0x4627, 3,1,txt_4627
block_3ds 0x4630, 3,1,txt_4630
block_3ds 0x4641, 3,1,txt_4641
block_3ds 0x4650, 3,1,txt_4650
block_3ds 0x4651, 3,1,txt_4651
block_3ds 0x4652, 3,1,txt_4652
block_3ds 0x4653, 3,1,txt_4653
block_3ds 0x4656, 3,1,txt_4656
block_3ds 0x4658, 3,1,txt_4658
block_3ds 0x4620, 3,1,txt_4620
block_3ds 0x4625, 3,1,txt_4625
block_3ds 0x4659, 3,1,txt_4659
block_3ds 0x465a, 3,1,txt_465a
block_3ds 0x465b, 3,1,txt_465b
block_3ds 0xa230, 3,1,txt_a230
block_3ds 0xa220, 3,1,txt_a220
block_3ds 0xa351, 3,1,txt_a351
block_3ds 0xb007, 3,1,txt_b007
block_3ds 0xb008, 3,1,txt_b008
block_3ds 0xb022, 3,1,txt_b022
block_3ds 0xb030, 3,1,txt_b030
block_3ds 0xa040, 3,1,txt_a040
block_3ds 0xa041, 3,1,txt_a041
block_3ds 0xa050, 3,1,txt_a050
block_3ds 0xa052, 3,1,txt_a052
block_3ds 0xa053, 3,1,txt_a053
block_3ds 0xa081, 3,1,txt_a081
block_3ds 0xa083, 3,1,txt_a083
block_3ds 0xa084, 3,1,txt_a084
block_3ds 0xa085, 3,1,txt_a085
block_3ds 0xa087, 3,1,txt_a087
block_3ds 0xa088, 3,1,txt_a088
block_3ds 0xa08a, 3,1,txt_a08a
block_3ds 0xa08c, 3,1,txt_a08c
block_3ds 0xa08e, 3,1,txt_a08e
.end:
if lang eq ru_RU
txt_0002 db '3ds версия',0
txt_0011 db 'Цвет rgb (байтовый формат)',0
;txt_0012 db 'LIN_COLOR_24',0
;txt_0030 db 'Percentage value (int)',0
;txt_0031 db 'Percentage value (float)',0
txt_0100 db 'Master scale',0
txt_2100 db 'Цвет окружающей среды',0
txt_3d3d db 'Набор объектов',0
txt_4000 db 'Объект (с именем)',0
txt_4100 db 'Треугольные сетки',0
txt_4110 db 'Список вершин',0
txt_4120 db 'Список граней',0
txt_4130 db 'Материалы граней',0
txt_4140 db 'Текстурные координаты',0
txt_4160 db 'Матрица перевода',0
txt_4600 db 'Свет',0
txt_4700 db 'Камера',0
txt_a000 db 'Название материала',0
txt_a010 db 'Окружающий цвет',0
txt_a020 db 'Диффузный цвет',0
txt_a030 db 'Зеркальный цвет',0
txt_a100 db 'Тип материала [1=flat 2=gouraud 3=phong 4=metal]',0
txt_a200 db 'Текстура материала 1',0
txt_a300 db 'Имя файла текстуры',0
;txt_a353 db 'MAT_MAP_TEXBLUR',0
txt_afff db 'Материал',0
txt_b000 db 'Информация об анимации',0
txt_b002 db 'Поведение объекта',0
;txt_b009 db 'KFCURTIME',0
;txt_b00a db 'KFHDR',0
txt_b010 db 'Название объекта',0
txt_b011 db 'Имя экземпляра',0
txt_b013 db 'Центр вращения объекта',0
txt_b014 db 'Bound box',0
txt_b020 db 'Траектория движения',0
txt_b021 db 'Траектория вращения',0
txt_b003 db 'Поведение камеры',0
txt_b023 db 'Поведение fov камеры',0
txt_b024 db 'Поведение roll камеры',0
txt_b004 db 'Поведение "цели" камеры',0
;--- далее не во всех блоках смог найти описание на русском языке
txt_4111 db 'Флаги вершин',0
txt_4150 db 'Smoothing group list',0
txt_4165 db 'Object color in editor',0
txt_4610 db 'Направленный свет',0
txt_4627 db 'Spot raytrace',0
txt_4630 db 'Light shadowed',0
txt_4641 db 'Spot shadow map',0
txt_4650 db 'Spot show cone',0
txt_4651 db 'Spot is rectangular',0
txt_4652 db 'Spot overshoot',0
txt_4653 db 'Spot map',0
txt_4656 db 'Spot roll',0
txt_4658 db 'Spot ray trace bias',0
txt_4620 db 'Light off',0
txt_4625 db 'Attenuation on',0
txt_4659 db 'Range start',0
txt_465a db 'Range end',0
txt_465b db 'Multiplier',0
txt_a230 db 'Разметка рельефа',0
txt_a220 db 'Разметка отражения',0
txt_a351 db 'Параметры разметки',0
txt_b007 db 'Информация о направленом освещении',0
txt_b008 db 'Кадры (начальный и конечный)',0
txt_b022 db 'Масштабирование',0
txt_b030 db 'Позиция в иерархии',0
txt_a040 db 'Shininess percent',0
txt_a041 db 'Shininess strength percent',0
txt_a050 db 'Transparency percent',0
txt_a052 db 'Transparency falloff percent',0
txt_a053 db 'Reflection blur percent',0
txt_a081 db '2 sided',0
txt_a083 db 'Add trans',0
txt_a084 db 'Self illum',0
txt_a085 db 'Wire frame on',0
txt_a087 db 'Wire thickness',0
txt_a088 db 'Face map',0
txt_a08a db 'In tranc',0
txt_a08c db 'Soften',0
txt_a08e db 'Wire in units',0
txt_not_delete db 'Не могу удалить выбранный блок. Он защищен.',0
else
txt_0002 db '3ds version',0
txt_0011 db 'Color rgb (byte format)',0
txt_0100 db 'Master scale',0
txt_2100 db 'Ambient color',0
txt_3d3d db 'Editor chunk',0
txt_4000 db 'Object (with name)',0
txt_4100 db 'Triangular mesh',0
txt_4110 db 'Vertices list',0
txt_4120 db 'Faces description',0
txt_4130 db 'Faces material',0
txt_4140 db 'Mapping coordinates list',0
txt_4160 db 'Local coordinate system',0
txt_4600 db 'Light',0
txt_4700 db 'Camera',0
txt_a000 db 'Material name',0
txt_a010 db 'Ambient color',0
txt_a020 db 'Diffuse color',0
txt_a030 db 'Specular color',0
txt_a100 db 'Material type [1=flat 2=gouraud 3=phong 4=metal]',0
txt_a200 db 'Texture map 1',0
txt_a300 db 'Mapping filename',0
txt_afff db 'Meterial',0
txt_b000 db 'Keyframer',0
txt_b002 db 'Mesh information',0
txt_b010 db 'Object name',0
txt_b011 db 'Instance name',0
txt_b013 db 'Object pivot point',0
txt_b014 db 'Bound box',0
txt_b020 db 'Position track',0
txt_b021 db 'Rotation track',0
txt_b003 db 'Camera information',0
txt_b023 db 'Fov track',0
txt_b024 db 'Roll track',0
txt_b004 db 'Camera target information',0
;---
txt_4111 db 'Vertex flags',0
txt_4150 db 'Smoothing group list',0
txt_4165 db 'Object color in editor',0
txt_4610 db 'Spotlight',0
txt_4627 db 'Spot raytrace',0
txt_4630 db 'Light shadowed',0
txt_4641 db 'Spot shadow map',0
txt_4650 db 'Spot show cone',0
txt_4651 db 'Spot is rectangular',0
txt_4652 db 'Spot overshoot',0
txt_4653 db 'Spot map',0
txt_4656 db 'Spot roll',0
txt_4658 db 'Spot ray trace bias',0
txt_4620 db 'Light off',0
txt_4625 db 'Attenuation on',0
txt_4659 db 'Range start',0
txt_465a db 'Range end',0
txt_465b db 'Multiplier',0
txt_a230 db 'Bump map',0
txt_a220 db 'Reflection map',0
txt_a351 db 'Mapping parameters',0
txt_b007 db 'Spot light information',0
txt_b008 db 'Frames (Start and End)',0
txt_b022 db 'Scale track',0
txt_b030 db 'Hierarchy position',0
txt_a040 db 'Shininess percent',0
txt_a041 db 'Shininess strength percent',0
txt_a050 db 'Transparency percent',0
txt_a052 db 'Transparency falloff percent',0
txt_a053 db 'Reflection blur percent',0
txt_a081 db '2 sided',0
txt_a083 db 'Add trans',0
txt_a084 db 'Self illum',0
txt_a085 db 'Wire frame on',0
txt_a087 db 'Wire thickness',0
txt_a088 db 'Face map',0
txt_a08a db 'In tranc',0
txt_a08c db 'Soften',0
txt_a08e db 'Wire in units',0
txt_not_delete db 'I can not delete the selected chunk. It is protected.',0
end if
if lang eq ru_RU
txt_open_3ds db 'Открыт файл:',0
txt_no_3ds: db 'Открытый файл не в формате *.3ds ',39
.zag: rb 8
db 39,0
txt_3ds_err_sizes db 'Возможно файл поврежден',0
txt_count db 'Количество',0
txt_3ds_offs:
db 'Смещение: '
.dig: rb 8
db ' Размер: '
.siz: rb 8
db 0
txt_mat_null db 'Материалы не найдены',0
else
txt_open_3ds db 'Open file:',0
txt_no_3ds: db 'Open file not in format *.3ds ',39
.zag: rb 8
db 39,0
txt_3ds_err_sizes db 'File may be corrupted',0
txt_count db 'Count',0
txt_3ds_offs:
db 'Offset: '
.dig: rb 8
db ' Size: '
.siz: rb 8
db 0
txt_mat_null db 'No materials found',0
end if
;
; здесь собраны данные по блокам *.3ds
;
; Language support for locales: ru_RU (CP866), en_US.
MAX_FILE_LEVEL equ 20 ;максимальный уровень вложенности блоков для анализа
sizeof.block_3ds equ 9
can_save db 0 ;изменялся ли файл
macro block_3ds id,icon,par,caption
{
dw id ;+0 идентификатор блока в файле 3ds
dw icon ;+2 номер иконки для блока
db par ;+4 содержит ли блок подблоки (0-да 1-нет)
dd caption+0 ;+5 описание блока
}
CHUNK_MAIN equ 0x4D4D ; [-] сцена
CHUNK_ambient_color equ 0x2100 ; [-] ambient color
CHUNK_OBJMESH equ 0x3D3D ; [-] набор объектов
CHUNK_OBJBLOCK equ 0x4000 ; [+] объект
CHUNK_TRIMESH equ 0x4100 ; [-] trimesh-объект
CHUNK_VERTLIST equ 0x4110 ; [+] список вершин
CHUNK_FACELIST equ 0x4120 ; [+] список граней
CHUNK_FACEMAT equ 0x4130 ; [+] материалы граней
CHUNK_MAPLIST equ 0x4140 ; [+] текстурные координаты
CHUNK_TRMATRIX equ 0x4160 ; [+] матрица перевода
CHUNK_CAMERA equ 0x4700 ; [+] объект-камера
CHUNK_MATERIAL equ 0xAFFF ; [-] материал
CHUNK_MATNAME equ 0xA000 ; [+] название материала
CHUNK_TEXTURE equ 0xA200 ; [-] текстура материала
CHUNK_MAPFILE equ 0xA300 ; [+] имя файла текстуры
CHUNK_KEYFRAMER equ 0xB000 ; [-] информация об анимации
CHUNK_TRACKINFO equ 0xB002 ; [-] поведение объекта
CHUNK_TRACKOBJNAME equ 0xB010 ; [+] название этого объекта
CHUNK_TRACKPIVOT equ 0xB013 ; [+] центр вращения объекта
CHUNK_TRACKPOS equ 0xB020 ; [+] траектория объекта
CHUNK_TRACKROTATE equ 0xB021 ; [+] траектория вращения объекта
CHUNK_TRACKCAMERA equ 0xB003 ; [-] поведение камеры
CHUNK_TRACKFOV equ 0xB023 ; [+] поведение fov камеры
CHUNK_TRACKROLL equ 0xB024 ; [+] поведение roll камеры
CHUNK_TRACKCAMTGT equ 0xB004 ; [-] поведение "цели" камеры
;данные содержат лишь блоки, отмеченные плюсом, остальные блоки
; состоят лишь из подблоков
align 4
type_bloks:
block_3ds 0x0002,5,1,txt_0002
block_3ds 0x3d3e,5,1 ; [+] mesh version
block_3ds 0x0011,4,1,txt_0011
block_3ds 0x0100,3,1,txt_0100
block_3ds CHUNK_ambient_color,3,0,txt_2100 ; [-] ambient color
block_3ds CHUNK_OBJMESH, 3,0,txt_3d3d
block_3ds CHUNK_OBJBLOCK,11,1,txt_4000
block_3ds CHUNK_TRIMESH, 3,0,txt_4100
block_3ds CHUNK_VERTLIST,8,1,txt_4110
block_3ds CHUNK_FACELIST,3,1,txt_4120
block_3ds CHUNK_FACEMAT,10,1,txt_4130
block_3ds CHUNK_MAPLIST, 3,1,txt_4140
block_3ds CHUNK_TRMATRIX,3,1,txt_4160
block_3ds 0x4600,3,1,txt_4600
block_3ds CHUNK_CAMERA, 3,1,txt_4700
block_3ds CHUNK_MATERIAL,10,0,txt_afff
block_3ds CHUNK_MATNAME, 3,1,txt_a000
block_3ds 0xa010,4,0,txt_a010
block_3ds 0xa020,4,0,txt_a020
block_3ds 0xa030,4,0,txt_a030
block_3ds 0xa100,5,1,txt_a100
block_3ds CHUNK_TEXTURE, 3,0,txt_a200
block_3ds CHUNK_MAPFILE, 6,1,txt_a300
block_3ds CHUNK_KEYFRAMER, 7,0,txt_b000
block_3ds CHUNK_TRACKINFO, 3,0,txt_b002
block_3ds CHUNK_TRACKOBJNAME,3,1,txt_b010
block_3ds 0xb011,3,1,txt_b011
block_3ds CHUNK_TRACKPIVOT, 3,1,txt_b013
block_3ds 0xb014,3,1,txt_b014
block_3ds CHUNK_TRACKPOS, 3,1,txt_b020
block_3ds CHUNK_TRACKROTATE, 3,1,txt_b021
block_3ds CHUNK_TRACKCAMERA, 7,0,txt_b003
block_3ds CHUNK_TRACKFOV, 7,1,txt_b023
block_3ds CHUNK_TRACKROLL, 7,1,txt_b024
block_3ds CHUNK_TRACKCAMTGT, 7,0,txt_b004
;--- далее не во всех блоках смог найти описание на русском языке
block_3ds 0x4111, 3,1,txt_4111
block_3ds 0x4150, 3,1,txt_4150
block_3ds 0x4165, 3,1,txt_4165
block_3ds 0x4610, 3,1,txt_4610
block_3ds 0x4627, 3,1,txt_4627
block_3ds 0x4630, 3,1,txt_4630
block_3ds 0x4641, 3,1,txt_4641
block_3ds 0x4650, 3,1,txt_4650
block_3ds 0x4651, 3,1,txt_4651
block_3ds 0x4652, 3,1,txt_4652
block_3ds 0x4653, 3,1,txt_4653
block_3ds 0x4656, 3,1,txt_4656
block_3ds 0x4658, 3,1,txt_4658
block_3ds 0x4620, 3,1,txt_4620
block_3ds 0x4625, 3,1,txt_4625
block_3ds 0x4659, 3,1,txt_4659
block_3ds 0x465a, 3,1,txt_465a
block_3ds 0x465b, 3,1,txt_465b
block_3ds 0xa230, 3,1,txt_a230
block_3ds 0xa220, 3,1,txt_a220
block_3ds 0xa351, 3,1,txt_a351
block_3ds 0xb007, 3,1,txt_b007
block_3ds 0xb008, 3,1,txt_b008
block_3ds 0xb022, 3,1,txt_b022
block_3ds 0xb030, 3,1,txt_b030
block_3ds 0xa040, 3,1,txt_a040
block_3ds 0xa041, 3,1,txt_a041
block_3ds 0xa050, 3,1,txt_a050
block_3ds 0xa052, 3,1,txt_a052
block_3ds 0xa053, 3,1,txt_a053
block_3ds 0xa081, 3,1,txt_a081
block_3ds 0xa083, 3,1,txt_a083
block_3ds 0xa084, 3,1,txt_a084
block_3ds 0xa085, 3,1,txt_a085
block_3ds 0xa087, 3,1,txt_a087
block_3ds 0xa088, 3,1,txt_a088
block_3ds 0xa08a, 3,1,txt_a08a
block_3ds 0xa08c, 3,1,txt_a08c
block_3ds 0xa08e, 3,1,txt_a08e
.end:
if lang eq ru_RU
txt_0002 db '3ds версия',0
txt_0011 db 'Цвет rgb (байтовый формат)',0
;txt_0012 db 'LIN_COLOR_24',0
;txt_0030 db 'Percentage value (int)',0
;txt_0031 db 'Percentage value (float)',0
txt_0100 db 'Master scale',0
txt_2100 db 'Цвет окружающей среды',0
txt_3d3d db 'Набор объектов',0
txt_4000 db 'Объект (с именем)',0
txt_4100 db 'Треугольные сетки',0
txt_4110 db 'Список вершин',0
txt_4120 db 'Список граней',0
txt_4130 db 'Материалы граней',0
txt_4140 db 'Текстурные координаты',0
txt_4160 db 'Матрица перевода',0
txt_4600 db 'Свет',0
txt_4700 db 'Камера',0
txt_a000 db 'Название материала',0
txt_a010 db 'Окружающий цвет',0
txt_a020 db 'Диффузный цвет',0
txt_a030 db 'Зеркальный цвет',0
txt_a100 db 'Тип материала [1=flat 2=gouraud 3=phong 4=metal]',0
txt_a200 db 'Текстура материала 1',0
txt_a300 db 'Имя файла текстуры',0
;txt_a353 db 'MAT_MAP_TEXBLUR',0
txt_afff db 'Материал',0
txt_b000 db 'Информация об анимации',0
txt_b002 db 'Поведение объекта',0
;txt_b009 db 'KFCURTIME',0
;txt_b00a db 'KFHDR',0
txt_b010 db 'Название объекта',0
txt_b011 db 'Имя экземпляра',0
txt_b013 db 'Центр вращения объекта',0
txt_b014 db 'Bound box',0
txt_b020 db 'Траектория движения',0
txt_b021 db 'Траектория вращения',0
txt_b003 db 'Поведение камеры',0
txt_b023 db 'Поведение fov камеры',0
txt_b024 db 'Поведение roll камеры',0
txt_b004 db 'Поведение "цели" камеры',0
;--- далее не во всех блоках смог найти описание на русском языке
txt_4111 db 'Флаги вершин',0
txt_4150 db 'Smoothing group list',0
txt_4165 db 'Object color in editor',0
txt_4610 db 'Направленный свет',0
txt_4627 db 'Spot raytrace',0
txt_4630 db 'Light shadowed',0
txt_4641 db 'Spot shadow map',0
txt_4650 db 'Spot show cone',0
txt_4651 db 'Spot is rectangular',0
txt_4652 db 'Spot overshoot',0
txt_4653 db 'Spot map',0
txt_4656 db 'Spot roll',0
txt_4658 db 'Spot ray trace bias',0
txt_4620 db 'Light off',0
txt_4625 db 'Attenuation on',0
txt_4659 db 'Range start',0
txt_465a db 'Range end',0
txt_465b db 'Multiplier',0
txt_a230 db 'Разметка рельефа',0
txt_a220 db 'Разметка отражения',0
txt_a351 db 'Параметры разметки',0
txt_b007 db 'Информация о направленом освещении',0
txt_b008 db 'Кадры (начальный и конечный)',0
txt_b022 db 'Масштабирование',0
txt_b030 db 'Позиция в иерархии',0
txt_a040 db 'Shininess percent',0
txt_a041 db 'Shininess strength percent',0
txt_a050 db 'Transparency percent',0
txt_a052 db 'Transparency falloff percent',0
txt_a053 db 'Reflection blur percent',0
txt_a081 db '2 sided',0
txt_a083 db 'Add trans',0
txt_a084 db 'Self illum',0
txt_a085 db 'Wire frame on',0
txt_a087 db 'Wire thickness',0
txt_a088 db 'Face map',0
txt_a08a db 'In tranc',0
txt_a08c db 'Soften',0
txt_a08e db 'Wire in units',0
txt_not_delete db 'Не могу удалить выбранный блок. Он защищен.',0
else ; Default to en_US
txt_0002 db '3ds version',0
txt_0011 db 'Color rgb (byte format)',0
txt_0100 db 'Master scale',0
txt_2100 db 'Ambient color',0
txt_3d3d db 'Editor chunk',0
txt_4000 db 'Object (with name)',0
txt_4100 db 'Triangular mesh',0
txt_4110 db 'Vertices list',0
txt_4120 db 'Faces description',0
txt_4130 db 'Faces material',0
txt_4140 db 'Mapping coordinates list',0
txt_4160 db 'Local coordinate system',0
txt_4600 db 'Light',0
txt_4700 db 'Camera',0
txt_a000 db 'Material name',0
txt_a010 db 'Ambient color',0
txt_a020 db 'Diffuse color',0
txt_a030 db 'Specular color',0
txt_a100 db 'Material type [1=flat 2=gouraud 3=phong 4=metal]',0
txt_a200 db 'Texture map 1',0
txt_a300 db 'Mapping filename',0
txt_afff db 'Meterial',0
txt_b000 db 'Keyframer',0
txt_b002 db 'Mesh information',0
txt_b010 db 'Object name',0
txt_b011 db 'Instance name',0
txt_b013 db 'Object pivot point',0
txt_b014 db 'Bound box',0
txt_b020 db 'Position track',0
txt_b021 db 'Rotation track',0
txt_b003 db 'Camera information',0
txt_b023 db 'Fov track',0
txt_b024 db 'Roll track',0
txt_b004 db 'Camera target information',0
;---
txt_4111 db 'Vertex flags',0
txt_4150 db 'Smoothing group list',0
txt_4165 db 'Object color in editor',0
txt_4610 db 'Spotlight',0
txt_4627 db 'Spot raytrace',0
txt_4630 db 'Light shadowed',0
txt_4641 db 'Spot shadow map',0
txt_4650 db 'Spot show cone',0
txt_4651 db 'Spot is rectangular',0
txt_4652 db 'Spot overshoot',0
txt_4653 db 'Spot map',0
txt_4656 db 'Spot roll',0
txt_4658 db 'Spot ray trace bias',0
txt_4620 db 'Light off',0
txt_4625 db 'Attenuation on',0
txt_4659 db 'Range start',0
txt_465a db 'Range end',0
txt_465b db 'Multiplier',0
txt_a230 db 'Bump map',0
txt_a220 db 'Reflection map',0
txt_a351 db 'Mapping parameters',0
txt_b007 db 'Spot light information',0
txt_b008 db 'Frames (Start and End)',0
txt_b022 db 'Scale track',0
txt_b030 db 'Hierarchy position',0
txt_a040 db 'Shininess percent',0
txt_a041 db 'Shininess strength percent',0
txt_a050 db 'Transparency percent',0
txt_a052 db 'Transparency falloff percent',0
txt_a053 db 'Reflection blur percent',0
txt_a081 db '2 sided',0
txt_a083 db 'Add trans',0
txt_a084 db 'Self illum',0
txt_a085 db 'Wire frame on',0
txt_a087 db 'Wire thickness',0
txt_a088 db 'Face map',0
txt_a08a db 'In tranc',0
txt_a08c db 'Soften',0
txt_a08e db 'Wire in units',0
txt_not_delete db 'Cannot delete the selected chunk: it is protected.',0
end if
if lang eq ru_RU
txt_open_3ds db 'Открыт файл:',0
txt_no_3ds: db 'Открытый файл не в формате *.3ds ',39
.zag: rb 8
db 39,0
txt_3ds_err_sizes db 'Возможно файл поврежден',0
txt_count db 'Количество',0
txt_3ds_offs:
db 'Смещение: '
.dig: rb 8
db ' Размер: '
.siz: rb 8
db 0
txt_mat_null db 'Материалы не найдены',0
else ; Default to en_US
txt_open_3ds db 'Open file:',0
txt_no_3ds: db 'Open file not in format *.3ds ',39
.zag: rb 8
db 39,0
txt_3ds_err_sizes db 'File may be corrupted',0
txt_count db 'Count',0
txt_3ds_offs:
db 'Offset: '
.dig: rb 8
db ' Size: '
.siz: rb 8
db 0
txt_mat_null db 'No materials found',0
end if
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+55 -1
View File
@@ -1 +1,55 @@
; Language support for locales: ru_RU (CP866), en_US.
if lang eq ru_RU
sz_main_menu_View db 'Вид', 0
sz_main_menu_Veiw_Vertexes db 'Вершины вкл.', 0
sz_main_menu_Veiw_Faces db 'Каркасные грани вкл.', 0
sz_main_menu_Veiw_Faces_Fill db 'Сплошные грани вкл.', 0
sz_main_menu_Veiw_Light db 'Свет вкл./выкл.', 0
sz_main_menu_Veiw_Smooth db 'Сглаживание вкл./выкл.', 0
sz_main_menu_Veiw_Reset db 'Сброс настроек', 0
if version_edit eq 0
sz_main_menu_Veiw_Faces_Mat db 'Разноцветные грани вкл.', 0
else
sz_main_menu_Vertexes db 'Вершины', 0
sz_main_menu_Vertexes_Select db 'Выделить вершину', 0
sz_main_menu_Vertexes_Deselect db 'Отменить всё выделение', 0
sz_main_menu_Average_x db 'Среднее x',0
sz_main_menu_Average_y db 'Среднее y',0
sz_main_menu_Average_z db 'Среднее z',0
end if
else ; Default to en_US
sz_main_menu_View db 'View', 0
sz_main_menu_Veiw_Vertexes db 'Vertexes on', 0
sz_main_menu_Veiw_Faces db 'Edges on', 0
sz_main_menu_Veiw_Faces_Fill db 'Faces on', 0
sz_main_menu_Veiw_Light db 'Light on/off', 0
sz_main_menu_Veiw_Smooth db 'Smooth on/off', 0
sz_main_menu_Veiw_Reset db 'Reset settings', 0
if version_edit eq 0
sz_main_menu_Veiw_Faces_Mat db 'Diferent color faces on', 0
else
sz_main_menu_Vertexes db 'Vertexes', 0
sz_main_menu_Vertexes_Select db 'Select vertex', 0
sz_main_menu_Vertexes_Deselect db 'Deselect all', 0
sz_main_menu_Average_x db 'Average x',0
sz_main_menu_Average_y db 'Average y',0
sz_main_menu_Average_z db 'Average z',0
end if
end if
main_menu dd 0
main_menu_file dd 0
main_menu_view dd 0
main_menu_vertexes dd 0
KMENUITEM_NORMAL equ 0
KMENUITEM_SUBMENU equ 1
KMENUITEM_SEPARATOR equ 2
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+318 -318
View File
@@ -1,318 +1,318 @@
; Программа для преобразования чисел из строки
; в формат float, double, а также из 10 или 16 ричного
; во float.
; Сделана на основе hex2dec2bin и примеров из файла list2_05.inc
; (автор Кулаков Владимир Геннадьевич 24.05.2002),
; которые ChE переделал с 16 на 32 бита на ассемблер fasm.
; Программа позволяет решать такие задачи:
; 1) число в строковом виде перевести в 4 байта (float) в машинный вид
; 2) число в строковом виде перевести в 8 байт (double) в машинный вид
; 3) число в машинном виде (float) перевести в строковый вид (5 знаков после запятой)
use32
org 0
db 'MENUET01'
dd 1,start,i_end,e_end,e_end,0,sys_path
include '../../../proc32.inc'
include '../../../macros.inc'
include '../../../KOSfuncs.inc'
include '../../../load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../../develop/info3ds/info_fun_float.inc'
include 'lang.inc'
@use_library
align 4
start:
load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузилась наша библиотека
mov ebp,lib_0
cmp dword[ebp+ll_struc_size-4],0
jz @f
mcall SF_TERMINATE_PROCESS
@@:
mcall SF_SET_EVENTS_MASK,0xC0000027
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS, sys_colors, sizeof.system_colors
edit_boxes_set_sys_color edit1,editboxes_end,sys_colors
option_boxes_set_sys_color sys_colors,Option_boxes1
align 4
red:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp eax,1 ; перерисовать окно ?
je red ; если да - на метку red
cmp eax,2 ; нажата клавиша ?
je key ; если да - на key
cmp eax,3 ; нажата кнопка ?
je button ; если да - на button
cmp eax,6
je mouse
jmp still ; если другое событие - в начало цикла
align 4
key: ; нажата клавиша на клавиатуре
mcall SF_GET_KEY
;cmp ah,13
stdcall [edit_box_key], edit1
jmp still ; вернуться к началу цикла
align 4
button:
mcall SF_GET_BUTTON
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
jne @f
mcall SF_TERMINATE_PROCESS
@@:
cmp ah, 5
jne @f
cmp dword[option_group1],opt3
jne .opt_3_end
stdcall conv_str_to_int,[edit1.text]
mov dword[Data_Double],eax
finit
fld dword[Data_Double]
fstp qword[Data_Double]
; Data_Double - преобразуемое число
mov word[NumberSymbolsAD],8 ; количество знаков числа после запятой (1-17)
call DoubleFloat_to_String
call String_crop_0
mov dword[Data_Double],eax ;восстанавливаем значение в формате float
jmp .opt_all_end
.opt_3_end:
mov esi,string1
mov edi,Data_String
cld
mov ecx,32
rep movsb
call String_to_DoubleFloat
cmp dword[option_group1],opt1
jne .opt_all_end ;если выбран float, то преобразуем из ранее полученного double
finit
fld qword[Data_Double] ;читаем из double
fstp dword[Data_Double] ;а возвращаем во float
.opt_all_end:
jmp red
@@:
jmp still
align 4
mouse:
stdcall [edit_box_mouse], edit1
stdcall [option_box_mouse], Option_boxes1
jmp still
;------------------------------------------------
align 4
draw_window:
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS, sys_colors, sizeof.system_colors
mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx, 0x14000000
or edx, [sys_colors.work]
mcall SF_CREATE_WINDOW, (200 shl 16)+300, (200 shl 16)+175, ,,title
mcall SF_DEFINE_BUTTON, ((300-53) shl 16)+38, (145 shl 16)+15, 5, [sys_colors.work_button] ; кнопка Ok
mov ecx, 0x80000000
or ecx, [sys_colors.work_text]
mcall SF_DRAW_TEXT, (15 shl 16) +30,, binstr,
mcall , (15 shl 16) +58,, decstr,
mcall , ((240-56*3) shl 16) +58,, Data_String,
mcall , (15 shl 16) +72,, hexstr,
mcall , (15 shl 16)+150,, numstr,
mov ecx, 0x80000000
or ecx, [sys_colors.work_button_text]
mcall , ((300-42) shl 16)+149, , Okstr,3
cmp dword[option_group1],opt1
je @f ;если выбран float, то старшие 4 байта (из double) не печатаем
cmp dword[option_group1],opt3
je @f ;если выбран float, то старшие 4 байта (из double) не печатаем
mov ecx, dword[Data_Double+4]
mcall SF_DRAW_NUMBER, (8 shl 16)+256,,(185 shl 16)+72,[sys_colors.work_text] ; 16-ная
mov ecx, dword[Data_Double+4]
mcall ,(8 shl 16)+512,,(240 shl 16)+30, ; 2-ная
ror ecx, 8
mcall ,,,((240-56) shl 16)+30,
ror ecx, 8
mcall ,,,((240-56*2) shl 16)+30,
ror ecx, 8
mcall ,,,((240-56*3) shl 16)+30,
ror ecx, 8
@@:
mov ecx,dword[Data_Double]
mcall SF_DRAW_NUMBER, (8 shl 16)+256,,(240 shl 16)+72,[sys_colors.work_text] ; 16-ная
mov ecx,dword[Data_Double]
mcall , (8 shl 16)+512,,(240 shl 16)+44, ; 2-ная
ror ecx, 8
mcall ,,,((240-56) shl 16)+44,
ror ecx, 8
mcall ,,,((240-56*2) shl 16)+44,
ror ecx, 8
mcall ,,,((240-56*3) shl 16)+44,
ror ecx, 8
mcall SF_DRAW_LINE, (15 shl 16)+300-15, (137 shl 16)+137, [sys_colors.work_graph]
stdcall [edit_box_draw], edit1
stdcall [option_box_draw], Option_boxes1
mcall SF_REDRAW,SSF_END_DRAW
ret
string1 db 32 dup (0)
string1_end:
;input:
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
;output:
; eax - число
align 4
proc conv_str_to_int uses ebx ecx esi, buf:dword
xor eax,eax
xor ebx,ebx
mov esi,[buf]
;определение отрицательных чисел
xor ecx,ecx
inc ecx
cmp byte[esi],'-'
jne @f
dec ecx
inc esi
@@:
cmp word[esi],'0x'
je .load_digit_16
.load_digit_10: ;считывание 10-тичных цифр
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'9'
jg @f
sub bl,'0'
imul eax,10
add eax,ebx
inc esi
jmp .load_digit_10
jmp @f
.load_digit_16: ;считывание 16-ричных цифр
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;отсеиваем символы >'9' и <'A'
.us1: ;составное условие
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;отсеиваем символы >'F' и <'a'
sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
.us2: ;составное условие
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
cmp ecx,0 ;если число отрицательное
jne @f
sub ecx,eax
mov eax,ecx
@@:
ret
endp
;-------------------------------------------------
title db 'string to double 03.01.21',0
hexstr db 'hex:',0
decstr db 'dec:',0
binstr db 'bin:',0
if lang eq ru_RU
numstr db 'Число:',0
Okstr db 'Ввод',0
else
numstr db 'Number:',0
Okstr db 'Ok',0
end if
mouse_dd dd 0
edit1 edit_box 182, 59, 146, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (string1_end-string1), string1, mouse_dd, 0
editboxes_end:
;option_boxes
opt1 option_box option_group1, 15, 90, 8, 12, 0xffffff, 0x80ff, 0, op_text.1, 17
opt2 option_box option_group1, 15, 106, 8, 12, 0xffffff, 0x80ff, 0, op_text.2, 18
opt3 option_box option_group1, 15, 122, 8, 12, 0xffffff, 0x80ff, 0, op_text.3, 21
op_text: ;текст для радио кнопок
.1 db 'str(dec) -> float'
.2 db 'str(dec) -> double'
.3 db 'float(dec,hex) -> str'
;указатели для option_box
option_group1 dd opt1
Option_boxes1 dd opt1, opt2, opt3, 0
system_dir_0 db '/sys/lib/'
lib_name_0 db 'box_lib.obj',0
l_libs_start:
lib_0 l_libs lib_name_0, library_path, system_dir_0,import_box_lib
l_libs_end:
align 4
import_box_lib:
;dd sz_init1
edit_box_draw dd sz_edit_box_draw
edit_box_key dd sz_edit_box_key
edit_box_mouse dd sz_edit_box_mouse
;edit_box_set_text dd sz_edit_box_set_text
option_box_draw dd aOption_box_draw
option_box_mouse dd aOption_box_mouse
;version_op dd aVersion_op
dd 0,0
;sz_init1 db 'lib_init',0
sz_edit_box_draw db 'edit_box_draw',0
sz_edit_box_key db 'edit_box_key',0
sz_edit_box_mouse db 'edit_box_mouse',0
;sz_edit_box_set_text db 'edit_box_set_text',0
aOption_box_draw db 'option_box_draw',0
aOption_box_mouse db 'option_box_mouse',0
;aVersion_op db 'version_op',0
i_end:
sys_colors system_colors
align 16
sys_path rb 4096
library_path rb 4096
rb 0x400 ;stack
e_end: ; метка конца программы
; Программа для преобразования чисел из строки
; в формат float, double, а также из 10 или 16 ричного
; во float.
; Сделана на основе hex2dec2bin и примеров из файла list2_05.inc
; (автор Кулаков Владимир Геннадьевич 24.05.2002),
; которые ChE переделал с 16 на 32 бита на ассемблер fasm.
; Программа позволяет решать такие задачи:
; 1) число в строковом виде перевести в 4 байта (float) в машинный вид
; 2) число в строковом виде перевести в 8 байт (double) в машинный вид
; 3) число в машинном виде (float) перевести в строковый вид (5 знаков после запятой)
use32
org 0
db 'MENUET01'
dd 1,start,i_end,e_end,e_end,0,sys_path
include '../../../proc32.inc'
include '../../../macros.inc'
include '../../../KOSfuncs.inc'
include '../../../load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../../develop/info3ds/info_fun_float.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
@use_library
align 4
start:
load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузилась наша библиотека
mov ebp,lib_0
cmp dword[ebp+ll_struc_size-4],0
jz @f
mcall SF_TERMINATE_PROCESS
@@:
mcall SF_SET_EVENTS_MASK,0xC0000027
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS, sys_colors, sizeof.system_colors
edit_boxes_set_sys_color edit1,editboxes_end,sys_colors
option_boxes_set_sys_color sys_colors,Option_boxes1
align 4
red:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp eax,1 ; перерисовать окно ?
je red ; если да - на метку red
cmp eax,2 ; нажата клавиша ?
je key ; если да - на key
cmp eax,3 ; нажата кнопка ?
je button ; если да - на button
cmp eax,6
je mouse
jmp still ; если другое событие - в начало цикла
align 4
key: ; нажата клавиша на клавиатуре
mcall SF_GET_KEY
;cmp ah,13
stdcall [edit_box_key], edit1
jmp still ; вернуться к началу цикла
align 4
button:
mcall SF_GET_BUTTON
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
jne @f
mcall SF_TERMINATE_PROCESS
@@:
cmp ah, 5
jne @f
cmp dword[option_group1],opt3
jne .opt_3_end
stdcall conv_str_to_int,[edit1.text]
mov dword[Data_Double],eax
finit
fld dword[Data_Double]
fstp qword[Data_Double]
; Data_Double - преобразуемое число
mov word[NumberSymbolsAD],8 ; количество знаков числа после запятой (1-17)
call DoubleFloat_to_String
call String_crop_0
mov dword[Data_Double],eax ;восстанавливаем значение в формате float
jmp .opt_all_end
.opt_3_end:
mov esi,string1
mov edi,Data_String
cld
mov ecx,32
rep movsb
call String_to_DoubleFloat
cmp dword[option_group1],opt1
jne .opt_all_end ;если выбран float, то преобразуем из ранее полученного double
finit
fld qword[Data_Double] ;читаем из double
fstp dword[Data_Double] ;а возвращаем во float
.opt_all_end:
jmp red
@@:
jmp still
align 4
mouse:
stdcall [edit_box_mouse], edit1
stdcall [option_box_mouse], Option_boxes1
jmp still
;------------------------------------------------
align 4
draw_window:
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS, sys_colors, sizeof.system_colors
mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx, 0x14000000
or edx, [sys_colors.work]
mcall SF_CREATE_WINDOW, (200 shl 16)+300, (200 shl 16)+175, ,,title
mcall SF_DEFINE_BUTTON, ((300-53) shl 16)+38, (145 shl 16)+15, 5, [sys_colors.work_button] ; кнопка Ok
mov ecx, 0x80000000
or ecx, [sys_colors.work_text]
mcall SF_DRAW_TEXT, (15 shl 16) +30,, binstr,
mcall , (15 shl 16) +58,, decstr,
mcall , ((240-56*3) shl 16) +58,, Data_String,
mcall , (15 shl 16) +72,, hexstr,
mcall , (15 shl 16)+150,, numstr,
mov ecx, 0x80000000
or ecx, [sys_colors.work_button_text]
mcall , ((300-42) shl 16)+149, , Okstr,3
cmp dword[option_group1],opt1
je @f ;если выбран float, то старшие 4 байта (из double) не печатаем
cmp dword[option_group1],opt3
je @f ;если выбран float, то старшие 4 байта (из double) не печатаем
mov ecx, dword[Data_Double+4]
mcall SF_DRAW_NUMBER, (8 shl 16)+256,,(185 shl 16)+72,[sys_colors.work_text] ; 16-ная
mov ecx, dword[Data_Double+4]
mcall ,(8 shl 16)+512,,(240 shl 16)+30, ; 2-ная
ror ecx, 8
mcall ,,,((240-56) shl 16)+30,
ror ecx, 8
mcall ,,,((240-56*2) shl 16)+30,
ror ecx, 8
mcall ,,,((240-56*3) shl 16)+30,
ror ecx, 8
@@:
mov ecx,dword[Data_Double]
mcall SF_DRAW_NUMBER, (8 shl 16)+256,,(240 shl 16)+72,[sys_colors.work_text] ; 16-ная
mov ecx,dword[Data_Double]
mcall , (8 shl 16)+512,,(240 shl 16)+44, ; 2-ная
ror ecx, 8
mcall ,,,((240-56) shl 16)+44,
ror ecx, 8
mcall ,,,((240-56*2) shl 16)+44,
ror ecx, 8
mcall ,,,((240-56*3) shl 16)+44,
ror ecx, 8
mcall SF_DRAW_LINE, (15 shl 16)+300-15, (137 shl 16)+137, [sys_colors.work_graph]
stdcall [edit_box_draw], edit1
stdcall [option_box_draw], Option_boxes1
mcall SF_REDRAW,SSF_END_DRAW
ret
string1 db 32 dup (0)
string1_end:
;input:
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
;output:
; eax - число
align 4
proc conv_str_to_int uses ebx ecx esi, buf:dword
xor eax,eax
xor ebx,ebx
mov esi,[buf]
;определение отрицательных чисел
xor ecx,ecx
inc ecx
cmp byte[esi],'-'
jne @f
dec ecx
inc esi
@@:
cmp word[esi],'0x'
je .load_digit_16
.load_digit_10: ;считывание 10-тичных цифр
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'9'
jg @f
sub bl,'0'
imul eax,10
add eax,ebx
inc esi
jmp .load_digit_10
jmp @f
.load_digit_16: ;считывание 16-ричных цифр
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;отсеиваем символы >'9' и <'A'
.us1: ;составное условие
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;отсеиваем символы >'F' и <'a'
sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
.us2: ;составное условие
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
cmp ecx,0 ;если число отрицательное
jne @f
sub ecx,eax
mov eax,ecx
@@:
ret
endp
;-------------------------------------------------
title db 'string to double 03.01.21',0
hexstr db 'hex:',0
decstr db 'dec:',0
binstr db 'bin:',0
if lang eq ru_RU
numstr db 'Число:',0
Okstr db 'Ввод',0
else ; Default to en_US
numstr db 'Number:',0
Okstr db 'Ok',0
end if
mouse_dd dd 0
edit1 edit_box 182, 59, 146, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (string1_end-string1), string1, mouse_dd, 0
editboxes_end:
;option_boxes
opt1 option_box option_group1, 15, 90, 8, 12, 0xffffff, 0x80ff, 0, op_text.1, 17
opt2 option_box option_group1, 15, 106, 8, 12, 0xffffff, 0x80ff, 0, op_text.2, 18
opt3 option_box option_group1, 15, 122, 8, 12, 0xffffff, 0x80ff, 0, op_text.3, 21
op_text: ;текст для радио кнопок
.1 db 'str(dec) -> float'
.2 db 'str(dec) -> double'
.3 db 'float(dec,hex) -> str'
;указатели для option_box
option_group1 dd opt1
Option_boxes1 dd opt1, opt2, opt3, 0
system_dir_0 db '/sys/lib/'
lib_name_0 db 'box_lib.obj',0
l_libs_start:
lib_0 l_libs lib_name_0, library_path, system_dir_0,import_box_lib
l_libs_end:
align 4
import_box_lib:
;dd sz_init1
edit_box_draw dd sz_edit_box_draw
edit_box_key dd sz_edit_box_key
edit_box_mouse dd sz_edit_box_mouse
;edit_box_set_text dd sz_edit_box_set_text
option_box_draw dd aOption_box_draw
option_box_mouse dd aOption_box_mouse
;version_op dd aVersion_op
dd 0,0
;sz_init1 db 'lib_init',0
sz_edit_box_draw db 'edit_box_draw',0
sz_edit_box_key db 'edit_box_key',0
sz_edit_box_mouse db 'edit_box_mouse',0
;sz_edit_box_set_text db 'edit_box_set_text',0
aOption_box_draw db 'option_box_draw',0
aOption_box_mouse db 'option_box_mouse',0
;aVersion_op db 'version_op',0
i_end:
sys_colors system_colors
align 16
sys_path rb 4096
library_path rb 4096
rb 0x400 ;stack
e_end: ; метка конца программы
+501 -491
View File
@@ -1,491 +1,501 @@
sz htext,'TINYPAD ',APP_VERSION
menubar_res main_menu,\
ru,'Файл' ,mm.File ,onshow.file ,\
ru,'Правка' ,mm.Edit ,onshow.edit ,\
ru,'Поиск' ,mm.Search ,onshow.search ,\
ru,'Запуск' ,mm.Run ,onshow.run ,\
ru,'Кодировка',mm.Encoding,onshow.recode ,\
ru,'Опции' ,mm.Options ,onshow.options,\
\
en,'File' ,mm.File ,onshow.file ,\
en,'Edit' ,mm.Edit ,onshow.edit ,\
en,'Search' ,mm.Search ,onshow.search ,\
en,'Run' ,mm.Run ,onshow.run ,\
en,'Encoding' ,mm.Encoding,onshow.recode ,\
en,'Options' ,mm.Options ,onshow.options,\
\
it,'File' ,mm.File ,onshow.file ,\
it,'Modificare' ,mm.Edit ,onshow.edit ,\
it,'Ricerca' ,mm.Search ,onshow.search ,\
it,'Correre' ,mm.Run ,onshow.run ,\
it,'Codifica' ,mm.Encoding,onshow.recode ,\
it,'Opzioni' ,mm.Options ,onshow.options,\
\
et,'Fail' ,mm.File ,onshow.file ,\
et,'Muuda' ,mm.Edit ,onshow.edit ,\
et,'Otsi' ,mm.Search ,onshow.search ,\
et,'Kфivita' ,mm.Run ,onshow.run ,\
et,'Kodeering',mm.Encoding,onshow.recode ,\
et,'Seaded' ,mm.Options ,onshow.options,\
\
sp,'Archivo' ,mm.File ,onshow.file ,\
sp,'Editar' ,mm.Edit ,onshow.edit ,\
sp,'Buscar' ,mm.Search ,onshow.search ,\
sp,'Ejecutar' ,mm.Run ,onshow.run ,\
sp,'Codificaciєn',mm.Encoding,onshow.recode,\
sp,'Opciones' ,mm.Options ,onshow.options
popup_res mm.File,\
ru,'Новый' ,'Ctrl+N' ,New ,\
ru,'Открыть...','Ctrl+O' ,Open ,\
ru,'Сохранить' ,'Ctrl+S' ,Save ,\
ru,'Сохранить как...','Ctrl+Shift+S',SaveAs,\
ru,'-','',,\
ru,'Закрыть' ,'Ctrl+F4' ,Close ,\
ru,'-','',,\
ru,'Выход' ,'Alt+X' ,Exit ,\
\
en,'New' ,'Ctrl+N' ,New ,\
en,'Open...' ,'Ctrl+O' ,Open ,\
en,'Save' ,'Ctrl+S' ,Save ,\
en,'Save as...','Ctrl+Shift+S',SaveAs ,\
en,'-','',,\
en,'Close' ,'Ctrl+F4' ,Close ,\
en,'-','',,\
en,'Exit' ,'Alt+X' ,Exit ,\
\
it,'Nuovo' ,'Ctrl+N' ,New ,\
it,'Aperto...' ,'Ctrl+O' ,Open ,\
it,'Salva' ,'Ctrl+S' ,Save ,\
it,'Salva come...','Ctrl+Shift+S',SaveAs ,\
it,'-','',,\
it,'Chiudi' ,'Ctrl+F4' ,Close ,\
it,'-','',,\
it,'Uscita' ,'Alt+X' ,Exit ,\
\
et,'Uus' ,'Ctrl+N' ,New ,\
et,'Ava...' ,'Ctrl+O' ,Open ,\
et,'Salvesta' ,'Ctrl+S' ,Save ,\
et,'Salvesta nimega...','Ctrl+Shift+S',SaveAs,\
et,'-','',,\
et,'Sulge' ,'Ctrl+F4' ,Close ,\
et,'-','',,\
et,'Vфlju' ,'Alt+X' ,Exit ,\
\
sp,'Nuevo' ,'Ctrl+N' ,New ,\
sp,'Abrir...' ,'Ctrl+O' ,Open ,\
sp,'Guardar' ,'Ctrl+S' ,Save ,\
sp,'Guardar como...','Ctrl+Shift+S',SaveAs,\
sp,'-','',,\
sp,'Cerrar' ,'Ctrl+F4',Close,\
sp,'-','',,\
sp,'Salir' ,'Alt+X' ,Exit
popup_res mm.Edit,\
ru,'Вырезать' ,'Ctrl+X',Cut ,\
ru,'Копировать' ,'Ctrl+C',Copy ,\
ru,'Вставить' ,'Ctrl+V',Insert,\
ru,'Удалить' ,'' ,Delete,\
ru,'-','',,\
ru,'Выделить всё' ,'Ctrl+A',SelAll,\
\
en,'Cut' ,'Ctrl+X',Cut ,\
en,'Copy' ,'Ctrl+C',Copy ,\
en,'Paste' ,'Ctrl+V',Insert,\
en,'Delete' ,'' ,Delete,\
en,'-','',,\
en,'Select all','Ctrl+A',SelAll,\
\
it,'Taglio' ,'Ctrl+X',Cut ,\
it,'Copia' ,'Ctrl+C',Copy ,\
it,'Incolla' ,'Ctrl+V',Insert,\
it,'Elimina' ,'' ,Delete,\
it,'-','',,\
it,'Seleziona tutto','Ctrl+A',SelAll,\
\
et,'Lїika' ,'Ctrl+X',Cut ,\
et,'Kopeeri' ,'Ctrl+C',Copy ,\
et,'Kleebi' ,'Ctrl+V',Insert,\
et,'Kustuta' ,'' ,Delete,\
et,'-','',,\
et,'Vali kїik','Ctrl+A',SelAll,\
\
sp,'Cortar' ,'Ctrl+X',Cut ,\
sp,'Copiar' ,'Ctrl+C',Copy ,\
sp,'Pegar' ,'Ctrl+V',Insert,\
sp,'Eliminar' ,'' ,Delete,\
sp,'-','',,\
sp,'Seleccionar todo','Ctrl+A',SelAll
popup_res mm.Search,\
ru,'Перейти...' ,'Ctrl+G',Position,\
ru,'-','',,\
ru,'Найти...' ,'Ctrl+F',Find ,\
ru,'Найти далее','F3' ,FindNext,\
ru,'Заменить...','Ctrl+H',Replace ,\
\
en,'Position...','Ctrl+G',Position,\
en,'-','',,\
en,'Find...' ,'Ctrl+F',Find ,\
en,'Find next' ,'F3' ,FindNext,\
en,'Replace...' ,'Ctrl+H',Replace ,\
\
it,'Posizione...','Ctrl+G',Position,\
it,'-','',,\
it,'Trova...' ,'Ctrl+F',Find ,\
it,'Trova il prossimo' ,'F3' ,FindNext,\
it,'Sostituire...' ,'Ctrl+H',Replace ,\
\
et,'Positsioon...','Ctrl+G',Position,\
et,'-','',,\
et,'Leia...' ,'Ctrl+F',Find ,\
et,'Leia jфrgmine','F3' ,FindNext,\
et,'Asenda...' ,'Ctrl+H',Replace ,\
\
sp,'Posiciєn...' ,'Ctrl+G',Position,\
sp,'-','',,\
sp,'Buscar...' ,'Ctrl+F',Find ,\
sp,'Buscar siguiente','F3' ,FindNext,\
sp,'Reemplazar...','Ctrl+H',Replace
popup_res mm.Run,\
ru,'Запустить' ,'F9' ,Run ,\
ru,'Запустить в дебаггере','F10',Debug ,\
ru,'Компилировать' ,'Ctrl+F9',Compile ,\
ru,'-','',,\
ru,'Доска отладки' ,'' ,DbgBoard,\
ru,'Системные функции','' ,SysFuncs,\
\
en,'Run' ,'F9' ,Run ,\
en,'Run in debugger' ,'F10' ,Debug ,\
en,'Compile' ,'Ctrl+F9',Compile ,\
en,'-','',,\
en,'Debug board' ,'' ,DbgBoard,\
en,'System functions' ,'' ,SysFuncs,\
\
it,'Correre' ,'F9' ,Run ,\
it,'Esegui nel debugger','F10',Debug ,\
it,'Compilare','Ctrl+F9',Compile ,\
it,'-','',,\
it,'Scheda di debug' ,'' ,DbgBoard,\
it,'Funzioni di sistema','' ,SysFuncs,\
\
et,'Kфivita' ,'F9' ,Run ,\
et,'Kфivita aastal siluri','F10',Debug ,\
et,'Kompileeri' ,'Ctrl+F9',Compile ,\
et,'-','',,\
et,'Silumis paneel' ,'' ,DbgBoard,\
et,'S№steemi funktsioonid','' ,SysFuncs,\
\
sp,'Ejecutar' ,'F9' ,Run ,\
sp,'Ejecutar en el depurador','F10',Debug,\
sp,'Compilar' ,'Ctrl+F9',Compile ,\
sp,'-','',,\
sp,'Depuraciєn' ,'' ,DbgBoard,\
sp,'Funciones del sistema' ,'',SysFuncs
popup_res mm.Encoding,\
@!,<'CP866 ',0x1A,' CP1251'>,'',CP866.CP1251,\
@!,<'CP1251 ',0x1A,' CP866' >,'',CP1251.CP866,\
@!,<'-'>,'',,\
@!,<'CP866 ',0x1A,' KOI8-R'>,'',CP866.KOI8R ,\
@!,<'KOI8-R ',0x1A,' CP866' >,'',KOI8R.CP866 ,\
@!,<'-'>,'',,\
@!,<'CP1251 ',0x1A,' KOI8-R'>,'',CP1251.KOI8R,\
@!,<'KOI8-R ',0x1A,' CP1251'>,'',KOI8R.CP1251
popup_res mm.Options,\
ru,'Увеличить' ,'Ctrl +',ZoomIn ,\
ru,'Уменьшить' ,'Ctrl -',ZoomOut ,\
ru,'-','',,\
ru,'Номера строк' ,'',LineNumbers ,\
ru,'Безопасное выделение' ,'',SecureSel ,\
ru,'Автоматические скобки' ,'',AutoBrackets,\
ru,'Автоматический отступ' ,'',AutoIndents ,\
ru,'Оптимальное сохранение' ,'',OptimalFill ,\
ru,'-','',,\
ru,'Внешний вид...' ,'',Appearance ,\
\
en,'Zoom in' ,'Ctrl +',ZoomIn ,\
en,'Zoom out' ,'Ctrl -',ZoomOut ,\
en,'-','',,\
en,'Line numbers' ,'',LineNumbers ,\
en,'Secure selection' ,'',SecureSel ,\
en,'Automatic brackets' ,'',AutoBrackets,\
en,'Automatic indents' ,'',AutoIndents ,\
en,'Optimal fill on saving' ,'',OptimalFill ,\
en,'-','',,\
en,'Appearance...' ,'',Appearance ,\
\
it,'Ingrandire' ,'Ctrl +',ZoomIn ,\
it,'Rimpicciolisci' ,'Ctrl -',ZoomOut ,\
it,'-','',,\
it,'Numeri di riga' ,'',LineNumbers ,\
it,'Selezione sicura' ,'',SecureSel ,\
it,'Staffe automatiche' ,'',AutoBrackets,\
it,'Rientri automatici' ,'',AutoIndents ,\
it,'Combina spazi' ,'',OptimalFill ,\
it,'-','',,\
it,'Aspetto...' ,'',Appearance ,\
\
et,'Zoom in' ,'Ctrl +',ZoomIn ,\
et,'Zoom out' ,'Ctrl -',ZoomOut ,\
et,'-','',,\
et,'Rea numbrid' ,'',LineNumbers ,\
et,'Turvaline valimine' ,'',SecureSel ,\
et,'Automaatsed sulud' ,'',AutoBrackets,\
et,'Automaatsed taandread' ,'',AutoIndents ,\
et,'Optimaalne tфitmine salvestamisel','',OptimalFill,\
et,'-','',,\
et,'Vфlimus...' ,'',Appearance ,\
\
sp,'Zoom in' ,'Ctrl +',ZoomIn ,\
sp,'Zoom out' ,'Ctrl -',ZoomOut ,\
sp,'-','',,\
sp,'N·meros en lэneas' ,'',LineNumbers ,\
sp,'Selecciєn segura' ,'',SecureSel ,\
sp,'Parщntesis automсticos' ,'',AutoBrackets,\
sp,'Identaciєn automсtica' ,'',AutoIndents ,\
sp,'Llenado єptimo al guardar','',OptimalFill ,\
sp,'-','',,\
sp,'Apariencia...' ,'',Appearance
lsz s_defname,\
ru,<'Безымянный',0>,\
en,<'Untitled',0>,\
it,<'Senza titolo',0>,\
et,<'Nimetu',0>,\
sp,<'Sin tэtulo',0>
lsz s_modified,\
ru,'Изменено',\
en,'Modified',\
it,'Modificato',\
et,'Muudetud',\
sp,'Modificado'
lsz s_2filename,\
ru,'Имя файла:',\
en,'Filename:',\
en,'Nome del file:',\
et,'Faili nimi:',\
sp,'Nombre de archivo:'
lsz s_2open,\
ru,'Открыть',\
en,'Open',\
it,'Aperto',\
et,'Ava',\
sp,'Abrir'
lsz s_2save,\
ru,'Сохранить',\
en,'Save',\
it,'Salva',\
et,'Salvesta',\
sp,'Guardar'
lsz s_2save_no,\
ru,'Нет',\
en,'No',\
it,'No',\
et,'Ei',\
sp,'No'
lsz s_2find,\
ru,'Найти',\
en,'Find',\
it,'Trova',\
et,'Leia',\
sp,'Buscar'
db ':'
lsz s_2replace,\
ru,'Заменить',\
en,'Replace',\
it,'Sostituire',\
et,'Asenda',\
sp,'Reemplazar'
db ':'
lsz s_2cancel,\
ru,'Отмена',\
en,'Cancel',\
it,'Annulla',\
et,'T№hista',\
sp,'Cancelar'
lsz s_color,\
ru,'Цвет: 0x',\
en,'Color: 0x',\
it,'Colore: 0x',\
et,'Vфrv: 0x',\
sp,'Color: 0x'
lsz s_tabpos,\
ru,'Расположение закладок',\
en,'Tabs placement',\
it,'Posizionamento delle schede',\
et,'Saki asetus',\
sp,'Lugar de tabulador'
lsz s_enter_filename,\
ru,<'Введите имя файла',0>,\
en,<'Enter filename',0>,\
it,<'Inserisci il nome del file',0>,\
et,<'Sisesta faili nimi',0>,\
sp,<'Ingresa el nombre del archivo',0>
lsz s_ask_save,\
ru,<'Желаете сохранить?',0>,\
en,<'Would you like to save?',0>,\
it,<'Vorresti salvare?',0>,\
et,<'Kas soovite salvestada?',0>,\ ; Now correct
sp,<'┐Quieres guardar?',0>
lsz s_enter_text_to_find,\
ru,<'Введите текст для поиска',0>,\
en,<'Enter text to find',0>,\
it,<'Inserisci il testo per trovare',0>,\
et,<'Sisesta otsitav tekst',0>,\
sp,<'Ingresa el texto a buscar',0>
lsz s_enter_text_to_replace,\
ru,<'Введите текст для замены',0>,\
en,<'Enter text to replace',0>,\
it,<'Inserisci il testo da sostituire',0>,\
et,<'Sisesta asendatav tekst',0>,\
sp,<'Ingresa el texto a reemplazar',0>
lsz s_text_not_found,\
ru,<'Достигнут конец файла, текст не найден',0>,\
en,<'Reached end of file, text not found',0>,\
it,<'Raggiunta la fine del file, testo non trovato',0>,\
et,<'Faili lїpp, teksti ei leitud',0>,\
sp,<'Se llegє al final del archivo, texto no encontrado',0>
lszc s_fs_error,b,\
ru,<'Операция завершена успешно (0)',0>,\
ru,<'',0>,\
ru,<'Функция не поддерживается для данной файловой системы (2)',0>,\
ru,<'Неизвестная файловая система (3)',0>,\
ru,<'',0>,\
ru,<'Невозможно открыть файл (5)',0>,\
ru,<'Операция завершена успешно (6)',0>,\
ru,<'Адрес находится за границами памяти программы (7)',0>,\
ru,<'На диске нет свободного места (8)',0>,\
ru,<'Таблица FAT уничтожена (9)',0>,\
ru,<'Доступ запрещён (10)',0>,\
ru,<'Ошибка устройства (11)',0>,\
\
en,<'Operation executed successfully (0)',0>,\
en,<'',0>,\
en,<'Function is not supported for the given filesystem (2)',0>,\
en,<'Unknown filesystem (3)',0>,\
en,<'',0>,\
en,<'Unable to open file (5)',0>,\
en,<'Operation executed successfully (6)',0>,\
en,<'Pointer lies outside of application memory (7)',0>,\
en,<'Disk is full (8)',0>,\
en,<'FAT table is destroyed (9)',0>,\
en,<'Access denied (10)',0>,\
en,<'Device error (11)',0>,\
\
it,<'Operazione eseguita correttamente (0)',0>,\
it,<'',0>,\
it,<'La funzione non e supportata per il file system specificato (2)', 0>, \
it,<'Unknown filesystem (3)',0>,\
it,<'',0>,\
it,<'Impossibile aprire il file (5)',0>,\
it,<'Operazione eseguita correttamente (6)',0>,\
it,<'Il puntatore si trova al di fuori della memoria dell',96,'applicazione (7)', 0>, \
it,<'Il disco e pieno (8)',0>,\
it,<'La tabella FAT e distrutta (9)',0>,\
it,<'Accesso negato (10)',0>,\
it,<'Errore dispositivo (11)',0>,\
\
et,<'Operatsioon kфivitati edukalt (0)',0>,\
et,<'',0>,\
et,<'Failis№steem ei toeta funktsiooni (2)',0>,\
et,<'Tundmatu failis№steem (3)',0>,\
et,<'',0>,\
et,<'Faili ei suudetud avada (5)',0>,\
et,<'Operatsioon kфivitatud edukalt (6)',0>,\
et,<'Viit on vфljaspool programmi mфlu (7)',0>,\
et,<'Ketas tфis (8)',0>,\
et,<'FAT tabel hфvitatud (9)',0>,\
et,<'Juurdepффs keelatud (10)',0>,\
et,<'Seadme viga (11)',0>,\
\
sp,<'Operaciєn ejecutada correctamente (0)',0>,\
sp,<'',0>,\
sp,<'La funciєn no estс soportada por el sistema de archivos dado (2)',0>,\
sp,<'Sistema de archivos desconocido (3)',0>,\
sp,<'',0>,\
sp,<'No es posible abrir el archivo (5)',0>,\
sp,<'Operaciєn ejecutada correctamente (6)',0>,\
sp,<'El puntero estс fuera de la memoria de la aplicaciєn (7)',0>,\
sp,<'El disco estс lleno (8)',0>,\
sp,<'La tabla FAT estс destruida (9)',0>,\
sp,<'Acceso denegado (10)',0>,\
sp,<'Error de dispositivo (11)',0>
lszc s_appearance,b,\
ru,'Текст',\
ru,'Фон',\
ru,'Текст выделения',\
ru,'Фон выделения',\
ru,'Символы',\
ru,'Числа',\
ru,'Строки',\
ru,'Комментарии',\
ru,'Изменёные строки',\
ru,'Сохранённые строки',\
\
en,'Text',\
en,'Background',\
en,'Selection text',\
en,'Selection background',\
en,'Symbols',\
en,'Numbers',\
en,'Strings',\
en,'Comments',\
en,'Modified lines',\
en,'Saved lines',\
\
it,'Testo',\
it,'Sfondo',\
it,'Testo di selezione',\
it,'Sfondo di selezione',\
it,'Simboli',\
it,'Numeri',\
it,'Stringhe',\
it,'Commenti',\
it,'Linee modificate',\
it,'Linee salvate',\
\
et,'Tekst',\
et,'Taust',\
et,'Valitud tekst',\
et,'Valitud taust',\
et,'S№mbolid',\
et,'Numbrid',\
et,'Stringid',\
et,'Kommentaarid',\
et,'Muudetud read',\
et,'Salvestatud read',\
\
sp,'Texto',\
sp,'Fondo',\
sp,'Texto de selecciєn',\
sp,'Fondo de selecciєn',\
sp,'Sэmbolos',\
sp,'N·meros',\
sp,'Cadenas',\
sp,'Comentarios',\
sp,'Lэneas modificadas',\
sp,'Lэneas guardadas'
lsz sysfuncs_filename,\
ru,<'SYSFUNCR.TXT',0>,\
en,<'SYSFUNCS.TXT',0>,\
it,<'SYSFUNCS.TXT',0>,\
et,<'SYSFUNCET.TXT',0>,\
sp,<'SYSFUNCS.TXT',0>
sz s_example,'/sys/example.asm'
sz s_still ,'still'
sz htext,'TINYPAD ',APP_VERSION
; Language support for locales: ru_RU (CP866), en_US, it_IT, et_EE, es_ES.
menubar_res main_menu,\
ru_RU,'Файл' ,mm.File ,onshow.file ,\
ru_RU,'Правка' ,mm.Edit ,onshow.edit ,\
ru_RU,'Поиск' ,mm.Search ,onshow.search ,\
ru_RU,'Запуск' ,mm.Run ,onshow.run ,\
ru_RU,'Кодировка',mm.Encoding,onshow.recode ,\
ru_RU,'Опции' ,mm.Options ,onshow.options,\
\
en_US,'File' ,mm.File ,onshow.file ,\
en_US,'Edit' ,mm.Edit ,onshow.edit ,\
en_US,'Search' ,mm.Search ,onshow.search ,\
en_US,'Run' ,mm.Run ,onshow.run ,\
en_US,'Encoding' ,mm.Encoding,onshow.recode ,\
en_US,'Options' ,mm.Options ,onshow.options,\
\
it_IT,'File' ,mm.File ,onshow.file ,\
it_IT,'Modificare' ,mm.Edit ,onshow.edit ,\
it_IT,'Ricerca' ,mm.Search ,onshow.search ,\
it_IT,'Correre' ,mm.Run ,onshow.run ,\
it_IT,'Codifica' ,mm.Encoding,onshow.recode ,\
it_IT,'Opzioni' ,mm.Options ,onshow.options,\
\
et_EE,'Fail' ,mm.File ,onshow.file ,\
et_EE,'Muuda' ,mm.Edit ,onshow.edit ,\
et_EE,'Otsi' ,mm.Search ,onshow.search ,\
et_EE,'Kфivita' ,mm.Run ,onshow.run ,\
et_EE,'Kodeering',mm.Encoding,onshow.recode ,\
et_EE,'Seaded' ,mm.Options ,onshow.options,\
\
es_ES,'Archivo' ,mm.File ,onshow.file ,\
es_ES,'Editar' ,mm.Edit ,onshow.edit ,\
es_ES,'Buscar' ,mm.Search ,onshow.search ,\
es_ES,'Ejecutar' ,mm.Run ,onshow.run ,\
es_ES,'Codificaciєn',mm.Encoding,onshow.recode,\
es_ES,'Opciones' ,mm.Options ,onshow.options
popup_res mm.File,\
ru_RU,'Новый' ,'Ctrl+N' ,New ,\
ru_RU,'Открыть...','Ctrl+O' ,Open ,\
ru_RU,'Сохранить' ,'Ctrl+S' ,Save ,\
ru_RU,'Сохранить как...','Ctrl+Shift+S',SaveAs,\
ru_RU,'-','',,\
ru_RU,'Закрыть' ,'Ctrl+F4' ,Close ,\
ru_RU,'-','',,\
ru_RU,'Выход' ,'Alt+X' ,Exit ,\
\
en_US,'New' ,'Ctrl+N' ,New ,\
en_US,'Open...' ,'Ctrl+O' ,Open ,\
en_US,'Save' ,'Ctrl+S' ,Save ,\
en_US,'Save as...','Ctrl+Shift+S',SaveAs ,\
en_US,'-','',,\
en_US,'Close' ,'Ctrl+F4' ,Close ,\
en_US,'-','',,\
en_US,'Exit' ,'Alt+X' ,Exit ,\
\
it_IT,'Nuovo' ,'Ctrl+N' ,New ,\
it_IT,'Aperto...' ,'Ctrl+O' ,Open ,\
it_IT,'Salva' ,'Ctrl+S' ,Save ,\
it_IT,'Salva come...','Ctrl+Shift+S',SaveAs ,\
it_IT,'-','',,\
it_IT,'Chiudi' ,'Ctrl+F4' ,Close ,\
it_IT,'-','',,\
it_IT,'Uscita' ,'Alt+X' ,Exit ,\
\
et_EE,'Uus' ,'Ctrl+N' ,New ,\
et_EE,'Ava...' ,'Ctrl+O' ,Open ,\
et_EE,'Salvesta' ,'Ctrl+S' ,Save ,\
et_EE,'Salvesta nimega...','Ctrl+Shift+S',SaveAs,\
et_EE,'-','',,\
et_EE,'Sulge' ,'Ctrl+F4' ,Close ,\
et_EE,'-','',,\
et_EE,'Vфlju' ,'Alt+X' ,Exit ,\
\
es_ES,'Nuevo' ,'Ctrl+N' ,New ,\
es_ES,'Abrir...' ,'Ctrl+O' ,Open ,\
es_ES,'Guardar' ,'Ctrl+S' ,Save ,\
es_ES,'Guardar como...','Ctrl+Shift+S',SaveAs,\
es_ES,'-','',,\
es_ES,'Cerrar' ,'Ctrl+F4',Close,\
es_ES,'-','',,\
es_ES,'Salir' ,'Alt+X' ,Exit
popup_res mm.Edit,\
ru_RU,'Вырезать' ,'Ctrl+X',Cut ,\
ru_RU,'Копировать' ,'Ctrl+C',Copy ,\
ru_RU,'Вставить' ,'Ctrl+V',Insert,\
ru_RU,'Удалить' ,'' ,Delete,\
ru_RU,'-','',,\
ru_RU,'Выделить всё' ,'Ctrl+A',SelAll,\
\
en_US,'Cut' ,'Ctrl+X',Cut ,\
en_US,'Copy' ,'Ctrl+C',Copy ,\
en_US,'Paste' ,'Ctrl+V',Insert,\
en_US,'Delete' ,'' ,Delete,\
en_US,'-','',,\
en_US,'Select all','Ctrl+A',SelAll,\
\
it_IT,'Taglio' ,'Ctrl+X',Cut ,\
it_IT,'Copia' ,'Ctrl+C',Copy ,\
it_IT,'Incolla' ,'Ctrl+V',Insert,\
it_IT,'Elimina' ,'' ,Delete,\
it_IT,'-','',,\
it_IT,'Seleziona tutto','Ctrl+A',SelAll,\
\
et_EE,'Lїika' ,'Ctrl+X',Cut ,\
et_EE,'Kopeeri' ,'Ctrl+C',Copy ,\
et_EE,'Kleebi' ,'Ctrl+V',Insert,\
et_EE,'Kustuta' ,'' ,Delete,\
et_EE,'-','',,\
et_EE,'Vali kїik','Ctrl+A',SelAll,\
\
es_ES,'Cortar' ,'Ctrl+X',Cut ,\
es_ES,'Copiar' ,'Ctrl+C',Copy ,\
es_ES,'Pegar' ,'Ctrl+V',Insert,\
es_ES,'Eliminar' ,'' ,Delete,\
es_ES,'-','',,\
es_ES,'Seleccionar todo','Ctrl+A',SelAll
popup_res mm.Search,\
ru_RU,'Перейти...' ,'Ctrl+G',Position,\
ru_RU,'-','',,\
ru_RU,'Найти...' ,'Ctrl+F',Find ,\
ru_RU,'Найти далее','F3' ,FindNext,\
ru_RU,'Заменить...','Ctrl+H',Replace ,\
\
en_US,'Position...','Ctrl+G',Position,\
en_US,'-','',,\
en_US,'Find...' ,'Ctrl+F',Find ,\
en_US,'Find next' ,'F3' ,FindNext,\
en_US,'Replace...' ,'Ctrl+H',Replace ,\
\
it_IT,'Posizione...','Ctrl+G',Position,\
it_IT,'-','',,\
it_IT,'Trova...' ,'Ctrl+F',Find ,\
it_IT,'Trova il prossimo' ,'F3' ,FindNext,\
it_IT,'Sostituire...' ,'Ctrl+H',Replace ,\
\
et_EE,'Positsioon...','Ctrl+G',Position,\
et_EE,'-','',,\
et_EE,'Leia...' ,'Ctrl+F',Find ,\
et_EE,'Leia jфrgmine','F3' ,FindNext,\
et_EE,'Asenda...' ,'Ctrl+H',Replace ,\
\
es_ES,'Posiciєn...' ,'Ctrl+G',Position,\
es_ES,'-','',,\
es_ES,'Buscar...' ,'Ctrl+F',Find ,\
es_ES,'Buscar siguiente','F3' ,FindNext,\
es_ES,'Reemplazar...','Ctrl+H',Replace
popup_res mm.Run,\
ru_RU,'Запустить' ,'F9' ,Run ,\
ru_RU,'Запустить в дебаггере','F10',Debug ,\
ru_RU,'Компилировать' ,'Ctrl+F9',Compile ,\
ru_RU,'-','',,\
ru_RU,'Доска отладки' ,'' ,DbgBoard,\
ru_RU,'Системные функции','' ,SysFuncs,\
\
en_US,'Run' ,'F9' ,Run ,\
en_US,'Run in debugger' ,'F10' ,Debug ,\
en_US,'Compile' ,'Ctrl+F9',Compile ,\
en_US,'-','',,\
en_US,'Debug board' ,'' ,DbgBoard,\
en_US,'System functions' ,'' ,SysFuncs,\
\
it_IT,'Correre' ,'F9' ,Run ,\
it_IT,'Esegui nel debugger','F10',Debug ,\
it_IT,'Compilare','Ctrl+F9',Compile ,\
it_IT,'-','',,\
it_IT,'Scheda di debug' ,'' ,DbgBoard,\
it_IT,'Funzioni di sistema','' ,SysFuncs,\
\
et_EE,'Kфivita' ,'F9' ,Run ,\
et_EE,'Kфivita aastal siluri','F10',Debug ,\
et_EE,'Kompileeri' ,'Ctrl+F9',Compile ,\
et_EE,'-','',,\
et_EE,'Silumis paneel' ,'' ,DbgBoard,\
et_EE,'S№steemi funktsioonid','' ,SysFuncs,\
\
es_ES,'Ejecutar' ,'F9' ,Run ,\
es_ES,'Ejecutar en el depurador','F10',Debug,\
es_ES,'Compilar' ,'Ctrl+F9',Compile ,\
es_ES,'-','',,\
es_ES,'Depuraciєn' ,'' ,DbgBoard,\
es_ES,'Funciones del sistema' ,'',SysFuncs
popup_res mm.Encoding,\
@!,<'CP866 ',0x1A,' CP1251'>,'',CP866.CP1251,\
@!,<'CP1251 ',0x1A,' CP866' >,'',CP1251.CP866,\
@!,<'-'>,'',,\
@!,<'CP866 ',0x1A,' KOI8-R'>,'',CP866.KOI8R ,\
@!,<'KOI8-R ',0x1A,' CP866' >,'',KOI8R.CP866 ,\
@!,<'-'>,'',,\
@!,<'CP1251 ',0x1A,' KOI8-R'>,'',CP1251.KOI8R,\
@!,<'KOI8-R ',0x1A,' CP1251'>,'',KOI8R.CP1251
popup_res mm.Options,\
ru_RU,'Увеличить' ,'Ctrl +',ZoomIn ,\
ru_RU,'Уменьшить' ,'Ctrl -',ZoomOut ,\
ru_RU,'-','',,\
ru_RU,'Номера строк' ,'',LineNumbers ,\
ru_RU,'Безопасное выделение' ,'',SecureSel ,\
ru_RU,'Автоматические скобки' ,'',AutoBrackets,\
ru_RU,'Автоматический отступ' ,'',AutoIndents ,\
ru_RU,'Оптимальное сохранение' ,'',OptimalFill ,\
ru_RU,'-','',,\
ru_RU,'Внешний вид...' ,'',Appearance ,\
\
en_US,'Zoom in' ,'Ctrl +',ZoomIn ,\
en_US,'Zoom out' ,'Ctrl -',ZoomOut ,\
en_US,'-','',,\
en_US,'Line numbers' ,'',LineNumbers ,\
en_US,'Secure selection' ,'',SecureSel ,\
en_US,'Automatic brackets' ,'',AutoBrackets,\
en_US,'Automatic indents' ,'',AutoIndents ,\
en_US,'Optimal fill on saving' ,'',OptimalFill ,\
en_US,'-','',,\
en_US,'Appearance...' ,'',Appearance ,\
\
it_IT,'Ingrandire' ,'Ctrl +',ZoomIn ,\
it_IT,'Rimpicciolisci' ,'Ctrl -',ZoomOut ,\
it_IT,'-','',,\
it_IT,'Numeri di riga' ,'',LineNumbers ,\
it_IT,'Selezione sicura' ,'',SecureSel ,\
it_IT,'Staffe automatiche' ,'',AutoBrackets,\
it_IT,'Rientri automatici' ,'',AutoIndents ,\
it_IT,'Combina spazi' ,'',OptimalFill ,\
it_IT,'-','',,\
it_IT,'Aspetto...' ,'',Appearance ,\
\
et_EE,'Zoom in' ,'Ctrl +',ZoomIn ,\
et_EE,'Zoom out' ,'Ctrl -',ZoomOut ,\
et_EE,'-','',,\
et_EE,'Rea numbrid' ,'',LineNumbers ,\
et_EE,'Turvaline valimine' ,'',SecureSel ,\
et_EE,'Automaatsed sulud' ,'',AutoBrackets,\
et_EE,'Automaatsed taandread' ,'',AutoIndents ,\
et_EE,'Optimaalne tфitmine salvestamisel','',OptimalFill,\
et_EE,'-','',,\
et_EE,'Vфlimus...' ,'',Appearance ,\
\
es_ES,'Zoom in' ,'Ctrl +',ZoomIn ,\
es_ES,'Zoom out' ,'Ctrl -',ZoomOut ,\
es_ES,'-','',,\
es_ES,'N·meros en lэneas' ,'',LineNumbers ,\
es_ES,'Selecciєn segura' ,'',SecureSel ,\
es_ES,'Parщntesis automсticos' ,'',AutoBrackets,\
es_ES,'Identaciєn automсtica' ,'',AutoIndents ,\
es_ES,'Llenado єptimo al guardar','',OptimalFill ,\
es_ES,'-','',,\
es_ES,'Apariencia...' ,'',Appearance
lsz s_defname,\
ru_RU,<'Безымянный',0>,\
en_US,<'Untitled',0>,\
it_IT,<'Senza titolo',0>,\
et_EE,<'Nimetu',0>,\
es_ES,<'Sin tэtulo',0>
lsz s_modified,\
ru_RU,'Изменено',\
en_US,'Modified',\
it_IT,'Modificato',\
et_EE,'Muudetud',\
es_ES,'Modificado'
lsz s_2filename,\
ru_RU,'Имя файла:',\
en_US,'Filename:',\
en_US,'Nome del file:',\
et_EE,'Faili nimi:',\
es_ES,'Nombre de archivo:'
lsz s_2open,\
ru_RU,'Открыть',\
en_US,'Open',\
it_IT,'Aperto',\
et_EE,'Ava',\
es_ES,'Abrir'
lsz s_2save,\
ru_RU,'Сохранить',\
en_US,'Save',\
it_IT,'Salva',\
et_EE,'Salvesta',\
es_ES,'Guardar'
lsz s_2save_no,\
ru_RU,'Нет',\
en_US,'No',\
it_IT,'No',\
et_EE,'Ei',\
es_ES,'No'
lsz s_2find,\
ru_RU,'Найти',\
en_US,'Find',\
it_IT,'Trova',\
et_EE,'Leia',\
es_ES,'Buscar'
db ':'
lsz s_2replace,\
ru_RU,'Заменить',\
en_US,'Replace',\
it_IT,'Sostituire',\
et_EE,'Asenda',\
es_ES,'Reemplazar'
db ':'
lsz s_2cancel,\
ru_RU,'Отмена',\
en_US,'Cancel',\
it_IT,'Annulla',\
et_EE,'T№hista',\
es_ES,'Cancelar'
lsz s_color,\
ru_RU,'Цвет: 0x',\
en_US,'Color: 0x',\
it_IT,'Colore: 0x',\
et_EE,'Vфrv: 0x',\
es_ES,'Color: 0x'
lsz s_tabpos,\
ru_RU,'Расположение закладок',\
en_US,'Tabs placement',\
it_IT,'Posizionamento delle schede',\
et_EE,'Saki asetus',\
es_ES,'Lugar de tabulador'
lsz s_enter_filename,\
ru_RU,<'Введите имя файла',0>,\
en_US,<'Enter filename',0>,\
it_IT,<'Inserisci il nome del file',0>,\
et_EE,<'Sisesta faili nimi',0>,\
es_ES,<'Ingresa el nombre del archivo',0>
lsz s_ask_save,\
ru_RU,<'Желаете сохранить?',0>,\
en_US,<'Would you like to save?',0>,\
it_IT,<'Vorresti salvare?',0>,\
et_EE,<'Kas soovite salvestada?',0>,\
es_ES,<'┐Quieres guardar?',0>
lsz s_enter_text_to_find,\
ru_RU,<'Введите текст для поиска',0>,\
en_US,<'Enter text to find',0>,\
it_IT,<'Inserisci il testo per trovare',0>,\
et_EE,<'Sisesta otsitav tekst',0>,\
es_ES,<'Ingresa el texto a buscar',0>
lsz s_enter_text_to_replace,\
ru_RU,<'Введите текст для замены',0>,\
en_US,<'Enter text to replace',0>,\
it_IT,<'Inserisci il testo da sostituire',0>,\
et_EE,<'Sisesta asendatav tekst',0>,\
es_ES,<'Ingresa el texto a reemplazar',0>
lsz s_text_not_found,\
ru_RU,<'Достигнут конец файла, текст не найден',0>,\
en_US,<'Reached end of file, text not found',0>,\
it_IT,<'Raggiunta la fine del file, testo non trovato',0>,\
et_EE,<'Faili lїpp, teksti ei leitud',0>,\
es_ES,<'Se llegє al final del archivo, texto no encontrado',0>
lszc s_fs_error,b,\
ru_RU,<'Операция завершена успешно (0)',0>,\
ru_RU,<'',0>,\
ru_RU,<'Функция не поддерживается для данной файловой системы (2)',0>,\
ru_RU,<'Неизвестная файловая система (3)',0>,\
ru_RU,<'',0>,\
ru_RU,<'Невозможно открыть файл (5)',0>,\
ru_RU,<'Операция завершена успешно (6)',0>,\
ru_RU,<'Адрес находится за границами памяти программы (7)',0>,\
ru_RU,<'На диске нет свободного места (8)',0>,\
ru_RU,<'Таблица FAT уничтожена (9)',0>,\
ru_RU,<'Доступ запрещён (10)',0>,\
ru_RU,<'Ошибка устройства (11)',0>,\
\
en_US,<'Operation executed successfully (0)',0>,\
en_US,<'',0>,\
en_US,<'Function is not supported for the given filesystem (2)',0>,\
en_US,<'Unknown filesystem (3)',0>,\
en_US,<'',0>,\
en_US,<'Unable to open file (5)',0>,\
en_US,<'Operation executed successfully (6)',0>,\
en_US,<'Pointer lies outside of application memory (7)',0>,\
en_US,<'Disk is full (8)',0>,\
en_US,<'FAT table is destroyed (9)',0>,\
en_US,<'Access denied (10)',0>,\
en_US,<'Device error (11)',0>,\
\
it_IT,<'Operazione eseguita correttamente (0)',0>,\
it_IT,<'',0>,\
it_IT,<'La funzione non e supportata per il file system specificato (2)', 0>, \
it_IT,<'Unknown filesystem (3)',0>,\
it_IT,<'',0>,\
it_IT,<'Impossibile aprire il file (5)',0>,\
it_IT,<'Operazione eseguita correttamente (6)',0>,\
it_IT,<'Il puntatore si trova al di fuori della memoria dell',96,'applicazione (7)', 0>, \
it_IT,<'Il disco e pieno (8)',0>,\
it_IT,<'La tabella FAT e distrutta (9)',0>,\
it_IT,<'Accesso negato (10)',0>,\
it_IT,<'Errore dispositivo (11)',0>,\
\
et_EE,<'Operatsioon kфivitati edukalt (0)',0>,\
et_EE,<'',0>,\
et_EE,<'Failis№steem ei toeta funktsiooni (2)',0>,\
et_EE,<'Tundmatu failis№steem (3)',0>,\
et_EE,<'',0>,\
et_EE,<'Faili ei suudetud avada (5)',0>,\
et_EE,<'Operatsioon kфivitatud edukalt (6)',0>,\
et_EE,<'Viit on vфljaspool programmi mфlu (7)',0>,\
et_EE,<'Ketas tфis (8)',0>,\
et_EE,<'FAT tabel hфvitatud (9)',0>,\
et_EE,<'Juurdepффs keelatud (10)',0>,\
et_EE,<'Seadme viga (11)',0>,\
\
es_ES,<'Operaciєn ejecutada correctamente (0)',0>,\
es_ES,<'',0>,\
es_ES,<'La funciєn no estс soportada por el sistema de archivos dado (2)',0>,\
es_ES,<'Sistema de archivos desconocido (3)',0>,\
es_ES,<'',0>,\
es_ES,<'No es posible abrir el archivo (5)',0>,\
es_ES,<'Operaciєn ejecutada correctamente (6)',0>,\
es_ES,<'El puntero estс fuera de la memoria de la aplicaciєn (7)',0>,\
es_ES,<'El disco estс lleno (8)',0>,\
es_ES,<'La tabla FAT estс destruida (9)',0>,\
es_ES,<'Acceso denegado (10)',0>,\
es_ES,<'Error de dispositivo (11)',0>
lszc s_appearance,b,\
ru_RU,'Текст',\
ru_RU,'Фон',\
ru_RU,'Текст выделения',\
ru_RU,'Фон выделения',\
ru_RU,'Символы',\
ru_RU,'Числа',\
ru_RU,'Строки',\
ru_RU,'Комментарии',\
ru_RU,'Изменёные строки',\
ru_RU,'Сохранённые строки',\
\
en_US,'Text',\
en_US,'Background',\
en_US,'Selection text',\
en_US,'Selection background',\
en_US,'Symbols',\
en_US,'Numbers',\
en_US,'Strings',\
en_US,'Comments',\
en_US,'Modified lines',\
en_US,'Saved lines',\
\
it_IT,'Testo',\
it_IT,'Sfondo',\
it_IT,'Testo di selezione',\
it_IT,'Sfondo di selezione',\
it_IT,'Simboli',\
it_IT,'Numeri',\
it_IT,'Stringhe',\
it_IT,'Commenti',\
it_IT,'Linee modificate',\
it_IT,'Linee salvate',\
\
et_EE,'Tekst',\
et_EE,'Taust',\
et_EE,'Valitud tekst',\
et_EE,'Valitud taust',\
et_EE,'S№mbolid',\
et_EE,'Numbrid',\
et_EE,'Stringid',\
et_EE,'Kommentaarid',\
et_EE,'Muudetud read',\
et_EE,'Salvestatud read',\
\
es_ES,'Texto',\
es_ES,'Fondo',\
es_ES,'Texto de selecciєn',\
es_ES,'Fondo de selecciєn',\
es_ES,'Sэmbolos',\
es_ES,'N·meros',\
es_ES,'Cadenas',\
es_ES,'Comentarios',\
es_ES,'Lэneas modificadas',\
es_ES,'Lэneas guardadas'
lsz sysfuncs_filename,\
ru_RU,<'SYSFUNCR.TXT',0>,\
en_US,<'SYSFUNCS.TXT',0>,\
it_IT,<'SYSFUNCS.TXT',0>,\
et_EE,<'SYSFUNCET.TXT',0>,\
es_ES,<'SYSFUNCS.TXT',0>
sz s_example,'/sys/example.asm'
sz s_still ,'still'
+9 -7
View File
@@ -8,7 +8,7 @@
; ;
; On base SYSTREE FILE COPIER 1.02 ;
; Ivan Poddubny ivan-yar@bk.ru ;
; ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Данная прога еще сырая и глючная но уже кое как работает
@@ -23,11 +23,11 @@
dd 0x10000 ; esp
dd param_area , 0x0 ; I_Param , I_Icon
include 'lang.inc'
include '..\..\..\macros.inc' ; very useful stuff for MeOS
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '..\..\..\macros.inc' ; very useful stuff for MeOS
include 'ascl.inc'
START: ; start of execution
START: ; start of execution
; Параметры:
; db n1 = длина пути к источнику
@@ -187,7 +187,7 @@ draw_window:
mov edi,labelt ; WINDOW LABEL
mcall
mov eax,8
mov ebx,105*65536+290
mov ecx,33*65536+12
@@ -264,12 +264,13 @@ errors:
db "(запись) неизвестная ошибка "
db "Путь к источнику и приемнику не указаны!!! "
db "Путь к приемнику не указан!!! "
else
else ; Default to en_US
text:
db 'SOURCE: | '
db 'DESTINATION: | '
db ' '
db 'x' ; <- END MARKER, DONT DELETE
db 'x' ; <- END MARKER, DO NOT DELETE
labelt:
db 'SYSTREE FILE COPIER'
labellen:
@@ -292,6 +293,7 @@ errors:
db "(write) unknown error "
db "Path to source is not given!!! "
db "Path to destination is not given!!! "
end if
;0123456789012345678901234567890123456789012
File diff suppressed because it is too large Load Diff
+914 -914
View File
File diff suppressed because it is too large Load Diff
+490 -490
View File
@@ -1,490 +1,490 @@
;
; The famous game 15
; Author: Lloyd, coded by Ivushkin Andrey
; Compile with FASM
;
include 'lang.inc'
include '..\..\..\macros.inc' ; decreases program size (not required)
StatusColor equ 0x00ffffff
StatusColor2 equ 0x00dc1e14
BgdColor equ 0x14aabbcc
; Main window dimensions
XXwindow equ 200 shl 16+276
YYwindow equ 200 shl 16+300
; Status bar
XYstatus equ 35 shl 16+283
XXbar equ 35 shl 16+136
YYbar equ 280 shl 16+15
; Buttons
BtnTop equ 28
BtnLeft equ 13
BtnSize equ 60
BtnColor equ 0xafbb55
BtnColor2 equ 0x0228c314
NumColor equ 0x10000000
; Number shifting for nice look
NumShift equ 23 shl 16+23
NumShift2 equ 4 shl 16
; Shuffle button
XXSh equ 202 shl 16+60
YYSh equ 280 shl 16+12
XYShText equ 212 shl 16+283
; Conf button
XXCnf equ 13 shl 16+13
YYCnf equ 280 shl 16+12
XYCnfText equ 18 shl 16+283
; Position of the 'hole'
null equ (curconf+16)
; Amount of moves to perform shuffle
SH_CYCLES equ 400
; (Amount of tasks)-1
CONF_COUNT equ 2
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x2000 ; 8 Kb
dd 0x2000
dd 0x0
dd 0x0
START:
mov [cptr],CONF_COUNT ; number of task
mov eax,3
mcall
mov cl,16
ror eax,cl
mov [generator],eax ; random generator from Tetris
init:
mov ecx,17
movzx eax,[cptr]
inc eax
cmp eax,CONF_COUNT
jna init_ok
xor eax,eax ; cycling 0..CONF_COUNT
init_ok:
mov [cptr],al
mov esi,eax
shl esi,4
add esi,conf
add esi,eax
add al,0x31
mov [txtTitle+17],al ;task number to program title
mov [task],esi
mov edi,curconf
rep movsb ; initial configuration
mov [sts],4
jmp red
SHUF:
call shuffle ; immediate shuffle
red: ; window redraw
call draw_window
still: ; MAIN PROGRAM CYCLE
mov eax,10 ; wait for event
mcall
cmp eax,1 ; redraw? -
je red ; goto red
cmp eax,2 ; key pressed? -
je key ; goto key
cmp eax,3 ; button pressed? -
je button ; goto button
jmp still ; no more events to process
key: ; Key pressed
mov eax,2
mcall
shr eax,8
cmp eax,32 ; <Space> = Shuffle
je SHUF
cmp eax,13 ; <Enter> = Choose task
je init
cmp eax,176
jl still
sub eax,176
cmp eax,3
ja still
movzx eax,byte [eax+correct] ; 'delta' value from correct[]
jmp m_check
button: ; Button pressed
mov eax,17
mcall
shr eax,8
sub eax,2
cmp eax,-1 ; id == 1 (closeme)?
jne noclose
mcall
noclose:
jl SHUF ; Shuffle (id=0) pressed
cmp eax,18
je init ; Conf button pressed
sub al,byte [null]
mov edi,correct
mov ecx,4
repne scasb ; checking for valid move-part 1
jne fail
m_check:
cmp byte[sts],4 ; puzzle completed, blocking buttons
ja still
call move_check ; checking for valid move-part 2
jnc fail
inc [move_count]
call draw_moves
fail:
jmp still ; возвращаемся
; *******************************
; ******* WINDOW DRAWING *******
; *******************************
draw_window:
mcall 12, 1 ; begin draw
mcall 0, XXwindow, YYwindow, BgdColor,, txtTitle ; CREATING WINDOW
mov eax,8 ; SHUFFLE BUTTON
mov ebx,XXSh
mov ecx,YYSh
xor edx,edx
mov esi,BtnColor
mcall
mov ebx,XXCnf ; CONF BUTTON
mov ecx,YYCnf
mov edx,20
;mov esi,BtnColor
mcall
mov ebx, XYShText ; SHUFFLE TEXT
mov ecx, StatusColor
mov edx,txtSh
mov esi,lenSh-txtSh
mov eax,4
mcall
mov ebx, XYCnfText ; CONF TEXT
mov edx,lenVictory-1
mov esi,1
mcall
mov ecx, 16 ; FIELD BUTTONS
dbut:
call draw_button
loop dbut
call draw_moves
mcall 12, 2 ; end of drawing
ret
; *********************************************
; ******* DRAWING A FIELD BUTTON **************
; *********************************************
; ECX - button number
draw_button:
pusha
dec ecx
; calculating button dimensions
mov edi, ecx
lea edx,[ecx+2]
mov ebx,ecx
and ebx,11b
shr ecx,2
imul ebx,BtnSize+3
add ebx,BtnLeft
shl ebx,16
add ebx,BtnSize
imul ecx,BtnSize+3
add ecx,BtnTop
shl ecx,16
add ecx,BtnSize
movzx eax,byte [null]
cmp eax,edi
jne no_hole
pusha
inc ebx
inc ecx
mov edx,BgdColor
mov eax,13 ; clearing - 'hole'
mcall
popa
or edx,0x80000000 ; and removing button under it
no_hole:
mov al,byte[edi+curconf]
mov esi,[task]
cmp al,byte[edi+esi]
je highlight
mov esi,BtnColor
jmp s_rbutton
highlight:
mov esi,BtnColor2
s_rbutton:
mov eax,8 ; set/remove button
mcall
movzx eax,byte [null]
cmp eax,edi
je no_text ; no digits - that's hole
mov edx,ebx
shr ecx,16
mov dx,cx
add edx,NumShift
mov ebx,0x20000
movzx ecx,byte [edi+curconf]
cmp ecx,9
ja two_num
add edx,NumShift2 ; shift to center digits
sub ebx,0x10000
two_num:
mov esi,NumColor
mov eax,47
mcall
no_text:
popa
ret
; *********************************************
; ******* DRAWING STATUS LINE *****************
; *********************************************
draw_moves:
mov eax, 13 ; clear area
mov ebx, XXbar
mov ecx, YYbar
mov edx, BgdColor
mcall
mov eax, 4
mov ebx, XYstatus
mov ecx, StatusColor
cmp ax, [sts]
jl report_victory
jne report_moves
mov edx,txtCnf ; prompt to choose configuration
mov esi,lenCnf-txtCnf
jmp e_dm
report_moves:
mov edx,txtMoves ; how many moves done
mov esi,lenMoves-txtMoves
mov eax,4
mcall
mov esi,ecx
mov edx,ebx
add edx, 40 shl 16
mov ebx,0x030000
movzx ecx, byte[move_count]
mov eax,47
jmp e_dm
report_victory: ; puzzle completed
mov ecx,StatusColor2
mov edx,txtVictory
mov esi,lenVictory-txtVictory
e_dm:
mcall
ret
; *********************************************
; ********* SHUFFLE ***************************
; *********************************************
shuffle:
xor eax,eax
mov [sts],ax
mov [move_count],ax ; reset moves to 0
mov [sh_off],al
mov eax, [generator]
mov ecx,SH_CYCLES
sh_cycle:
sub eax,0x43ab45b5 ; next random number
ror eax,1
xor eax,0x32c4324f
ror eax,1
mov [generator],eax
push eax
and eax,11b ; direction 0..3
movzx eax,byte [eax+correct]
call move_check
pop eax
jnc sh_cycle ; if fails then retry
loop sh_cycle
inc byte[sh_off] ; shuffling complete
ret
; *********************************************
; ********* MOVE VALIDITY CHECK ***************
; *********************************************
; AL - 'DELTA' DIRECTION
move_check:
pusha
mov ah,byte [null]
mov bx,ax
cmp bh,3
ja no_top
cmp al,-4 ; top of field
je no_move
no_top:
cmp bh,12
jb no_bottom
cmp al,4 ; bottom of field
je no_move
no_bottom:
and bh,11b
cmp bh,0
jnz no_left
cmp al,-1 ; left of field
je no_move
no_left:
cmp bh,11b
jnz ok
cmp al,1 ; right of field
je no_move
ok:
mov bx,ax
add bh,bl ; bh-new hole
mov byte [null],bh
movzx ecx,ah
mov al,byte[ecx+curconf]
movzx edx,bh
mov bl,byte[edx+curconf] ; swapping button & hole
mov byte[ecx+curconf],bl
mov byte[edx+curconf],al
cmp byte[sh_off],0 ; if shuffle in progress,
jz no_win ; then no redraw
; drawing button & hole
inc ecx
call draw_button
movzx ecx,bh
inc ecx
call draw_button
; testing if task completed
mov esi,[task]
mov edi,curconf
mov ecx,16
repe cmpsb
cmp ecx,0
jne no_win
mov word[sts],6 ; puzzle done. Victory!
no_win:
popa
stc
ret
no_move:
popa
clc
ret
; this is deprecated debug routine
;ud:
; ud2
; These are data used by program
correct db 1,-4,4,-1
conf db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,15
db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0
db 1,2,3,4,12,13,14,5,11,0,15,6,10,9,8,7,9
txtMoves:
if lang eq ru_RU
db 'Ходов:'
else if lang eq it_IT
db 'Movimenti:'
else if lang eq de_DE
db 'Bewegungen:'
else
db 'Moves:'
end if
lenMoves:
txtSh:
if lang eq ru_RU
db 'Тасовка'
else if lang eq it_IT
db 'Mischia'
else if lang eq de_DE
db 'Mischen'
else
db 'Shuffle'
end if
lenSh:
txtCnf:
if lang eq ru_RU
db 'Выберите задачу и нажмите->'
else if lang eq it_IT
db 'Seleziona un compito, poi premi->'
else if lang eq de_DE
db 'Waehle eine Aufgabe, dann clicke au->'
else
db 'Select task, then press ->'
end if
lenCnf:
txtTitle: ; строка заголовка
if lang eq ru_RU
db 'Игра 15 - задача X', 0
else if lang eq it_IT
db 'Gioco del quindici - partita X', 0
else if lang eq de_DE
db '15-Puzzle - Spiel X', 0
else
db 'Game 15 - puzzle X', 0
end if
txtVictory:
if lang eq ru_RU
db 'Вы решили задачу! Нажмите->'
else if lang eq it_IT
db 'Gioco completato! Premi ->'
else if lang eq de_DE
db 'Spiel beendet! Druecken sie auf ->'
else
db 'Puzzle completed! Press->'
end if
lenVictory:
arrow equ lenVictory-2
I_END: ; конец программы
;null db ?
move_count dw ?
cptr db ?
sts dw ?
sh_off db ?
task dd ?
generator dd ?
curconf:
;
; The famous game 15
; Author: Lloyd, coded by Ivushkin Andrey
; Compile with FASM
;
include 'lang.inc' ; Language support for locales: ru_RU (CP866), it_IT, de_DE, en_US.
include '..\..\..\macros.inc' ; decreases program size (not required)
StatusColor equ 0x00ffffff
StatusColor2 equ 0x00dc1e14
BgdColor equ 0x14aabbcc
; Main window dimensions
XXwindow equ 200 shl 16+276
YYwindow equ 200 shl 16+300
; Status bar
XYstatus equ 35 shl 16+283
XXbar equ 35 shl 16+136
YYbar equ 280 shl 16+15
; Buttons
BtnTop equ 28
BtnLeft equ 13
BtnSize equ 60
BtnColor equ 0xafbb55
BtnColor2 equ 0x0228c314
NumColor equ 0x10000000
; Number shifting for nice look
NumShift equ 23 shl 16+23
NumShift2 equ 4 shl 16
; Shuffle button
XXSh equ 202 shl 16+60
YYSh equ 280 shl 16+12
XYShText equ 212 shl 16+283
; Conf button
XXCnf equ 13 shl 16+13
YYCnf equ 280 shl 16+12
XYCnfText equ 18 shl 16+283
; Position of the 'hole'
null equ (curconf+16)
; Amount of moves to perform shuffle
SH_CYCLES equ 400
; (Amount of tasks)-1
CONF_COUNT equ 2
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x2000 ; 8 Kb
dd 0x2000
dd 0x0
dd 0x0
START:
mov [cptr],CONF_COUNT ; number of task
mov eax,3
mcall
mov cl,16
ror eax,cl
mov [generator],eax ; random generator from Tetris
init:
mov ecx,17
movzx eax,[cptr]
inc eax
cmp eax,CONF_COUNT
jna init_ok
xor eax,eax ; cycling 0..CONF_COUNT
init_ok:
mov [cptr],al
mov esi,eax
shl esi,4
add esi,conf
add esi,eax
add al,0x31
mov [txtTitle+17],al ;task number to program title
mov [task],esi
mov edi,curconf
rep movsb ; initial configuration
mov [sts],4
jmp red
SHUF:
call shuffle ; immediate shuffle
red: ; window redraw
call draw_window
still: ; MAIN PROGRAM CYCLE
mov eax,10 ; wait for event
mcall
cmp eax,1 ; redraw? -
je red ; goto red
cmp eax,2 ; key pressed? -
je key ; goto key
cmp eax,3 ; button pressed? -
je button ; goto button
jmp still ; no more events to process
key: ; Key pressed
mov eax,2
mcall
shr eax,8
cmp eax,32 ; <Space> = Shuffle
je SHUF
cmp eax,13 ; <Enter> = Choose task
je init
cmp eax,176
jl still
sub eax,176
cmp eax,3
ja still
movzx eax,byte [eax+correct] ; 'delta' value from correct[]
jmp m_check
button: ; Button pressed
mov eax,17
mcall
shr eax,8
sub eax,2
cmp eax,-1 ; id == 1 (closeme)?
jne noclose
mcall
noclose:
jl SHUF ; Shuffle (id=0) pressed
cmp eax,18
je init ; Conf button pressed
sub al,byte [null]
mov edi,correct
mov ecx,4
repne scasb ; checking for valid move-part 1
jne fail
m_check:
cmp byte[sts],4 ; puzzle completed, blocking buttons
ja still
call move_check ; checking for valid move-part 2
jnc fail
inc [move_count]
call draw_moves
fail:
jmp still ; возвращаемся
; *******************************
; ******* WINDOW DRAWING *******
; *******************************
draw_window:
mcall 12, 1 ; begin draw
mcall 0, XXwindow, YYwindow, BgdColor,, txtTitle ; CREATING WINDOW
mov eax,8 ; SHUFFLE BUTTON
mov ebx,XXSh
mov ecx,YYSh
xor edx,edx
mov esi,BtnColor
mcall
mov ebx,XXCnf ; CONF BUTTON
mov ecx,YYCnf
mov edx,20
;mov esi,BtnColor
mcall
mov ebx, XYShText ; SHUFFLE TEXT
mov ecx, StatusColor
mov edx,txtSh
mov esi,lenSh-txtSh
mov eax,4
mcall
mov ebx, XYCnfText ; CONF TEXT
mov edx,lenVictory-1
mov esi,1
mcall
mov ecx, 16 ; FIELD BUTTONS
dbut:
call draw_button
loop dbut
call draw_moves
mcall 12, 2 ; end of drawing
ret
; *********************************************
; ******* DRAWING A FIELD BUTTON **************
; *********************************************
; ECX - button number
draw_button:
pusha
dec ecx
; calculating button dimensions
mov edi, ecx
lea edx,[ecx+2]
mov ebx,ecx
and ebx,11b
shr ecx,2
imul ebx,BtnSize+3
add ebx,BtnLeft
shl ebx,16
add ebx,BtnSize
imul ecx,BtnSize+3
add ecx,BtnTop
shl ecx,16
add ecx,BtnSize
movzx eax,byte [null]
cmp eax,edi
jne no_hole
pusha
inc ebx
inc ecx
mov edx,BgdColor
mov eax,13 ; clearing - 'hole'
mcall
popa
or edx,0x80000000 ; and removing button under it
no_hole:
mov al,byte[edi+curconf]
mov esi,[task]
cmp al,byte[edi+esi]
je highlight
mov esi,BtnColor
jmp s_rbutton
highlight:
mov esi,BtnColor2
s_rbutton:
mov eax,8 ; set/remove button
mcall
movzx eax,byte [null]
cmp eax,edi
je no_text ; no digits - that's hole
mov edx,ebx
shr ecx,16
mov dx,cx
add edx,NumShift
mov ebx,0x20000
movzx ecx,byte [edi+curconf]
cmp ecx,9
ja two_num
add edx,NumShift2 ; shift to center digits
sub ebx,0x10000
two_num:
mov esi,NumColor
mov eax,47
mcall
no_text:
popa
ret
; *********************************************
; ******* DRAWING STATUS LINE *****************
; *********************************************
draw_moves:
mov eax, 13 ; clear area
mov ebx, XXbar
mov ecx, YYbar
mov edx, BgdColor
mcall
mov eax, 4
mov ebx, XYstatus
mov ecx, StatusColor
cmp ax, [sts]
jl report_victory
jne report_moves
mov edx,txtCnf ; prompt to choose configuration
mov esi,lenCnf-txtCnf
jmp e_dm
report_moves:
mov edx,txtMoves ; how many moves done
mov esi,lenMoves-txtMoves
mov eax,4
mcall
mov esi,ecx
mov edx,ebx
add edx, 40 shl 16
mov ebx,0x030000
movzx ecx, byte[move_count]
mov eax,47
jmp e_dm
report_victory: ; puzzle completed
mov ecx,StatusColor2
mov edx,txtVictory
mov esi,lenVictory-txtVictory
e_dm:
mcall
ret
; *********************************************
; ********* SHUFFLE ***************************
; *********************************************
shuffle:
xor eax,eax
mov [sts],ax
mov [move_count],ax ; reset moves to 0
mov [sh_off],al
mov eax, [generator]
mov ecx,SH_CYCLES
sh_cycle:
sub eax,0x43ab45b5 ; next random number
ror eax,1
xor eax,0x32c4324f
ror eax,1
mov [generator],eax
push eax
and eax,11b ; direction 0..3
movzx eax,byte [eax+correct]
call move_check
pop eax
jnc sh_cycle ; if fails then retry
loop sh_cycle
inc byte[sh_off] ; shuffling complete
ret
; *********************************************
; ********* MOVE VALIDITY CHECK ***************
; *********************************************
; AL - 'DELTA' DIRECTION
move_check:
pusha
mov ah,byte [null]
mov bx,ax
cmp bh,3
ja no_top
cmp al,-4 ; top of field
je no_move
no_top:
cmp bh,12
jb no_bottom
cmp al,4 ; bottom of field
je no_move
no_bottom:
and bh,11b
cmp bh,0
jnz no_left
cmp al,-1 ; left of field
je no_move
no_left:
cmp bh,11b
jnz ok
cmp al,1 ; right of field
je no_move
ok:
mov bx,ax
add bh,bl ; bh-new hole
mov byte [null],bh
movzx ecx,ah
mov al,byte[ecx+curconf]
movzx edx,bh
mov bl,byte[edx+curconf] ; swapping button & hole
mov byte[ecx+curconf],bl
mov byte[edx+curconf],al
cmp byte[sh_off],0 ; if shuffle in progress,
jz no_win ; then no redraw
; drawing button & hole
inc ecx
call draw_button
movzx ecx,bh
inc ecx
call draw_button
; testing if task completed
mov esi,[task]
mov edi,curconf
mov ecx,16
repe cmpsb
cmp ecx,0
jne no_win
mov word[sts],6 ; puzzle done. Victory!
no_win:
popa
stc
ret
no_move:
popa
clc
ret
; this is deprecated debug routine
;ud:
; ud2
; These are data used by program
correct db 1,-4,4,-1
conf db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,15
db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0
db 1,2,3,4,12,13,14,5,11,0,15,6,10,9,8,7,9
txtMoves:
if lang eq ru_RU
db 'Ходов:'
else if lang eq it_IT
db 'Movimenti:'
else if lang eq de_DE
db 'Bewegungen:'
else ; Default to en_US
db 'Moves:'
end if
lenMoves:
txtSh:
if lang eq ru_RU
db 'Тасовка'
else if lang eq it_IT
db 'Mischia'
else if lang eq de_DE
db 'Mischen'
else ; Default to en_US
db 'Shuffle'
end if
lenSh:
txtCnf:
if lang eq ru_RU
db 'Выберите задачу и нажмите->'
else if lang eq it_IT
db 'Seleziona un compito, poi premi->'
else if lang eq de_DE
db 'Waehle eine Aufgabe, dann clicke au->'
else ; Default to en_US
db 'Select task, then press ->'
end if
lenCnf:
txtTitle: ; строка заголовка
if lang eq ru_RU
db 'Игра 15 - задача X', 0
else if lang eq it_IT
db 'Gioco del quindici - partita X', 0
else if lang eq de_DE
db '15-Puzzle - Spiel X', 0
else ; Default to en_US
db 'Game 15 - puzzle X', 0
end if
txtVictory:
if lang eq ru_RU
db 'Вы решили задачу! Нажмите->'
else if lang eq it_IT
db 'Gioco completato! Premi ->'
else if lang eq de_DE
db 'Spiel beendet! Druecken sie auf ->'
else ; Default to en_US
db 'Puzzle completed! Press->'
end if
lenVictory:
arrow equ lenVictory-2
I_END: ; конец программы
;null db ?
move_count dw ?
cptr db ?
sts dw ?
sh_off db ?
task dd ?
generator dd ?
curconf:
+97 -93
View File
@@ -1,93 +1,97 @@
include 'lang.inc'
struc langstr [lng, data]
{
if lang eq lng
sz ., data
end if
}
struc langstr0 [lng, data]
{
if lang eq lng
sz0 ., data
end if
}
include 'AKODE/data.inc'
include 'Resources/Textures/textures.inc'
include 'Resources/Levels/levels.inc'
FULLSCREEN = 0
FSAA = 0
DISABLE_SHADING = 0
MOVEMENT_SPEED = BLOCK_BASE_SIZE + BLOCK_BASE_SIZE / 4
FIELD_OF_VIEW = 60
BLOCK_BASE_SIZE = 512
BLOCK_HEIGHT = 512
INVENTORY_SIZE = 10
HUD_PANEL_HEIGHT = 120
INVENTORY_X = 570
INVENTORY_Y = 15
INVENTORY_PADDING_X = 10
INVENTORY_PADDING_Y = 10
OBJECT_IMAGE_WIDTH = 40
OBJECT_IMAGE_HEIGHT = 40
GAME_MESSAGE_X = 150 + 15
GAME_MESSAGE_Y = 15 + 15
GAME_MESSAGE_COLOR = 0E4E2ADh
if FULLSCREEN
;MAIN_WINDOW_X = 0
;MAIN_WINDOW_Y = 0
;MAIN_WINDOW_WIDTH = 0FFFFh
;MAIN_WINDOW_HEIGHT = 0FFFFh
MAIN_WINDOW_STYLE = (01000001b) shl 24
MAIN_WINDOW_STYLE2 = 1 shl 24
else
MAIN_WINDOW_X = 20
MAIN_WINDOW_Y = 20
MAIN_WINDOW_WIDTH = 960 ; client area width
MAIN_WINDOW_HEIGHT = 712 ; client area height
MAIN_WINDOW_STYLE = (01110100b) shl 24
MAIN_WINDOW_STYLE2 = 0
end if
MAIN_EVENT_MASK = EVM_REDRAW or EVM_KEY or EVM_BUTTON or EVM_MOUSE or EVM_MOUSE_FILTER
MAIN_WINDOW_TITLE langstr0 \
en_US, 'Dungeons of Augastes 0.1', \
ru_RU, 'Подземелья Аугастеса 0.1'
LevelLoadingImageFile db 'Resources/Textures/HUD/LevelLoading.png', 0
HudPanelImageFile db 'Resources/Textures/HUD/Panel.png', 0
DeathImageFile db 'Resources/Textures/HUD/Death.png', 0
EndImageFile db 'Resources/Textures/HUD/End.png', 0
align 4
LevelLoadingImagePtr dd 0
HudPanelImagePtr dd 0
DeathImagePtr dd 0
EndImagePtr dd 0
ImageBufferPtr dd 0
HudPanelNeedsRedraw dd 0
GameMessage dd 0
GameStatus dd 0
GAME_STATUS.LEVEL_LOAD_FAILED = 1
GAME_STATUS.DEAD = 2
GAME_STATUS.END = 3
ACTION.DO_SOMETHING = AKODE_ACTION.CUSTOM + 1
ACTION.LOOK_AROUND = AKODE_ACTION.CUSTOM + 2
ACTION.USE_OBJECT = AKODE_ACTION.CUSTOM + 3
ACTION.LOOK_AT_OBJECT = AKODE_ACTION.CUSTOM + 4
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
; FIXME:
; This translation mechanism should fallback to en_US if the language
; is unlisted (e.g. es_ES). Either fix the macros or use a different method.
; The problem doesn't manifest, as we only bundle Dungeons in the RU distro.
struc langstr [lng, data]
{
if lang eq lng
sz ., data
end if
}
struc langstr0 [lng, data]
{
if lang eq lng
sz0 ., data
end if
}
include 'AKODE/data.inc'
include 'Resources/Textures/textures.inc'
include 'Resources/Levels/levels.inc'
FULLSCREEN = 0
FSAA = 0
DISABLE_SHADING = 0
MOVEMENT_SPEED = BLOCK_BASE_SIZE + BLOCK_BASE_SIZE / 4
FIELD_OF_VIEW = 60
BLOCK_BASE_SIZE = 512
BLOCK_HEIGHT = 512
INVENTORY_SIZE = 10
HUD_PANEL_HEIGHT = 120
INVENTORY_X = 570
INVENTORY_Y = 15
INVENTORY_PADDING_X = 10
INVENTORY_PADDING_Y = 10
OBJECT_IMAGE_WIDTH = 40
OBJECT_IMAGE_HEIGHT = 40
GAME_MESSAGE_X = 150 + 15
GAME_MESSAGE_Y = 15 + 15
GAME_MESSAGE_COLOR = 0E4E2ADh
if FULLSCREEN
;MAIN_WINDOW_X = 0
;MAIN_WINDOW_Y = 0
;MAIN_WINDOW_WIDTH = 0FFFFh
;MAIN_WINDOW_HEIGHT = 0FFFFh
MAIN_WINDOW_STYLE = (01000001b) shl 24
MAIN_WINDOW_STYLE2 = 1 shl 24
else
MAIN_WINDOW_X = 20
MAIN_WINDOW_Y = 20
MAIN_WINDOW_WIDTH = 960 ; client area width
MAIN_WINDOW_HEIGHT = 712 ; client area height
MAIN_WINDOW_STYLE = (01110100b) shl 24
MAIN_WINDOW_STYLE2 = 0
end if
MAIN_EVENT_MASK = EVM_REDRAW or EVM_KEY or EVM_BUTTON or EVM_MOUSE or EVM_MOUSE_FILTER
MAIN_WINDOW_TITLE langstr0 \
en_US, 'Dungeons of Augastes 0.1', \
ru_RU, 'Подземелья Аугастеса 0.1'
LevelLoadingImageFile db 'Resources/Textures/HUD/LevelLoading.png', 0
HudPanelImageFile db 'Resources/Textures/HUD/Panel.png', 0
DeathImageFile db 'Resources/Textures/HUD/Death.png', 0
EndImageFile db 'Resources/Textures/HUD/End.png', 0
align 4
LevelLoadingImagePtr dd 0
HudPanelImagePtr dd 0
DeathImagePtr dd 0
EndImagePtr dd 0
ImageBufferPtr dd 0
HudPanelNeedsRedraw dd 0
GameMessage dd 0
GameStatus dd 0
GAME_STATUS.LEVEL_LOAD_FAILED = 1
GAME_STATUS.DEAD = 2
GAME_STATUS.END = 3
ACTION.DO_SOMETHING = AKODE_ACTION.CUSTOM + 1
ACTION.LOOK_AROUND = AKODE_ACTION.CUSTOM + 2
ACTION.USE_OBJECT = AKODE_ACTION.CUSTOM + 3
ACTION.LOOK_AT_OBJECT = AKODE_ACTION.CUSTOM + 4
+8 -8
View File
@@ -4,7 +4,7 @@
; contact: 4nic8@casiocalc.org
;----------------------------------------
include 'lang.inc'
include 'lang.inc' ; Language support for locales: it_IT, en_US.
include '../../../macros.inc'
include 'ascl.inc'
include 'ascgl.inc'
@@ -142,7 +142,7 @@ still:
; *********************************************
show_screen: ; flips the virtual screen to the window
push_abc
push_abc
mcall 7, screen, <X_SIZE, Y_SIZE>, 0
pop_abc
ret
@@ -389,7 +389,7 @@ grad_fill_screen: ; eax - screen color ( 0x00RRGGBB ), ebx - mack
.no_ch:
pop ecx
loop .lab1
pop_abc
ret
@@ -409,7 +409,7 @@ intro: ; INTRO ;
jne @f
ret
@@:
mcall 4,<115,150>,0x82050505,VERSION
mcall ,<125,180>,0x80050505,AUTHOR
mcall ,<90,210>,0x81EE0800,PRESS_SPACE
@@ -468,13 +468,13 @@ fast_gfx:
mov ebx,0xFFFF
.g_ok:
call grad_fill_screen
;black_bg
;mov eax,0
;mov ebx,0
;call fill_screen
mov eax,37 ; get mouse position
mov ebx,1
mcall
@@ -805,7 +805,7 @@ draw_window:
mcall 48,4
lea ecx, [100*65536+Y_SIZE+4+eax]; [y start] *65536 + [y size] + [skin_height]
mcall 0,<100,X_SIZE+9>,,0x74ffffff,,0
mov eax, [lives]
add eax, '0'
mov esi, HEADER
@@ -836,7 +836,7 @@ if lang eq it_IT
THANKS_FOR_PLAYING db 'Grazie per aver giocato', 0
PRESS_SPACE db 'Premi spazio per iniziare',0
LEVEL db 'LIVELLO',0
else
else ; Default to en_US
THANKS_FOR_PLAYING db 'Thanks for playing', 0
PRESS_SPACE db 'press SPACE to start',0
LEVEL db 'LEVEL',0
+13 -13
View File
@@ -19,7 +19,7 @@
;******************************************************************************
include 'lang.inc'
include 'lang.inc' ; Language support for locales: it_IT, en_US.
include '..\..\..\macros.inc'
include 'ascl.inc'
include 'ascgl.inc'
@@ -285,7 +285,7 @@ end_col:
cmp [delay_cnt],0
jne no_delay
mov [delay_cnt],1
delay 1 ;don't generate delay for fast speed programm
delay 1 ; don't generate delay for fast speed program
no_delay:
dec [delay_cnt]
@@ -297,9 +297,9 @@ win_test:
mov [againbut],1
call draw_window
; label 160,200,'You Win!',cl_Green+font_Big
; label 130,220,'Youre Score:',cl_Green+font_Big
; label 130,220,'Your Score:',cl_Green+font_Big
; outcount dword [scorea],230,220,cl_Green,5*65536
; label 130,234,'Youre Lives:',cl_Green+font_Big
; label 130,234,'Your Lives:',cl_Green+font_Big
; outcount dword [scoreb],230,234,cl_Green,5*65536
; delay 600 ;wait 2sec
; close ;exit from program
@@ -310,7 +310,7 @@ lose_test:
jne stl2
; call draw_window
; label 160,200,'You Lose!',cl_Red+font_Big
; label 130,220,'Youre Score:',cl_Red+font_Big
; label 130,220,'Your Score:',cl_Red+font_Big
; outcount dword [scorea],230,220,cl_Red,5*65536
; delay 300 ;wait 2sec
; close ;exit from program
@@ -420,7 +420,7 @@ draw_window:
window 0,0,400+8,480+24,window_Skinned
if lang eq it_IT
label 12,8,'ARCANOID: Usa le freccie Vite Punti',cl_White+font_Big
else
else ; Default to en_US
label 12,8,'ARCANOID: USE ARROW KEYS LIVES SCORE',cl_White+font_Big
end if
@@ -433,9 +433,9 @@ draw_window:
if lang eq it_IT
label 160,200,'Hai perso!',cl_Red+font_Big
label 130,220,'Punteggio:',cl_Red+font_Big
else
else ; Default to en_US
label 160,200,'You Lose!',cl_Red+font_Big
label 130,220,'Youre Score:',cl_Red+font_Big
label 130,220,'Your Score:',cl_Red+font_Big
end if
outcount dword [scorea],230,220,cl_Red,5*65536
mov ebx,150*65536+80
@@ -449,7 +449,7 @@ draw_window:
mcall
if lang eq it_IT
label 152,244,'Rigioca',cl_Red+font_Big
else
else ; Default to en_US
label 152,244,'Play again?',cl_Red+font_Big
end if
jmp elev
@@ -457,9 +457,9 @@ nlev:
if lang eq it_IT
label 160,200,'Hai vinto!',cl_Green+font_Big
label 130,220,'Punteggio:',cl_Green+font_Big
else
else ; Default to en_US
label 160,200,'You Win!',cl_Green+font_Big
label 130,220,'Youre Score:',cl_Green+font_Big
label 130,220,'Your Score:',cl_Green+font_Big
end if
outcount dword [scorea],230,220,cl_Green,5*65536
mov ebx,150*65536+120 ;mov ebx,150*65536+80
@@ -473,13 +473,13 @@ nlev:
mcall
if lang eq it_IT
label 152,244,'Prossimo Livello',cl_Red+font_Big
else
else ; Default to en_US
label 152,244,'Next level?',cl_Red+font_Big
end if
elev:
if lang eq it_IT
label 178,264,'Esci',cl_Red+font_Big
else
else ; Default to en_US
label 178,264,'Exit?',cl_Red+font_Big
end if
File diff suppressed because it is too large Load Diff
@@ -1,17 +1,17 @@
_window_caption db 'Soft landing',0 ;чруюыютюъ яЁшыюцхэш 
_text_game_over db 'G A M E O V E R', 0
_text_level_complete db 'L E V E L C O M P L E T E', 0
_text_intro_title db ' S O F T L A N D I N G', 0
_text_intro_description1 db 'Provide a soft landing, clearing the runway from the city buildings', 0
_text_intro_key_controls db ' Control keys:', 0
_text_intro_key_ctrl db ' CTRL - drop a bomb', 0
_text_intro_key_space db 'SPACE - do a barrel roll', 0
_text_intro_select_level db ' Use UP and DOWN arrow keys for select game level:', 0
_text_intro_level_num db ' LEVEL', 0
_text_intro_set_volume db ' Use LEFT and RIGHT arrow keys for setting volume:', 0
_text_intro_volume_num db 'VOLUME', 0
_text_intro_start_space db 'Press SPACE for start game', 0
_text_intro_exit_key db 'Esc - exit', 0
_window_caption db 'Soft landing',0 ; Application title
_text_game_over db 'G A M E O V E R', 0
_text_level_complete db 'L E V E L C O M P L E T E', 0
_text_intro_title db ' S O F T L A N D I N G', 0
_text_intro_description1 db 'Provide a soft landing, clearing the runway from the city buildings', 0
_text_intro_key_controls db ' Control keys:', 0
_text_intro_key_ctrl db ' CTRL - drop a bomb', 0
_text_intro_key_space db 'SPACE - do a barrel roll', 0
_text_intro_select_level db ' Use UP and DOWN arrow keys to select the game level:', 0
_text_intro_level_num db ' LEVEL', 0
_text_intro_set_volume db ' Use LEFT and RIGHT arrow keys for setting volume:', 0
_text_intro_volume_num db 'VOLUME', 0
_text_intro_start_space db 'Press SPACE for start game', 0
_text_intro_exit_key db 'Esc - exit', 0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+275 -275
View File
@@ -1,275 +1,275 @@
use32
org 0x0
db 'MENUET01'
dd 0x01
dd _preSTART
dd I_END
dd 0x4000
dd 0x4000
dd 0x0,0x0
include '../../macros.inc'
include 'lang.inc'
include 'draw_window.inc'
include 'ball_operations.inc'
include 'basic_alg.inc'
_preSTART:
mcall 66, 1, 1 ;принимаем скан-коды
mcall 3 ;randomize
ror eax, 16
mov [TC_U_SYSTEM_RANDSEED], eax ;from PPro "system.inc"
new_game:
;обнуление матрицы
mov eax, 0
mov ecx, 81 / 4
mov edi, lineBall
rep stosd
stosb
mov [score], 0
mov [countAllBall], 0
mov [current], 0
@@:
mov ebx, 7
call random
inc dl
call add_new_ball
call test_new_ball
cmp [countAllBall], 5
jb @b
call generate_new___new_color
START:
draw_window
still:
mcall 10
dec eax
jz START ; перерисовать окно
dec eax
jnz button ;если не клавиша - значит кнопка
key: ; нажатие клавиши
mcall 2 ; получаем код клавиши
cmp ah, 60
je new_game
jmp still
button: ; нажатие кнопки
mcall 17
shr eax, 8
cmp ax, 1 ; если кнопка выхода?
je .exit
;проверим, не пуста ли клетка
mov edx, [current]
test byte [eax + lineBall - 2], 0x7
jz .blank
;проверим не была ли эта клетка уже выбрана
cmp eax, edx
je .double_choice
mov [current], eax
call choice_ball
call paint_ball ;сначала прорисуем новый выбранный шарик
test edx, edx ;cmp [current], 0
jz still
mov eax, edx
@@:
call redraw_cell ;а уже потом уберем рамку от старого
call paint_ball
jmp still
.double_choice:
mov [current], 0
jmp @B
.blank: ;нажатая кнопка - пуста
test edx, edx ;cmp [current], 0
jz still
mov [dest], eax ;кнопку назначения -> в [dest]
mov eax, edx ;параметр в eax
call test_path ;вызываем рекурсию test_path
call zero_cheked
jnc still
;^^^^^^^^^^^^^^^^^ move_ball proc
mov eax, [current]
mov cl, byte [eax + lineBall - 2]
mov byte [eax + lineBall - 2], 0
mov eax, [dest]
mov byte [eax + lineBall - 2], cl
mov eax, [current]
call redraw_cell
mov eax, [dest]
call paint_ball
mov [current], 0
;^^^^^^^^^^^^^^^^^ move_ball endp
call find_line
call vanish_balls
call zero_cheked
cmp [countVanishBall], 0
je new_3_balls
movzx eax, [countVanishBall]
inc eax
add [score], eax
sub [countAllBall], al
call redraw_score
jmp still
.exit:
mcall -1 ;выходим
new_3_balls:
rept 3 num
{
mov dl, [newColor#num]
call add_new_ball
call test_new_ball
cmp [countAllBall],81
je .record_li
}
call generate_new___new_color
call paint_new_color
jmp still
.record_li:
mov eax, [score]
cmp eax, [record]
jbe still
mov [record], eax
jmp START
zero_cheked: ;обнуление матрицы cheked
pushfd
mov eax, lineBall
mov ecx, 81
@@:
and byte [eax], 0x7
inc eax
loop @B
popfd
ret
random: ; edx := random [0..(ebx-1)]
mov eax, 134775813
mul [TC_U_SYSTEM_RANDSEED]
inc eax
mov [ TC_U_SYSTEM_RANDSEED], eax
xor edx, edx
div ebx
ret
generate_new___new_color:
rept 3 num
{
mov ebx, 7
call random
inc dl
mov [newColor#num], dl
}
ret
add_new_ball: ;в dl - цвет шарика
mov ebp, edx
mov ebx, 81
sub bl, [countAllBall]
call random
mov ecx, edx
mov eax, lineBall-1
inc ecx
@@:
inc eax
test byte [eax], 0x7
jnz @B
loop @B
;теперь у нас в eax - адрес нашего шарика
mov edx, ebp
or byte [eax], dl
inc [countAllBall]
;получим ID кнопки
sub eax, lineBall-2
mov [dest], eax
ret
test_new_ball:
call paint_ball
call find_line
call vanish_balls
call zero_cheked
cmp [countVanishBall], 0
je @F
movzx eax, [countVanishBall]
inc eax
add [score], eax
sub [countAllBall], al
call redraw_score
@@:
ret
if lang eq ru_RU
szTitle db 'Цветные линии v 0.3',0
szNewGame db 'F2 - новая игра',0
szRecord db 'Рекорд',0
szScore db 'Очки',0
else
szTitle db 'Color lines v 0.3',0
szNewGame db 'F2 - new game',0
szRecord db 'Record',0
szScore db 'Score',0
end if
blank = 0xB8C2D3
brown = 0x804000
red = 0xff0000
yellow = 0xffff00
green = 0x008000
cyan = 0x00ffff
blue = 0x0000ff
purple = 0x800080
tableColor dd blank,brown,red,yellow,green,cyan,blue,purple
lineCoord:
rept 9 coory:0
{
rept 9 coorx:0
\{
dw coorx*256+coory
\}
}
record dd 25
lineBall db 81 dup ?
score dd ?
baseAddr dd ?
current dd ?
dest dd ?
newColor1 db ?
newColor2 db ?
newColor3 db ?
countVanishBall db ?
countAllBall db ?
TC_U_SYSTEM_RANDSEED dd ?
bitID dd ?
I_END:
use32
org 0x0
db 'MENUET01'
dd 0x01
dd _preSTART
dd I_END
dd 0x4000
dd 0x4000
dd 0x0,0x0
include '../../macros.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include 'draw_window.inc'
include 'ball_operations.inc'
include 'basic_alg.inc'
_preSTART:
mcall 66, 1, 1 ;принимаем скан-коды
mcall 3 ;randomize
ror eax, 16
mov [TC_U_SYSTEM_RANDSEED], eax ;from PPro "system.inc"
new_game:
;обнуление матрицы
mov eax, 0
mov ecx, 81 / 4
mov edi, lineBall
rep stosd
stosb
mov [score], 0
mov [countAllBall], 0
mov [current], 0
@@:
mov ebx, 7
call random
inc dl
call add_new_ball
call test_new_ball
cmp [countAllBall], 5
jb @b
call generate_new___new_color
START:
draw_window
still:
mcall 10
dec eax
jz START ; перерисовать окно
dec eax
jnz button ;если не клавиша - значит кнопка
key: ; нажатие клавиши
mcall 2 ; получаем код клавиши
cmp ah, 60
je new_game
jmp still
button: ; нажатие кнопки
mcall 17
shr eax, 8
cmp ax, 1 ; если кнопка выхода?
je .exit
;проверим, не пуста ли клетка
mov edx, [current]
test byte [eax + lineBall - 2], 0x7
jz .blank
;проверим не была ли эта клетка уже выбрана
cmp eax, edx
je .double_choice
mov [current], eax
call choice_ball
call paint_ball ;сначала прорисуем новый выбранный шарик
test edx, edx ;cmp [current], 0
jz still
mov eax, edx
@@:
call redraw_cell ;а уже потом уберем рамку от старого
call paint_ball
jmp still
.double_choice:
mov [current], 0
jmp @B
.blank: ;нажатая кнопка - пуста
test edx, edx ;cmp [current], 0
jz still
mov [dest], eax ;кнопку назначения -> в [dest]
mov eax, edx ;параметр в eax
call test_path ;вызываем рекурсию test_path
call zero_cheked
jnc still
;^^^^^^^^^^^^^^^^^ move_ball proc
mov eax, [current]
mov cl, byte [eax + lineBall - 2]
mov byte [eax + lineBall - 2], 0
mov eax, [dest]
mov byte [eax + lineBall - 2], cl
mov eax, [current]
call redraw_cell
mov eax, [dest]
call paint_ball
mov [current], 0
;^^^^^^^^^^^^^^^^^ move_ball endp
call find_line
call vanish_balls
call zero_cheked
cmp [countVanishBall], 0
je new_3_balls
movzx eax, [countVanishBall]
inc eax
add [score], eax
sub [countAllBall], al
call redraw_score
jmp still
.exit:
mcall -1 ;выходим
new_3_balls:
rept 3 num
{
mov dl, [newColor#num]
call add_new_ball
call test_new_ball
cmp [countAllBall],81
je .record_li
}
call generate_new___new_color
call paint_new_color
jmp still
.record_li:
mov eax, [score]
cmp eax, [record]
jbe still
mov [record], eax
jmp START
zero_cheked: ;обнуление матрицы cheked
pushfd
mov eax, lineBall
mov ecx, 81
@@:
and byte [eax], 0x7
inc eax
loop @B
popfd
ret
random: ; edx := random [0..(ebx-1)]
mov eax, 134775813
mul [TC_U_SYSTEM_RANDSEED]
inc eax
mov [ TC_U_SYSTEM_RANDSEED], eax
xor edx, edx
div ebx
ret
generate_new___new_color:
rept 3 num
{
mov ebx, 7
call random
inc dl
mov [newColor#num], dl
}
ret
add_new_ball: ;в dl - цвет шарика
mov ebp, edx
mov ebx, 81
sub bl, [countAllBall]
call random
mov ecx, edx
mov eax, lineBall-1
inc ecx
@@:
inc eax
test byte [eax], 0x7
jnz @B
loop @B
;теперь у нас в eax - адрес нашего шарика
mov edx, ebp
or byte [eax], dl
inc [countAllBall]
;получим ID кнопки
sub eax, lineBall-2
mov [dest], eax
ret
test_new_ball:
call paint_ball
call find_line
call vanish_balls
call zero_cheked
cmp [countVanishBall], 0
je @F
movzx eax, [countVanishBall]
inc eax
add [score], eax
sub [countAllBall], al
call redraw_score
@@:
ret
if lang eq ru_RU
szTitle db 'Цветные линии v 0.3',0
szNewGame db 'F2 - новая игра',0
szRecord db 'Рекорд',0
szScore db 'Очки',0
else ; Default to en_US
szTitle db 'Color lines v 0.3',0
szNewGame db 'F2 - new game',0
szRecord db 'Record',0
szScore db 'Score',0
end if
blank = 0xB8C2D3
brown = 0x804000
red = 0xff0000
yellow = 0xffff00
green = 0x008000
cyan = 0x00ffff
blue = 0x0000ff
purple = 0x800080
tableColor dd blank,brown,red,yellow,green,cyan,blue,purple
lineCoord:
rept 9 coory:0
{
rept 9 coorx:0
\{
dw coorx*256+coory
\}
}
record dd 25
lineBall db 81 dup ?
score dd ?
baseAddr dd ?
current dd ?
dest dd ?
newColor1 db ?
newColor2 db ?
newColor3 db ?
countVanishBall db ?
countAllBall db ?
TC_U_SYSTEM_RANDSEED dd ?
bitID dd ?
I_END:
+142 -140
View File
@@ -1,140 +1,142 @@
; level format
; [fx|fy]..[field cells x2]..[worm_count]..[worm_len][start cell #][body dirs x2]
; internal format
; [stepptr]= worms #
; area: [worm_len][start_cell #][end_cell #]..[dirs]..
; [cur_step]: dragged worm pointer
; [finish]: 0 - if head dragged, 1- if tail
CZ_levelp:
call get_xy_sf
call LP_levelp.bit2
mov dword[area],5;0
ret
CZ_key:
mov [jump],still
cmp eax,176
jb .ex
cmp eax,179
ja .ex
mov ecx,dword[area]
lea ebx,[eax-176]
mov eax,[player]
call check_bounds
je .ex
cmp ecx,5
jne .novert
.vert:
add eax,[dirs+ebx*4]
call check_bounds
je .ex
mov ecx,eax
add ecx,[dirs+ebx*4]
mov cl,[field+ecx]
cmp cl,[field+eax]
jne .ex
mov dword[area],ebx
.ok:
mov [player],eax
cmp eax,[finish]
jne .jm
cmp dword[area],5
jne .jm
mov [win_flag],1
.jm:
mov [jump],drw
.ex:
ret
.novert:
mov edx,ebx
cmp edx,ecx ; the same dir
jne .nosame
add eax,[dirs+ebx*4]
call check_bounds
je .ex
.set5:
mov dword[area],5
add eax,[dirs+ebx*4]
jmp .ok
.nosame:
xor edx,11b
cmp edx,ecx ; the opposite dir
je .set5
add eax,[dirs+ebx*4]
mov ebx,ecx
xor ecx,11b
add eax,[dirs+ecx*4]
jmp .vert
CZ_drawm:
mov ecx,[cell_count]
mov esi,field
mov [sq_size],3
.lp:
push ecx
movzx ebx,byte[field+ecx-1]
shr ebx,6
lea eax,[ecx-1]
call get_xy
add [lx],5-2 shl 16
add [ly],5-2 shl 16
mov edx,[f_colors+ebx*4]
mcall 13,[lx],[ly]
.no:
pop ecx
loop .lp
inc [sq_size]
mov eax,[player]
call get_xy
xor edx,edx
cmp dword[area],5
je .vert
push [lx]
push [ly]
mov edx,dword[area]
add eax,[dirs+edx*4]
call get_xy
mcall 13,[lx],[ly]
pop [ly]
pop [lx]
.vert:
mcall 13,[lx],[ly]
add [sq_size],5
mov eax,[finish]
call get_xy
mcall 13,[lx],[ly],0xffffff
ret
CZ_level:
file 'colzone.bin'
if lang eq ru_RU
CZ_help mstr \
'Черный блок из 2 кубиков стоит на раскрашенной',\
'клетчатой доске. Ваша задача - перекатить его на',\
'клетку с белым квадратиком. Блок начинает стоя и',\
'должен закончить тоже в вертикальном положении.',\
'Нельзя выкатывать его за пределы сетки и сверх',\
'того - кубики блока должны всегда ложиться на',\
'клетки одинакового цвета. Блок не отображен в 3D,',\
'поэтому Вы видите лишь его проекцию.','',\
'http://www.clickmazes.com'
else
CZ_help mstr \
'A black block, made of two black cubes stuck',\
'together, sits on a coloured grid. Your challenge',\
'is to roll the black block to its target',\
'position, which is marked with a small white',\
'square. The block starts on one end (vertical)',\
'and must also finish in this position. The block',\
'is not permitted to roll off the grid and, in',\
'addition, the block must always lie entirely',\
'within one colour-zone. Note the block is not',\
'displayed in 3D, in effect you see only its',\
'shadow.','',\
'http://www.clickmazes.com'
end if
; Language support for locales: ru_RU (CP866), en_US.
; level format
; [fx|fy]..[field cells x2]..[worm_count]..[worm_len][start cell #][body dirs x2]
; internal format
; [stepptr]= worms #
; area: [worm_len][start_cell #][end_cell #]..[dirs]..
; [cur_step]: dragged worm pointer
; [finish]: 0 - if head dragged, 1- if tail
CZ_levelp:
call get_xy_sf
call LP_levelp.bit2
mov dword[area],5;0
ret
CZ_key:
mov [jump],still
cmp eax,176
jb .ex
cmp eax,179
ja .ex
mov ecx,dword[area]
lea ebx,[eax-176]
mov eax,[player]
call check_bounds
je .ex
cmp ecx,5
jne .novert
.vert:
add eax,[dirs+ebx*4]
call check_bounds
je .ex
mov ecx,eax
add ecx,[dirs+ebx*4]
mov cl,[field+ecx]
cmp cl,[field+eax]
jne .ex
mov dword[area],ebx
.ok:
mov [player],eax
cmp eax,[finish]
jne .jm
cmp dword[area],5
jne .jm
mov [win_flag],1
.jm:
mov [jump],drw
.ex:
ret
.novert:
mov edx,ebx
cmp edx,ecx ; the same dir
jne .nosame
add eax,[dirs+ebx*4]
call check_bounds
je .ex
.set5:
mov dword[area],5
add eax,[dirs+ebx*4]
jmp .ok
.nosame:
xor edx,11b
cmp edx,ecx ; the opposite dir
je .set5
add eax,[dirs+ebx*4]
mov ebx,ecx
xor ecx,11b
add eax,[dirs+ecx*4]
jmp .vert
CZ_drawm:
mov ecx,[cell_count]
mov esi,field
mov [sq_size],3
.lp:
push ecx
movzx ebx,byte[field+ecx-1]
shr ebx,6
lea eax,[ecx-1]
call get_xy
add [lx],5-2 shl 16
add [ly],5-2 shl 16
mov edx,[f_colors+ebx*4]
mcall 13,[lx],[ly]
.no:
pop ecx
loop .lp
inc [sq_size]
mov eax,[player]
call get_xy
xor edx,edx
cmp dword[area],5
je .vert
push [lx]
push [ly]
mov edx,dword[area]
add eax,[dirs+edx*4]
call get_xy
mcall 13,[lx],[ly]
pop [ly]
pop [lx]
.vert:
mcall 13,[lx],[ly]
add [sq_size],5
mov eax,[finish]
call get_xy
mcall 13,[lx],[ly],0xffffff
ret
CZ_level:
file 'colzone.bin'
if lang eq ru_RU
CZ_help mstr \
'Черный блок из 2 кубиков стоит на раскрашенной',\
'клетчатой доске. Ваша задача - перекатить его на',\
'клетку с белым квадратиком. Блок начинает стоя и',\
'должен закончить тоже в вертикальном положении.',\
'Нельзя выкатывать его за пределы сетки и сверх',\
'того - кубики блока должны всегда ложиться на',\
'клетки одинакового цвета. Блок не отображен в 3D,',\
'поэтому Вы видите лишь его проекцию.','',\
'http://www.clickmazes.com'
else ; Default to en_US
CZ_help mstr \
'A black block, made of two black cubes stuck',\
'together, sits on a coloured grid. Your challenge',\
'is to roll the black block to its target',\
'position, which is marked with a small white',\
'square. The block starts on one end (vertical)',\
'and must also finish in this position. The block',\
'is not permitted to roll off the grid and, in',\
'addition, the block must always lie entirely',\
'within one colour-zone. Note the block is not',\
'displayed in 3D, in effect you see only its',\
'shadow.','',\
'http://www.clickmazes.com'
end if
+68 -66
View File
@@ -1,66 +1,68 @@
; level format
; [fx|fy][blue xy][red xy]..[maze walls]
; internal format
; [player]= blue
; [finish]= red
CSTEP_key:
cmp eax,176
jb .ex
cmp eax,179
ja .ex
mov esi,area
inc esi
lea ebx,[eax-176]
mov [jump],still
mov eax,[player]
call check_move
jc .ex
add eax,[dirs+ebx*4]
mov edx,eax
.nom1:
mov eax,[finish]
xor ebx,11b
call check_move
jc .ex
add eax,[dirs+ebx*4]
mov [finish],eax
mov [player],edx
mov [jump],drw
cmp eax,edx
jnz .ex
mov [win_flag],1
.ex:
ret
CSTEP_drawm:
mov eax,[player]
call get_xy
mcall 13,[lx],[ly],0xff0000
mov eax,[finish]
call get_xy
mcall 13,[lx],[ly],0xff
ret
CSTEP_level:
file 'cstep.bin'
if lang eq ru_RU
CSTEP_help mstr \
'Соедините красный и синий блоки путем управления',\
'одним красным блоком. Синий блок следует за',\
'красным, но движется в прямо противоположном',\
'направлении. Ход разрешен только в случае',\
'отсутствия препятствий для обоих блоков.','',\
'http://www.clickmazes.com'
else
CSTEP_help mstr \
'Unite the red and blue dots by moving just the',\
'red dot. The blue dot follows the red dot, but',\
'moves in exactly in the opposite direction. A',\
'move is only permitted if the path is clear for',\
'both dots.','',\
'http://www.clickmazes.com'
end if
; Language support for locales: ru_RU (CP866), en_US.
; level format
; [fx|fy][blue xy][red xy]..[maze walls]
; internal format
; [player]= blue
; [finish]= red
CSTEP_key:
cmp eax,176
jb .ex
cmp eax,179
ja .ex
mov esi,area
inc esi
lea ebx,[eax-176]
mov [jump],still
mov eax,[player]
call check_move
jc .ex
add eax,[dirs+ebx*4]
mov edx,eax
.nom1:
mov eax,[finish]
xor ebx,11b
call check_move
jc .ex
add eax,[dirs+ebx*4]
mov [finish],eax
mov [player],edx
mov [jump],drw
cmp eax,edx
jnz .ex
mov [win_flag],1
.ex:
ret
CSTEP_drawm:
mov eax,[player]
call get_xy
mcall 13,[lx],[ly],0xff0000
mov eax,[finish]
call get_xy
mcall 13,[lx],[ly],0xff
ret
CSTEP_level:
file 'cstep.bin'
if lang eq ru_RU
CSTEP_help mstr \
'Соедините красный и синий блоки путем управления',\
'одним красным блоком. Синий блок следует за',\
'красным, но движется в прямо противоположном',\
'направлении. Ход разрешен только в случае',\
'отсутствия препятствий для обоих блоков.','',\
'http://www.clickmazes.com'
else ; Default to en_US
CSTEP_help mstr \
'Unite the red and blue dots by moving just the',\
'red dot. The blue dot follows the red dot, but',\
'moves in exactly in the opposite direction. A',\
'move is only permitted if the path is clear for',\
'both dots.','',\
'http://www.clickmazes.com'
end if
+199 -197
View File
@@ -1,197 +1,199 @@
FH_levelp:
mcall 40,100111b
call get_xy_sf
call erase_field
sub esi,2
mov [levptr],esi
movzx ecx,byte[esi-2]
sub ecx,2
xor eax,eax
.lp:
lodsb
mov byte[field+eax],-1
loop .lp
mov dword[player],-1
mov [win_flag],3
ret
FH_key:
cmp eax,-1
je FH_mouse
cmp eax,8
jne .nobsp
cmp [stepptr],0
jne .no1st
mov [jump],run.game
ret
.no1st:
mov [win_flag],0
sub [cur_step],2
mov esi,[cur_step]
mov edi,[finish]
mov eax,3
movzx ebx,byte[esi]
sub eax,ebx
movzx ecx,byte[esi+1]
.lp0:
and byte[field+edi],0
add edi,[dirs+eax*4]
loop .lp0
mov [finish],edi
dec [stepptr]
ret
.nobsp:
cmp eax,176
jb .ex
cmp eax,179
ja .ex
sub eax,176
jmp FH_mouse.fromkey
.ex:
ret
FH_drawm:
mov ecx,[cell_count]
.lp:
push ecx
movzx ebx,byte[field+ecx-1]
test ebx,ebx
jz .no
lea eax,[ecx-1]
call get_xy
mov edx,0
cmp ebx,0xf
jne .stable
mov edx,0x909090
.stable:
mcall 13,[lx],[ly]
.no:
pop ecx
loop .lp
mov eax,[player]
cmp eax,-1
je .ex
call get_xy
mcall 13,[lx],[ly],0xff00
mov eax,[finish]
call get_xy
mcall 13,[lx],[ly],0xff0000
mov ecx,[stepptr]
jecxz .ex
mov ebx,area
mov edi,[player]
mov edx,0xffffff
.lp3:
push ecx
mov esi,edi
movzx eax,byte[ebx]
movzx ecx,byte[ebx+1]
add ebx,2
.lp2:
add edi,[dirs+eax*4]
loop .lp2
call getline
pop ecx
loop .lp3
.ex:
ret
FH_mouse:
mov [jump],drw;red
call get_last_mclick
cmp byte[field+ebx],0
jne .ex
cmp dword[player],-1
jne .nostart
mov dword[player],ebx
mov byte[field+ebx],0xf
mov [finish],ebx
and [win_flag],0
mov [cur_step],area
and [stepptr],0
ret
.nostart:
mov eax,[finish]
call get_offset
cmp eax,-1
je .ex
.fromkey:
xor ecx,ecx
mov edx,eax
mov esi,[finish]
.lp:
add esi,[dirs+edx*4]
cmp byte[field+esi],0
jnz .exlp
mov eax,[finish]
mov ebx,esi
call get_offset
cmp eax,edx
jne .exlp
mov byte[field+esi],0xf
inc ecx
mov [finish],esi
jmp .lp
.exlp:
jecxz .ex
mov eax,edx
mov edi,[cur_step]
stosb
mov [edi],cl
inc edi
mov [cur_step],edi
inc [stepptr]
mov edi,field
mov ecx,[cell_count]
xor eax,eax
repne scasb
je .ch_deadend
mov [win_flag],1
.ex:
ret
.ch_deadend:
mov ecx,4
mov edx,dirs
.lpp:
mov eax,[finish]
mov ebx,[edx]
add ebx,eax
push ebx
call get_offset
pop ebx
cmp eax,-1
je .nxtlp
cmp byte[field+ebx],0
jz .ex
.nxtlp:
add edx,4
loop .lpp
mov [win_flag],4
ret
FH_level:
file 'fhouse.bin'
if lang eq ru_RU
FH_help mstr \
'В задании найдите начальную клетку и проведите',\
'линию, которая проходит через пустые клетки по',\
'одному разу.',\
' Каждый раз красный квадрат двигается прямо,',\
'останавливаясь только у края, перед черными',\
'квадратами или уже посещенными клетками.','',\
'http://www.clickmazes.com'
else
FH_help mstr \
'For each puzzle find the starting square and draw',\
'a path moving horizontally and vertically that',\
'passes through each open square exactly once.','',\
'At each move the red runner will always run',\
'straight, as far as possible, stopping only when',\
"blocked by the grid's edge, a black square, or a",\
'square already visited.','',\
'http://www.clickmazes.com'
end if
; Language support for locales: ru_RU (CP866), en_US.
FH_levelp:
mcall 40,100111b
call get_xy_sf
call erase_field
sub esi,2
mov [levptr],esi
movzx ecx,byte[esi-2]
sub ecx,2
xor eax,eax
.lp:
lodsb
mov byte[field+eax],-1
loop .lp
mov dword[player],-1
mov [win_flag],3
ret
FH_key:
cmp eax,-1
je FH_mouse
cmp eax,8
jne .nobsp
cmp [stepptr],0
jne .no1st
mov [jump],run.game
ret
.no1st:
mov [win_flag],0
sub [cur_step],2
mov esi,[cur_step]
mov edi,[finish]
mov eax,3
movzx ebx,byte[esi]
sub eax,ebx
movzx ecx,byte[esi+1]
.lp0:
and byte[field+edi],0
add edi,[dirs+eax*4]
loop .lp0
mov [finish],edi
dec [stepptr]
ret
.nobsp:
cmp eax,176
jb .ex
cmp eax,179
ja .ex
sub eax,176
jmp FH_mouse.fromkey
.ex:
ret
FH_drawm:
mov ecx,[cell_count]
.lp:
push ecx
movzx ebx,byte[field+ecx-1]
test ebx,ebx
jz .no
lea eax,[ecx-1]
call get_xy
mov edx,0
cmp ebx,0xf
jne .stable
mov edx,0x909090
.stable:
mcall 13,[lx],[ly]
.no:
pop ecx
loop .lp
mov eax,[player]
cmp eax,-1
je .ex
call get_xy
mcall 13,[lx],[ly],0xff00
mov eax,[finish]
call get_xy
mcall 13,[lx],[ly],0xff0000
mov ecx,[stepptr]
jecxz .ex
mov ebx,area
mov edi,[player]
mov edx,0xffffff
.lp3:
push ecx
mov esi,edi
movzx eax,byte[ebx]
movzx ecx,byte[ebx+1]
add ebx,2
.lp2:
add edi,[dirs+eax*4]
loop .lp2
call getline
pop ecx
loop .lp3
.ex:
ret
FH_mouse:
mov [jump],drw;red
call get_last_mclick
cmp byte[field+ebx],0
jne .ex
cmp dword[player],-1
jne .nostart
mov dword[player],ebx
mov byte[field+ebx],0xf
mov [finish],ebx
and [win_flag],0
mov [cur_step],area
and [stepptr],0
ret
.nostart:
mov eax,[finish]
call get_offset
cmp eax,-1
je .ex
.fromkey:
xor ecx,ecx
mov edx,eax
mov esi,[finish]
.lp:
add esi,[dirs+edx*4]
cmp byte[field+esi],0
jnz .exlp
mov eax,[finish]
mov ebx,esi
call get_offset
cmp eax,edx
jne .exlp
mov byte[field+esi],0xf
inc ecx
mov [finish],esi
jmp .lp
.exlp:
jecxz .ex
mov eax,edx
mov edi,[cur_step]
stosb
mov [edi],cl
inc edi
mov [cur_step],edi
inc [stepptr]
mov edi,field
mov ecx,[cell_count]
xor eax,eax
repne scasb
je .ch_deadend
mov [win_flag],1
.ex:
ret
.ch_deadend:
mov ecx,4
mov edx,dirs
.lpp:
mov eax,[finish]
mov ebx,[edx]
add ebx,eax
push ebx
call get_offset
pop ebx
cmp eax,-1
je .nxtlp
cmp byte[field+ebx],0
jz .ex
.nxtlp:
add edx,4
loop .lpp
mov [win_flag],4
ret
FH_level:
file 'fhouse.bin'
if lang eq ru_RU
FH_help mstr \
'В задании найдите начальную клетку и проведите',\
'линию, которая проходит через пустые клетки по',\
'одному разу.',\
' Каждый раз красный квадрат двигается прямо,',\
'останавливаясь только у края, перед черными',\
'квадратами или уже посещенными клетками.','',\
'http://www.clickmazes.com'
else ; Default to en_US
FH_help mstr \
'For each puzzle find the starting square and draw',\
'a path moving horizontally and vertically that',\
'passes through each open square exactly once.','',\
'At each move the red runner will always run',\
'straight, as far as possible, stopping only when',\
"blocked by the grid's edge, a black square, or a",\
'square already visited.','',\
'http://www.clickmazes.com'
end if
+247 -245
View File
@@ -1,245 +1,247 @@
LP_levelp:
mcall 40,100111b
inc [drag_flag]
lodsb
lodsw
mov byte[fx],al
mov byte[fy],ah
and dword[player],0
and dword[finish],0
call get_xy_sf.count
call erase_field
; mov [levptr],esi
.bit2:
mov edx,8/2
mov edi,field
lodsb
mov ecx,[cell_count]
.lp:
mov bl,al
rol al,2
and bl,11000000b
mov [edi],bl
inc edi
dec edx
test edx,edx
jnz .nxt
mov edx,8/2
lodsb
.nxt:
loop .lp
ret
LP_key:
cmp eax,0
jl LP_mouse
cmp eax,8
jne .nobsp
cmp [stepptr],0
jne .no1st
mov [jump],run.game
ret
.no1st:
mov [win_flag],0
sub [cur_step],2
mov esi,[cur_step]
mov edi,[finish]
mov eax,3
movzx ebx,byte[esi]
sub eax,ebx
movzx ecx,byte[esi+1]
.lp0:
and byte[field+edi],0
add edi,[dirs+eax*4]
loop .lp0
mov [finish],edi
dec [stepptr]
ret
.nobsp:
cmp eax,176
jb .ex
cmp eax,179
ja .ex
sub eax,176
.ex:
ret
LP_drawm:
and [pause_time],0
mov ecx,[cell_count]
.lp:
push ecx
mov bl,byte[field+ecx-1]
push ebx
lea eax,[ecx-1]
mov ecx,eax
call get_xy
mov al,bl
and al,0xf
test bl,11000000b
jnz .noempty
mov esi,LP_aw
mov ecx,11
call LP_draw_alert
jmp .no
.noempty:
mov edx,0
test bl,10000000b
je .stable
mov edx,0xffffff
mov esi,LP_aw