Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 30 → Rev 31

/programs/tinypad2/trunk/tinypad2.asm
0,0 → 1,4001
; SYSTEM HAEDER:
use32
org 0x0
db 'MENUET01' ; identifier
dd 0x01 ; version
dd START ; pointer to start
dd TINYPAD_END ; size of file
dd 0x300f00 ;0x500000; 0x3fff00;0x300000 ; size of memory
dd 0xeff0 ;0x4fffff ;0x3ff000;0xeff0 ; esp
dd I_PARAM ; parameters
dd 0 ; reserved
include 'lang.inc'
include 'ascl.inc'
include 'macros.inc' ; useful stuff
include 'dialogs1.inc'
include 'scroll.inc'
;include 'debug.inc'
purge mov ;  SPEED
;******************************************************************************
; INITIALIZING
START:
;debug_print_hex TINYPAD_END
call mask_events
 
cmp [I_PARAM],byte 0
jz noparams
 
; parameters are at I_PARAM
mov esi,I_PARAM
mov edi,filename
mov ecx,50
cld
rep movsb
 
mov edi,filename
mov ecx,50
xor eax,eax
repne scasb
sub edi,filename
dec edi
mov [filename_len],edi
jmp do_load_file
noparams:
jmp newfile
;******************************************************************************
; MAIN LOOP
still:
call writepos ; write current position & number of strings
call mouse_info
 
mov eax,10 ; wait here until event
int 0x40
 
cmp eax,1
je red
cmp eax,2
je key
cmp eax,3
je button
cmp eax,6
je mouse
jmp still
;******************************************************************************
; *********************************
; * MOUSE *
; *********************************
mouse:
mov eax,37 ;mouse click
mov ebx,2
int 0x40
cmp eax,0
je .leave_now
;if exit window is on
cmp [exit_wnd_on],1
jne @f
mov [exit_wnd_on],0
jmp red
;else
@@:
cmp eax,1 ;mouse 1
jne .leave_now
 
mov eax,37 ;mouse position
mov ebx,1
int 0x40
 
mov word[mouse_y],ax
shr eax,16
mov word[mouse_x],ax
 
 
cmp [mouse_x],7
jb .leave_now ;.leave_now ;if <
cmp [mouse_x],485;487
ja .leave_now ;.leave_now ;if >
 
cmp [mouse_y],45
jb .leave_now ;.leave_now ;if <
cmp [mouse_y],342 ;345
ja .leave_now ;.leave_now ;if >
 
call main_cursor_move
 
.leave_now:
jmp still
 
; *********************************
; * BUTTON HANDLER *
; *********************************
 
button:
 
mov eax,17
int 0x40
;;;;;;;;;;;;;;;exit dialog box check;;;;;;;;;;;;;
cmp ah,49
je save_and_exit
cmp ah,48
je exit_now
cmp ah,47
mov [exit_wnd_on],0
je red
cmp ah,46
jne @f
 
call save_file
jmp newfile
@@:
cmp ah,45
je newfile
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;MENU CHECK;;;;;;;;;;;;;;;;;;;;;;;
cmp ah,15
jne no_d_w
call draw_window_for_dialogs
jmp still
no_d_w:
cmp ah,97
je draw_win_menu_file
cmp ah,98
je draw_win_menu_code
cmp ah,96
je draw_win_menu_text
cmp ah,95
je goto_string
cmp ah,92
je search_window
cmp ah,94
je red
cmp ah,99
je help_wnd
cmp ah,100
je new_pad_wnd
cmp ah,101
je doyouwannasave
cmp ah,102
jne nosavenow
for_key_save:
savedialog draw_window_for_dialogs,copy_fpath_s,saveerror,mypath
nosavenow:
cmp ah,103
jne noopennow
for_key_open:
opendialog draw_window_for_dialogs,copy_fpath,openerror,mypath
noopennow:
cmp ah,104
je exit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shr eax,8
 
cmp al,50
jne no_search
 
; SEARCH {
search:
 
cmp [lines],1 ;something like bug fix
je red ;still
 
xor esi,esi
mov edi,[post]
add edi,80
imul ecx,[lines],80
sub ecx,edi ; ecx (loop counter) = lines*80-(post+80)
news:
push edi
news2:
 
; 1) LOAD BYTES
mov al,[esi+search_string]
mov bl,[edi+0x80000]
 
; 2) COMPARE BYTES
cmp al,bl
je yes_char
 
; 3) LETTER?
cmp al,'A'
jb notequal
cmp al,'z'
ja notequal
 
; 4) A->a OR a->A
cmp al,'a'
jb @f
add al,-32
jmp compare_bytes
@@:
cmp al,'Z'
ja notequal
add al,32
 
compare_bytes:
cmp al,bl
jne notequal
 
yes_char:
inc edi
inc esi
cmp esi,[search_len]
jge sfound
jmp news2
 
notequal:
pop edi
xor esi,esi
inc edi
loop news
call string_not_found
jmp still
 
sfound:
mov eax,edi
cdq ; edx = 0;
mov ebx,80
div ebx
;;;;; imul eax,80
; lea eax,[eax+eax*4] ; eax *= 5;
; shl eax,4 ; eax *= 16;
 
; mov [post],eax
mov [posy],0
;---------------
; mov ebx,80
; div ebx
call goto_pos
call draw_vertical_scroll
jmp still
; SEARCH }
 
no_search:
 
; TOOLBAR {
cmp eax,10000
jb no_toolbar
 
add eax,-10000
jne @f
lbl_compile_file:
mov [run_outfile],0
call start_fasm
jmp still
@@:
dec eax
jnz @f
lbl_run_outfile:
mov [run_outfile],1
call start_fasm
jmp still
@@:
dec eax
jnz @f
call open_debug_board
jmp still
@@:
dec eax
jnz still
call open_sysfuncs_txt
jmp still
; TOOLBAR }
 
no_toolbar:
 
cmp al,4
jne noid4
 
; LOAD_FILE {
do_load_file:
mov [modified],0
 
call empty_work_space
 
 
cmp [filename],'/'
jne @f
 
call loadhdfile
jmp .restorecursor
@@:
call loadfile1
.restorecursor:
mov edi,0x78000
mov ecx,80*80/4
mov eax,0x01010101
cld
rep stosd
xor eax,eax
mov [post],eax
mov [posx],eax
mov [posy],eax
 
; enable color syntax for ASM and INC files:
mov [asm_mode], 0
 
mov eax, [filename_len]
add eax, filename
cmp word [eax-3],'AS'
jne @f
cmp byte [eax-1],'M'
jne @f
mov [asm_mode], 1
jmp .nocol
@@:
cmp word [eax-3],'IN'
jne @f
cmp byte [eax-1],'C'
jne @f
mov [asm_mode], 1
@@:
.nocol:
 
; if the header is the same as the previous,
; just redraw the text area
; else redraw the window
 
;------pos00=filename_len
mov eax,[filename_len]
mov [pos00],eax
;-------------------------
mov ecx, [filename_len]
add ecx, 10 ; strlen(" - TINYPAD");
cmp ecx, [headlen]
jne @f
add ecx, -10
mov esi, filename ; strcmp(filename,header);
mov edi, header
rep cmpsb
jne @f
call drawfile
call draw_window_for_dialogs ;redraw, because it's needed
cmp [to_return],0
je still
ret
;jmp still
@@:
call set_title
cmp [to_return],0
je still
ret
; jmp still
; LOAD_FILE }
 
noid4:
 
cmp al, 2
jz yessave
 
dec al ; close if butid == 0
jnz nosave
; EXIT:
exit:
cmp [modified],0
je exit_now
 
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep1
int 0x40
delay 4
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep2
int 0x40
 
;---------"EXIT" dialog box
 
mov eax,13
mov ebx,150*65536+200
mov ecx,100*65536+70
mov edx,[sc.work_graph] ;0x00dd9438 ;0x00ff7512
int 0x40
 
 
mov eax,38
mov ebx,150*65536+350
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+350
mov ecx,170*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+150
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,350*65536+350
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
 
 
 
putlabel 190,120,'‘®åà ­¨âì ¤®ªã¬¥­â?',cl_White
 
drawlbut 170,140,30,15,'„ ',49,[sc.work_button],cl_White
drawlbut 230,140,30,15,'¥â',48,[sc.work_button],cl_White
drawlbut 290,140,45,15,'Žâ¬¥­ ',47,[sc.work_button],cl_White
 
mov [exit_wnd_on],1
;----------------
 
jmp still
 
exit_now:
mov [MainWndClosed], 1
or eax, -1
int 0x40
 
save_and_exit:
call save_file
jmp exit_now
; mov [MainWndClosed], 1
; or eax, -1
; int 0x40
 
; SAVE_FILE {
yessave:
call clear_screen
call drawwindow
call save_file
; call clear_screen
; call drawwindow
mov [modified],0
 
jmp still
; SAVE_FILE }
 
nosave:
 
inc al
call read_string
 
jmp still
 
;**********************************
;* REDRAW HANDLER *
;**********************************
 
red:
; ¯¥à¥à¨á®¢ª  ®ª­ 
call clear_screen
call drawwindow
jmp still
 
 
 
;**********************************
;* KEY HANDLER *
;**********************************
 
key:
mov eax, 2 ; GET KEY
int 0x40
 
cmp [exit_wnd_on],1 ;exit window is ON?
jne no_exit_wnd ; no - goto other checks
 
; cmp eax,13 ;enter - save n exit
; je save_and_exit
 
; cmp eax,173 ;ctrl+enter - exit
; je exit_now
mov [exit_wnd_on],0 ;other keys - cancel
; call draw_window_for_dialogs
 
jmp red ;redraw and still
 
 
no_exit_wnd:
shr eax, 8
 
; HELP_TEXT {
cmp al, 210 ; Ctrl + F1
jne no_help_text
help_wnd:
call clear_screen
call drawwindow
mov eax, 51
mov ebx, 1
mov ecx, help_thread_start
mov edx, 0xfff0
int 0x40
jmp still
 
help_thread_start:
call draw_help_wnd
 
still_hw:
cmp [MainWndClosed], 1
je exit_hw
mov eax, 10
int 0x40
cmp eax, 1
je red_hw
cmp eax, 2
je key_hw
cmp eax, 3
je button_hw
jmp still_hw
 
red_hw:
call draw_help_wnd
jmp still_hw
 
key_hw:
; mov eax, 2
int 0x40
cmp ah, 27
jne still_hw
 
button_hw:
mov eax, 17
int 0x40
exit_hw:
or eax, -1
int 0x40
 
; draw help window
draw_help_wnd:
mov eax, 12
mov ebx, 1
int 0x40
 
xor eax, eax
mov ebx, 200 shl 16 + 320
mov ecx, 200 shl 16 + 260
mov edx, 0x03e0e0e0 ; work
mov esi, [sc.grab]
or esi, 0x80000000 ; grab
mov edi, [sc.frame] ; frame
int 0x40
 
mov eax, 4
mov ebx, 8 shl 16 + 8
mov ecx, 0xffffff
mov edx, help_wnd_header
mov esi, hlphead_len
int 0x40
 
mov eax, 4
mov ebx, 8 shl 16 + 34
xor ecx, ecx
mov esi, 51
mov edx, help_text
.new_help_line:
int 0x40
add ebx, 10
add edx, esi
cmp [edx], byte 'x'
jne .new_help_line
 
mov eax, 12
mov ebx, 2
int 0x40
ret
; HELP_TEXT }
 
no_help_text:
; LOAD_FILE {
cmp al, 211 ; Ctrl + F2
je for_key_open ;do_load_file
; LOAD_FILE }
 
; SEARCH {
cmp al, 212 ; Ctrl + F3
je search
; SEARCH }
 
; SAVE_FILE {
cmp al, 213 ; Ctrl + F4
je yessave
; SAVE_FILE }
 
; ENTER_FILENAME {
cmp al, 214 ; Ctrl + F5
jne @f
jmp for_key_save
@@:
; ENTER_FILENAME }
 
; ENTER_SEARCH {
cmp al, 215 ; Ctrl + F6
jne @f
; mov al, 51
; call read_string
; jmp still
jmp search_window
@@:
; ENTER_SEARCH }
 
; CHANGE_LAYOUT {
cmp al, 217 ; Ctrl + F8
jne @f
call layout
jmp still
@@:
; CHANGE_LAYOUT }
 
; COMPILE_FILE {
cmp al, 208
je lbl_compile_file
; COMPILE_FILE }
 
; RUN_OUTFILE {
cmp al, 209
je lbl_run_outfile
 
; RUN_OUTFILE }
 
;run debug board { -----
cmp al,255
jne @f
call open_debug_board
call activate_me
jmp still
;}
@@:
;open sysfuncR { -----
; cmp al,228
; jne @f
; call open_sysfuncs_txt
; jmp still
; @@:
 
;fast_save_and_open {
cmp al,216
jne @f
call make_fast_so
jmp still
;}
@@:
; 3 times english -> àãá᪨©
; 2 times àãá᪨© -> english
 
; COPY START {
cmp al, 19
jne no_copy_start
mov eax, [post]
imul ebx, [posy], 80
add eax, ebx
mov [copy_start], eax
jmp still
; COPY START }
 
no_copy_start:
; COPY END {
cmp al, 5
jne no_copy_end
cmp [copy_start], 0
je still
mov ecx, [post]
imul ebx, [posy], 80
add ecx, ebx
add ecx, 80
cmp ecx, [copy_count]
jb still
sub ecx, [copy_start]
mov [copy_count], ecx
mov esi, [copy_start]
add esi, 0x80000
mov edi, 0x2f0000
cld
rep movsb
jmp still
; COPY END }
 
no_copy_end:
 
; PASTE {
cmp al, 16
jne no_copy_paste
cmp [copy_count], 0
je still
mov eax,[copy_count]
cdq
mov ebx, 80
div ebx
add [lines], eax
mov ecx, 0x2e0000
mov eax, [post]
imul ebx, [posy], 80
add eax, ebx
add eax, 0x80000
sub ecx, eax
mov esi, 0x2e0000
sub esi, [copy_count]
mov edi, 0x2e0000
std
rep movsb
mov esi, 0x2f0000
mov edi, [post]
imul eax, [posy], 80
add edi, eax
add edi, 0x80000
mov ecx, [copy_count]
cld
rep movsb
 
call clear_screen
call drawfile
call draw_vertical_scroll
mov [modified],1
 
jmp still
; PASTE }
 
 
no_copy_paste:
 
 
; INSERT_SEPARATOR {
cmp al,0xc ; Ctrl+L
jne no_insert_separator
 
imul eax,[posy],80
add eax,[post]
add eax,0x80000
mov ebx,eax
 
imul eax,[lines],80
add eax,0x80000 ; ⥯¥àì 㪠§ë¢ ¥â ­  ª®­¥æ ä ©« 
 
mov ecx,eax ; size
sub ecx,ebx
inc ecx
 
mov esi,eax ; from
mov edi,eax
add edi,80 ; to
 
std
rep movsb
 
mov ecx,80/4
mov esi,comment_string
mov edi,ebx
cld
rep movsd
 
inc [lines]
 
call clear_screen
call drawfile
;call calc_scroll_size_and_pos
call draw_vertical_scroll
mov [modified],1
 
jmp still
; INSERT_SEPARATOR }
 
 
no_insert_separator:
 
 
; DEL_LINE {
cmp al,4
jne no_delete_line
mov eax,[post]
cdq
mov ebx,80
div ebx
add eax,[posy]
inc eax
cmp eax,[lines]
jge still
dec dword [lines]
imul edi,[posy],80
add edi,[post]
add edi,0x80000
mov esi,edi
add esi,80
mov ecx,0x2e0000
sub ecx,esi
shr ecx,4
cld
rep movsd
call clear_screen
call drawfile
;call calc_scroll_size_and_pos
call draw_vertical_scroll
mov [modified],1
 
jmp still
; DEL_LINE }
 
no_delete_line:
 
; ENTER {
cmp al,13
jnz noenter
 
; lines down
mov eax,[posy]
inc eax
; imul eax,80
lea eax,[eax+eax*4] ; eax *= 5
shl eax,4 ; eax *= 16
add eax,0x80000
add eax,[post]
mov ebx,eax
 
; ebx = ([posy]+1)*80 + 0x80000 + [post]
; ebx -> first byte of next string
 
imul eax,[lines],80
add eax,0x80000
mov ecx,eax
 
; ecx = [lines]*80 + 0x80000
; ecx -> end of the document
 
cmp ebx,ecx
jz .bug_fixed
 
@@:
dec ecx
mov dl,[ecx]
mov [ecx+80],dl
 
cmp ecx,ebx
jnz @b
 
.bug_fixed:
 
; save for later
imul eax,[posy],80
add eax,0x80000
add eax,[post]
mov ebx,eax
add eax,[posx]
; eax = 0x80000 + [post] + [posy]*80 + [posx]
 
push eax
 
dec ebx
xor ecx,ecx
@@:
cmp ecx,80
je @f
inc ecx
inc ebx
cmp byte [ebx],' '
je @b
@@:
dec ecx
 
cmp ecx,80-1
jne @f
; mov [posx],0
jmp .lbl
@@:
 
cmp [posx],ecx
jbe @f
mov [posx],ecx
jmp .lbl
@@:
mov [posx],0
 
.lbl:
inc [posy]
 
;clear line
imul eax,[posy],80
add eax,0x80000
add eax,[post]
 
mov edi,eax
mov eax,' '
mov ecx,80/4
cld
rep stosd
 
 
; end of line to next line beginning
imul eax,[posy],80
add eax,0x80000
add eax,[post]
; add eax,[posx]
mov ebx,eax
; ebx -> beginning of this line
 
pop esi
mov edi,eax
 
@@:
mov al,[esi]
mov [ebx],al
mov [esi],byte ' '
 
inc esi
inc ebx
 
cmp esi,edi
jb @b
 
inc [lines]
 
mov ecx,[posy]
cmp ecx,[slines]
jne @f
 
dec [posy]
add [post],80
 
@@:
call clear_screen
call drawfile
;call calc_scroll_size_and_pos
 
call draw_vertical_scroll
mov [modified],1
 
jmp still
; ENTER }
 
 
noenter:
 
 
; UP {
cmp al,130+48
jnz noup
mov ecx,[posy]
test ecx,ecx
jnz .up1
mov ecx,[post]
test ecx,ecx
jz still
add ecx,-80
mov [post],ecx
call clear_screen
jmp .finish
.up1:
dec ecx
mov [posy],ecx
.finish:
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
; UP }
 
noup:
 
; DOWN {
cmp al,129+48
jnz nodown
 
mov ecx,[posy]
mov eax,[slines]
dec eax
cmp ecx,eax
jb .do1 ; goto do1 if [posy] < [slines]-1
 
mov eax,[lines]
sub eax,[slines]
dec eax
jb still ; goto still if [lines] < [slines]-1
; imul eax,80
lea eax,[eax+eax*4]
shl eax,4
cmp [post],eax
jg still ; goto still if [post] > ([lines]-[slines]-1)*80
 
add [post],80
call clear_screen
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
 
.do1:
pusha
mov eax,[post]
cdq
mov ebx,80
div ebx
add eax,[posy]
inc eax
cmp eax,[lines]
jb .do10
popa
jmp still
 
.do10:
popa
inc ecx
mov [posy],ecx
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
; DOWN }
 
 
nodown:
 
 
; LEFT {
cmp al,128+48
jnz noleft
cmp [posx],0
je still
dec [posx]
call drawfile
jmp still
; LEFT }
 
 
noleft:
 
 
; RIGHT {
cmp al,131+48
jnz noright
cmp [posx],79
je still
inc [posx]
call drawfile
jmp still
; RIGHT }
 
 
noright:
 
 
; PAGE_UP {
page_up:
cmp al,136+48
jnz nopu
scrl_up:
mov eax,[slines]
dec eax
; imul eax,80
lea eax,[eax+eax*4]
shl eax,4
mov ecx,[post]
cmp eax,ecx
jbe pu1
mov ecx,eax
pu1:
sub ecx,eax
mov [post],ecx
 
call clear_screen
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
jmp still
; PAGE_UP }
 
 
nopu:
 
 
; PAGE_DOWN {
page_down:
cmp al,135+48
jnz nopd
scrl_down:
mov eax,[lines]
cmp eax,[slines]
jb still
 
mov eax,[post] ; eax = offset
cdq
mov ebx,80
div ebx ; eax /= 80
mov ecx,[lines] ; ecx = lines in the file
cmp eax,ecx ; if eax < ecx goto pfok
jnb still
mov eax,[slines] ; eax = lines on the screen
dec eax ; eax--
; imul eax,80 ; eax *= 80
lea eax,[eax+eax*4]
shl eax,4
add [post],eax ; offset += eax
 
mov eax,[lines] ; eax = lines in the file
sub eax,[slines] ; eax -= lines on the screen
; imul eax,80 ; eax *= 80
lea eax,[eax+eax*4]
shl eax,4
cmp [post],eax
jb @f
mov [post],eax
@@:
 
call clear_screen
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
; PAGE_DOWN }
 
nopd:
 
; HOME {
cmp al,132+48
jnz nohome
 
push 0
pop [posx]
 
call drawfile
jmp still
; HOME }
 
 
nohome:
 
 
; END {
end_key:
cmp al,133+48
jnz noend
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
 
mov esi,eax
add eax,80+1
 
@@: dec eax
cmp eax,esi
je @f
cmp byte [eax-1],' '
jbe @b
@@:
sub eax,esi
cmp eax,80-1
jbe @f
dec eax
@@:
mov [posx],eax
 
call drawfile
jmp still
; END }
 
 
noend:
 
 
; GO_START {
cmp al,251 ; Ctrl + [
jnz no_go_to_start
 
push 0
pop [post] ; offset = 0
 
call clear_screen
call drawfile ; draw file
call draw_vertical_scroll
;call calc_scroll_size_and_pos
jmp still ; go to still
; GO_START }
 
 
no_go_to_start:
 
 
; GO_END {
cmp al,253 ; Ctrl + ]
jnz no_go_to_end
cmp [lines],30 ;to fix ctrl+] bug
jb @f
mov eax,[lines] ; eax = lines in the file
sub eax,[slines] ; eax -= lines on the screen
; imul eax,80 ; eax *= 80 (length of line)
lea eax,[eax+eax*4]
shl eax,4
mov [post],eax ; offset in the file
 
call clear_screen
call drawfile ; draw file
call draw_vertical_scroll
@@:
jmp still ; go to still
; GO_END }
 
 
no_go_to_end:
 
 
; DELETE {
cmp al,134+48
jne nodel
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ecx,eax
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
 
push ebx
 
dec ecx
dec ebx
 
 
push ecx ebx
 
push ebx
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
mov ecx,eax
 
xor eax,eax
cdq
 
pop ebx
 
dec ecx
@@:
inc ecx
mov dh,[ecx]
cmp dh,33
jb .nok
xor eax,eax
inc eax
.nok:
cmp ecx,ebx
jb @b
 
pop ebx ecx
 
@@:
inc ecx
mov dl,[ecx+1]
mov [ecx],dl
cmp ecx,ebx
jb @b
 
 
pop ebx
mov [ebx],byte 32
 
test eax,eax
jz dellinesup
 
call clear_screen
call drawfile
mov [modified],1
 
jmp still
 
dellinesup:
 
; lines -1
 
pusha
 
mov eax,[post]
cdq
mov ebx,80
div ebx
add eax,[posy]
inc eax
 
cmp eax,[lines]
jb @f
 
popa
mov [modified],1
 
jmp still
 
@@:
 
popa
 
dec [lines]
 
; lines up
 
mov [posx],dword 0
 
imul eax,[posy],80
add eax,0x80000-1
add eax,[post]
mov ebx,eax
 
push ebx
 
imul eax,[lines],80
add eax,0x80000-1
add eax,[post]
mov ecx,eax
 
pop ebx
 
@@:
mov dl,[ebx+80]
mov [ebx],dl
inc ebx
 
cmp ecx,ebx
jnz @b
 
call clear_screen
call drawfile
mov [modified],1
 
jmp still
; DELETE }
 
 
nodel:
 
 
; INSERT {
cmp al,137+48
jnz noins
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ecx,eax
; ecx = [posy]*80+0x80000+[post]+[posx]
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
; ebx = [posy]*80+0x80000+79+[post]
 
.movstr:
dec ebx
mov dl,[ebx]
mov [ebx+1],dl
cmp ecx,ebx
jb .movstr
 
mov [ecx],byte ' '
 
call invalidate_string
call drawfile
mov [modified],1
 
jmp still
; INSERT }
 
 
noins:
 
 
; BACKSPACE {
cmp al,8
jnz nobs
mov ecx,[posx]
test ecx,ecx
jz still
dec ecx
mov [posx],ecx
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ebx,eax
 
push ebx
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
 
pop ecx
 
push ebx
 
dec ecx
.movleft:
inc ecx
mov dl,[ecx+1]
mov [ecx],dl
cmp ecx,ebx
jb .movleft
 
pop ebx
mov [ebx],byte ' '
 
call invalidate_string
call drawfile
mov [modified],1
 
jmp still
; BACKSPACE }
 
 
nobs:
 
 
; TAB {
cmp eax,9 ; Tab
jne notab
 
mov eax,[posx]
cmp eax,80-1
jae still
add eax,5 ; 9 5 3
and eax,11111100b ; ...1000b, ...100b, ...10b
dec eax
mov [posx], eax
 
call drawfile
mov [modified],1
 
jmp still
; TAB }
 
 
notab:
 
 
; ADD_KEY {
push eax ; add key
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ecx,eax
 
push ecx
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
 
.movright:
dec ebx
mov al,[ebx]
mov [ebx+1],al
cmp ecx,ebx
jbe .movright
 
pop ebx
 
pop eax
 
mov [ebx],al
mov edx,78
mov ecx,[posx]
cmp edx,ecx
jb noxp
inc ecx
mov [posx],ecx
noxp:
 
call invalidate_string
call drawfile
mov [modified],1
; call draw_vertical_scroll
jmp still
; ADD_KEY }
 
 
;******************************************************************************
 
start_fasm:
cmp [asm_mode],1
je @f
ret
@@:
mov esi,filename
mov edi,fasm_parameters
 
cmp byte [esi],'/'
je .yes_systree
 
mov ecx,[filename_len]
rep movsb
 
mov al,','
stosb
 
mov ecx,[filename_len]
add ecx,-4
mov esi,filename
rep movsb
 
mov al,','
stosb
 
mov [edi],dword '/RD/'
add edi,4
mov [edi],word '1/'
inc edi
inc edi
 
mov al,0
stosb
 
jmp .run
 
.yes_systree:
add esi,[filename_len]
dec esi
 
xor ecx,ecx
mov al,'/'
@@:
cmp [esi],al
je @f
dec esi
inc ecx
jmp @b
@@:
inc esi
 
push esi
push esi
push ecx
 
rep movsb
 
mov al,','
stosb
 
pop ecx
pop esi
 
add ecx,-4
rep movsb
 
mov al,','
stosb
 
pop ecx
sub ecx,filename
mov esi,filename
 
rep movsb
 
mov al,0
stosb
 
.run:
cmp [run_outfile],1
jne @f
dec edi
mov eax,',run'
stosd
mov al,0
stosb
@@:
 
mov eax,19
mov ebx,fasm_filename
mov ecx,fasm_parameters
int 0x40
ret
 
open_debug_board:
mov eax,19
mov ebx,debug_filename
xor ecx,ecx
int 0x40
ret
 
open_sysfuncs_txt:
mov eax,19
mov ebx,tinypad_filename
mov ecx,sysfuncs_filename
int 0x40
ret
 
 
empty_work_space:
; ®ç¨áâ¨âì ¢á¥
mov eax,' '
mov edi,0x80000
mov ecx,(0x300000-0x90000)/4
cld
rep stosd
mov edi,0x10000
mov ecx,0x60000/4
rep stosd
ret
 
 
clear_screen:
; ®ç¨áâ¨âì íªà ­
mov ecx,80*40
mov edi,0x78000
xor eax,eax
@@:
mov [edi],eax
add edi,4
dec ecx
jnz @b
ret
 
invalidate_string:
imul eax,[posy],80
add eax,0x78000
mov edi,eax
mov al,1
mov ecx,80/4
rep stosd
ret
 
layout:
; ᬥ­¨âì à áª« ¤ªã ª« ¢¨ âãàë
mov eax,19
mov ebx,setup
mov ecx,param_setup
int 0x40
mov eax,5
mov ebx,eax
int 0x40
call activate_me
ret
 
 
activate_me:
; 1) get info about me
mov eax,9
mov ebx,procinfo
mov ecx,-1
int 0x40
; eax = number of processes
 
; save process counter
inc eax
inc eax
mov [proccount],eax
 
mov eax,[procinfo.PID]
mov [PID],eax
 
; 2) get my process number
mov eax,9
mov ebx,procinfo
mov ecx,[proccount]
@@:
dec ecx
jz @f ; counter=0 => not found? => return
mov eax,9
int 0x40
mov edx,[procinfo.PID]
cmp edx,[PID]
jne @b
 
;found: ecx = process_number
mov eax,18
mov ebx,3
int 0x40
 
mov eax,5
mov ebx,eax
int 0x40
 
@@:
ret
 
 
 
 
; *******************************************************************
; ************************** DRAW WINDOW **************************
; *******************************************************************
 
align 4
drawwindow:
 
mov eax,12 ; WINDOW DRAW START
mov ebx,1
int 0x40
mov [menu_is_on],0
mov eax,48 ; get system colors
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
int 0x40
 
mov [sc.work],0xe0e0e0
 
xor eax,eax ; DEFINE WINDOW
mov ebx,100*65536+506 ; 496
mov ecx,75*65536+400 ;385;400 ; sum < 480 for 640x480
mov edx,[sc.work]
add edx,0x03000000
mov esi,[sc.grab]
or esi,0x80000000
mov edi,[sc.frame]
int 0x40
 
; header string
mov eax,4
mov ebx,10*65536+8
mov ecx,[sc.grab_text]
mov edx,header
mov esi,[headlen]
int 0x40
 
mov eax,9 ; get info about me
mov ebx,procinfo
or ecx,-1
int 0x40
 
mov eax,[procinfo.y_size]
 
mov [do_not_draw],1 ; do_not_draw = true
cmp eax,100
jb .no_draw ; do not draw text & buttons if height < 100
mov [do_not_draw],0 ; do_not_draw = false
add eax,-(46+47) ; 46 = y offs
cdq
mov ebx,10
div ebx
mov [slines],eax
 
cmp eax,[posy]
jnb @f
dec eax
mov [posy],eax
@@:
 
mov eax,[procinfo.y_size] ; calculate buttons position
add eax,-47
mov [dstart],eax
 
; mov eax,8 ; STRING BUTTON
; mov ebx,5*65536+57
; mov ecx,[dstart]
; add ecx,29
; shl ecx,16
; add ecx,13
; mov edx,51 ;;;;;-----string button ID=51
; mov esi,[sc.work_button]
; int 0x40
; SEARCH BUTTON
; mov ebx,(505-129)*65536+125
; mov edx,50
; mov esi,[sc.work_button]
; int 0x40
 
; mov eax,4 ; SEARCH TEXT
; mov ebx,[dstart]
; add ebx,7*65536+32
; mov ecx,[sc.work_button_text]
; mov edx,searcht
; mov esi,searchtl-searcht
; int 0x40
 
 
mov eax,13 ; BAR STRIPE
mov ebx,5*65536+497
mov ecx,[dstart]
shl ecx,16
add ecx,30 ;15
 
mov edx,0x00aaaaaa
int 0x40
 
; mov eax,4 ; FIRST TEXT LINE (POSITION...)
; mov ebx,12*65536
; add ebx,[dstart]
; add ebx,38 ;18
; mov ecx,[sc.work_button_text]
; mov edx,htext2
; mov esi,htextlen2-htext2
; int 0x40
 
 
call drawfile
 
; mov eax,[dstart]
 
; add eax,31
; mov [ya],eax
; mov [addr],search_string
; call print_text
 
.no_draw:
call draw_win_menu
 
call draw_vertical_scroll
 
mov eax,12 ; WINDOW DRAW END
mov ebx,2
int 0x40
 
ret
 
 
 
 
; **********************************
; *********** DRAWFILE ***********
; **********************************
 
drawfile:
;---------------
cmp [menu_is_on],1
jne .ff
call drawwindow
.ff:
;---------------
mov [next_not_quote],1
mov [next_not_quote2],1
 
mov eax,[post] ; print from position
 
pusha
 
mov edi,[post]
mov [posl],edi
 
mov ebx,8*65536+46 ; letters (46 = y offs)
xor ecx,ecx
 
mov edx,0x80000
add edx,eax
mov edi,edx
 
imul esi,[slines],80
add edi,esi
 
 
nd:
 
pusha
 
mov edx,ebx
mov edi,ebx
add edi,(6*65536)*80
 
wi1:
 
 
; draw ?
 
 
pusha
 
push ecx
 
imul eax,[posx],6
add eax,8
shl eax,16
mov ecx,eax
 
;  ecx = ([posx]*6+8)<<16
 
imul eax,[posy],10
add eax,46 ; y offs
add eax,ecx
 
;  eax = [posy]*10+46+ecx
 
pop ecx
 
cmp edx,eax
jnz drwa
 
mov eax,0x7ffff
call check_pos
jmp drlet
 
drwa:
 
popa
 
 
pusha
 
imul eax,[posxm],6
add eax,8
shl eax,16
mov ecx,eax
 
imul eax,[posym],10
add eax,46 ; y offs
add eax,ecx
 
cmp edx,eax
jnz drwa2
 
mov eax,0x7ffff
call check_pos
jmp drlet
 
drwa2:
 
popa
 
pusha
 
mov eax,0x78000 ; screen
add eax,[posl] ; screen+abs
sub eax,[post] ; eax = screen+abs-base = y*80+x + screen
 
mov edx,0x80000 ; file
add edx,[posl] ; edx = absolute
mov bl,[edx] ; in the file
 
call check_pos
 
mov cl,[eax] ; on the screen
cmp bl,cl
jnz drlet
 
popa
 
jmp nodraw
 
 
; draw letter
 
 
drlet:
 
mov [eax],bl ; mov byte to the screen
mov [tmpabc],bl
popa ; restore regs
 
;!!!!!!!!!!!!
 
cmp [tmpabc],' '
je @f
call draw_letter
jmp nodraw
@@:
call clear_char
 
nodraw:
 
inc [posl]
 
add edx,6*65536
cmp edx,edi
jz wi3
jmp wi1
 
wi3:
 
popa
 
add ebx,10
add edx,80
cmp edi,edx
jbe nde
jmp nd
 
nde:
 
mov eax,[posx]
mov ebx,[posy]
 
mov [posxm],eax
mov [posym],ebx
 
popa
 
ret
 
stText = 0
stInstr = 1
stReg = 2
stNum = 3
stQuote = 4
stComment = 5
stSymbol = 6
 
align 4
 
clear_char:
 
pusha
mov ebx,[sc.work]
 
push ecx
 
imul eax,[posx],6
add eax,8
shl eax,16
mov ecx,eax
 
imul eax,[posy],10
add eax,46 ; 26
add eax,ecx
 
pop ecx
cmp edx,eax
jnz @f
mov ebx,0xffffff ; light blue 0x00ffff
@@:
 
; draw bar
push ebx
mov eax,13
mov ebx,edx
mov bx,6
mov ecx,edx
shl ecx,16
add ecx,10
pop edx
int 0x40
popa
ret
 
align 4
 
; CHECK_POSITION {
check_pos:
cmp [asm_mode],1
je @f
 
mov [d_status],stText
ret
 
@@:
pushad
 
; COMMENT TERMINATOR
cmp [d_status],stComment
jnz @f
mov eax,[posl]
sub eax,[post]
cdq
mov ebx,80
div ebx
test edx,edx
jnz end_check_pos
mov [d_status],stText
@@:
 
; QUOTE TERMINATOR B
cmp [next_not_quote],1
jne @f
mov [d_status],stText
@@:
 
mov eax,[posl]
add eax,0x80000
mov edx,eax
mov al,[eax]
 
; QUOTE TERMINATOR A
cmp [d_status],stQuote
jnz @f
cmp al,[quote]
jne end_check_pos
mov [next_not_quote],1
jmp end_check_pos
@@:
mov [next_not_quote],0
 
; START QUOTE 1
cmp al,"'"
jne @f
mov [d_status],stQuote
mov [quote],al
jmp end_check_pos
@@:
 
; START QUOTE 2
cmp al,'"'
jne @f
mov [d_status],stQuote
mov [quote],al
jmp end_check_pos
@@:
 
; START COMMENT
cmp al,';'
jne @f
mov [d_status],stComment
jmp end_check_pos
@@:
 
; NUMBER TERMINATOR
cmp [d_status],stNum
jne nonumt
mov ecx,23
@@:
dec ecx
jz nonumt
cmp al,[symbols+ecx]
jne @b
 
nonumt1:
mov [d_status],stText
nonumt:
 
; START NUMBER
cmp [d_status],stNum
je end_check_pos
cmp al,'0'
jb nonum
cmp al,'9'
ja nonum
mov bl,[edx-1]
mov ecx,23
@@:
dec ecx
jz nonum
cmp bl,[symbols+ecx]
jne @b
@@:
mov [d_status],stNum
jmp end_check_pos
nonum:
 
; SYMBOL
mov esi,symbols
mov ecx,21
@@:
cmp byte [esi],al
je @f
dec ecx
jz nosymbol
inc esi
jmp @b
@@:
mov [d_status],stSymbol
jmp end_check_pos
 
nosymbol:
mov [d_status],stText
 
end_check_pos:
popad
ret
; CHECK_POSITION }
 
 
;;;;;;;;;;;;;;;;;
;; DRAW LETTER ;;
;;;;;;;;;;;;;;;;;
draw_letter:
 
call clear_char
 
pusha
 
mov ebx,edx ; x & y
 
mov eax,[d_status]
mov ecx,[eax*4+color_tbl]
mov eax,4
 
xor esi,esi
inc esi
mov edx,0x80000
mov edi,[posl]
add edx,edi
int 0x40
 
popa
 
ret
 
 
; ********************************************
; **************** SAVEFILE ****************
; ********************************************
save_file:
mov esi,0x80000
mov edi,0x10000
or ecx,-1
.new_string:
inc ecx
call save_string
cmp ecx,[lines]
jb .new_string
 
sub edi,0x10004 ; why???
mov [filelen],edi
 
cmp byte [filename],'/'
je .systree_save
 
mov eax,33
mov ebx,filename
mov ecx,0x10000
mov edx,[filelen]
xor esi,esi
int 0x40
 
test eax,eax
je .finish
; call file_not_found
call disk_is_full
;==============================
jmp .finish
 
.systree_save:
mov eax,[filelen]
mov [fileinfo_write+8],eax
 
mov esi,filename
mov edi,pathfile_write
mov ecx,50
cld
rep movsb
 
mov eax,58
mov ebx,fileinfo_write
int 0x40
cmp eax,0
je .finish
call disk_is_full
.finish:
call draw_window_for_dialogs
mov [modified],0
ret
 
save_string:
push ecx
push esi
mov eax,esi
mov ebx,eax
add ebx,79
.countlen:
cmp ebx,eax
jb .endcount
cmp byte [ebx],' '
jne .endcount
dec ebx
jmp .countlen
.endcount:
inc ebx
sub ebx,eax
 
mov ecx,ebx
jecxz .endcopy
.copystr:
mov al,[esi]
mov [edi],al
inc esi
inc edi
dec ecx
jnz .copystr
.endcopy:
 
mov eax,0x0a0d
stosw
 
pop esi
add esi,80
pop ecx
ret
 
 
 
; ********************************************
; **************** LOADFILE ****************
; ********************************************
 
loadhdfile:
 
mov esi,filename
mov edi,pathfile_read
mov ecx,250 ;50
cld
rep movsb
 
mov eax,58
mov ebx,fileinfo_read
int 0x40
 
xchg eax,ebx
inc eax
test ebx,ebx ;errorcode=0 - ok
je file_found
cmp ebx,6 ;errorcode=5 - ok
je file_found
call file_not_found
ret
 
 
loadfile1:
 
mov eax,6 ; 6 = open file
mov ebx,filename
xor ecx,ecx
mov edx,16800
mov esi,0x10000
int 0x40
 
inc eax ; eax = -1 -> file not found
jnz file_found ;strannaya proverka (Ed)
 
call file_not_found
ret
 
 
file_found:
dec eax
; eax = file size
jz .finish
mov [filesize],eax
 
mov edi,0x80000 ; clear all
@@:
mov [edi],byte ' '
inc edi
cmp edi,0x2effff
jnz @b
 
mov [lines],0
mov edi,0x10000
mov ebx,0x80000
 
; edi = from
; ebx = to
; eax = filesize
 
.new_char:
mov cl,[edi] ; get_char();
cmp cl,13 ; if (char==13)
je .new_str1 ; goto .new_str1;
cmp cl,10 ; if (char==10)
je .new_str2 ; goto .new_str2;
mov [ebx],cl ; store_char();
inc ebx ; dest++;
.back:
inc edi ; src++;
dec eax ; counter--;
jnz .new_char ; if (counter!=0) goto .new_char;
 
.finish:
inc [lines] ; [lines]++;
ret
 
.new_str1:
pusha
mov eax,ebx ; eax = destination
add eax,-0x80000 ; eax = offset
cdq
mov ecx,80
div ecx ; offset /= 80;
test edx,edx ; if not the first char in the string
jne @f ; go forward
test eax,eax ; if first line
je @f ; go forward
cmp [edi-1],byte 10; if previous char != 10 continue without line feed
jne .contin
@@:
inc eax ; offset++;
imul eax,80 ; offset *= 80;
add eax,0x80000
mov [esp+4*4],eax ; to ebx
.contin:
popa
inc edi ; do not look on the next char (10)
dec eax ; counter--;
inc [lines] ; [lines]++;
jmp .back
 
 
.new_str2:
pusha
mov eax,ebx
add eax,-0x80000
cdq
mov ecx,80
div ecx
inc eax
imul eax,80
add eax,0x80000
mov [esp+4*4],eax ; to ebx
popa
inc [lines]
jmp .back
 
 
file_not_found:
mov eax,55 ; beep
mov ebx,eax
mov esi,error_beep
int 0x40
mov [lines],1 ; open empty document
 
mov [to_return2],1
call openerror
 
ret
 
disk_is_full:
mov eax,55 ; beep
mov ebx,eax
mov esi,error_beep
int 0x40
mov [to_return2],1
call saveerror
mov [error2_found],1
ret
 
 
; *****************************
; ****** WRITE POSITION ******
; *****************************
 
writepos:
 
cmp [do_not_draw],1 ; return if drawing is not permitted
jne @f
ret
@@:
 
pusha
 
mov eax,[posx]
inc eax
cdq
mov ebx,10
div ebx
add al,'0'
add dl,'0'
mov [htext2+ 9],al
mov [htext2+10],dl
 
mov eax,[post]
cdq
mov ebx,80
div ebx
mov [real_posy],eax ;=====!!!!!!!!!
 
add eax,[posy]
inc eax
mov ebx,10
cdq
div ebx
add dl,'0'
mov [htext2+16],dl ; 00001
cdq
div ebx
add dl,'0'
mov [htext2+15],dl ; 00010
cdq
div ebx
add dl,'0'
mov [htext2+14],dl ; 00100
cdq
div ebx
add dl,'0'
add al,'0'
mov [htext2+13],dl ; 01000
mov [htext2+12],al ; 10000
 
 
mov eax,[lines] ; number of lines
cdq
mov ebx,10
div ebx
add dl,'0'
mov [htext2+31],dl ; 0001
cdq
div ebx
add dl,'0'
mov [htext2+30],dl ; 0010
cdq
div ebx
add dl,'0'
mov [htext2+29],dl ; 0100
cdq
div ebx
add dl,'0'
add al,'0'
mov [htext2+28],dl
mov [htext2+27],al ; 10000
 
; €„Ž › Ž’Ž€†€’œ €‘Š‹€„Š“ Š‹€‚ˆ€’“›!
; mov [htext2+42], word 'RU'
 
; mov eax,13 ; draw bar
; mov ebx,5*65536+38*6
; mov ecx,[dstart]
; shl ecx,16
; add ecx,15
; mov edx,[sc.work_graph]
; int 0x40
 
mov eax,13 ; BAR STRIPE
mov ebx,5*65536+497
mov ecx,[dstart]
add ecx,29;30 ;15
shl ecx,16
add ecx,14
mov edx,[sc.work_graph]
int 0x40
 
mov eax,4 ; write position
mov ebx,12*65536
mov bx,word [dstart]
add ebx,33 ;18
mov ecx,[sc.work_button_text]
mov edx,htext2
mov esi,38
int 0x40
 
cmp [modified],1
jne no_mod
putlabel 270,386,'ˆ‡Œ……',[sc.work_button_text]
no_mod:
popa
 
ret
 
;-----------------------------
; search window
;-----------------------------
search_window:
 
mov eax,13
mov ebx,55*65536+380
mov ecx,100*65536+60
mov edx,[sc.work_graph]
int 0x40
 
mov eax,38
mov ebx,55*65536+435
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,55*65536+55
mov ecx,100*65536+160
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,435*65536+435
mov ecx,100*65536+160
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,55*65536+435
mov ecx,160*65536+160
mov edx,cl_White
int 0x40
 
 
drawlbut 375,110,50,15,'®¨áª',50,[sc.work_button],[sc.work_button_text]
drawlbut 375,130,50,15,'Žâ¬¥­ ',94,[sc.work_button],[sc.work_button_text]
 
call read_string
 
; add eax,31
; mov [ya],eax
; mov [addr],search_string
; call print_text
 
 
 
jmp search
 
string_not_found:
mov eax,13
mov ebx,150*65536+200
mov ecx,100*65536+70
mov edx,[sc.work_graph] ;0x00dd9438 ;0x00ff7512
int 0x40
 
mov eax,38
mov ebx,150*65536+350
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+350
mov ecx,170*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+150
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,350*65536+350
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
 
 
putlabel 195,120,'‘âப  ­¥ ­ ©¤¥­­ !',cl_White
 
drawlbut 235,140,30,15,'Žª',94,[sc.work_button],cl_White
 
ret
 
read_string:
 
push eax
;----------------
mov eax,40
mov ebx,00000000000000000000000000000111b
int 0x40
;----------------
pop eax
 
; cmp al,51
; jz .f2
; ret
 
.f2:
mov [addr],dword search_string
mov eax,[dstart]
add eax,17+14
mov [ya],eax
mov [case_sens],1
 
.rk:
 
mov edi,[addr]
 
mov eax,[addr]
mov eax,[eax-4]
mov [temp],eax
 
add edi,eax
 
call print_text
 
.waitev:
mov eax, 10
int 0x40
cmp eax, 2
jne .read_done
int 0x40
shr eax, 8
 
cmp al, 13 ; enter
je .read_done
 
cmp al,27
jne ._f
jmp red
._f:
cmp al, 192 ; Ctrl + space
jne .noclear
 
xor eax, eax
mov [temp], eax
mov edi, [addr]
mov [edi-4], eax
mov ecx, 49
cld
rep stosb
mov edi, [addr]
call print_text
jmp .waitev
 
.noclear:
 
cmp al, 8 ; backspace
jnz .nobsl
cmp [temp], 0
jz .waitev
dec [temp]
mov edi, [addr]
add edi, [temp]
mov [edi], byte 0
 
mov eax,[addr]
dec dword [eax-4]
 
call print_text
jmp .waitev
 
.nobsl:
cmp [temp],50
jae .read_done
 
; CONVERT CHAR TO UPPER CASE:
cmp al, ' ' ; below "space" - ignore
jb .waitev
cmp [case_sens], 1 ; case sensitive?
je .keyok
cmp al, 'a'
jb .keyok
cmp al, 'z'
ja .keyok
sub al, 32
.keyok:
 
mov edi,[addr]
add edi,[temp]
mov [edi],al
 
inc [temp]
 
mov eax,[addr]
inc dword [eax-4]
call print_text
 
cmp [temp],50
jbe .waitev
 
.read_done:
mov ecx,50
sub ecx,[temp]
mov edi,[addr]
add edi,[temp]
xor eax,eax
cld
rep stosb
 
mov [temp],987
 
call print_text
call mask_events
ret
 
 
print_text:
 
pusha
 
mov eax,13
mov ebx,64*65536+50*6+2
; mov ecx,[ya]
; shl ecx,16
; add ecx,12
mov ecx,110*65536+12
mov edx,[sc.work]
int 0x40
 
mov edx,[addr]
mov esi,[edx-4]
mov eax,4
mov ebx,65*65536+112 ;2
; add ebx,[ya]
mov ecx,[color_tbl+0]
int 0x40
 
cmp [temp],50
ja @f
 
; draw cursor
; {
; mov eax,[ya]
mov eax,18*65536+102 ;65
mov ebx,eax
shl eax,16
add eax,ebx
add eax,10
mov ecx,eax
 
mov eax,[temp]
; imul eax,6
lea eax,[eax+eax*2]
shl eax,1
add eax,65
mov ebx,eax
shl eax,16
add ebx,eax
 
mov eax,38
mov edx,[color_tbl+0]
int 0x40
; }
 
@@:
popa
 
ret
 
 
 
; mov eax,8 ; STRING BUTTON
; mov ebx,5*65536+57
; mov ecx,[dstart]
; add ecx,29
; shl ecx,16
; add ecx,13
; mov edx,51 ;;;;;-----string button ID=51
; mov esi,[sc.work_button]
; int 0x40
; SEARCH BUTTON
; mov ebx,(505-129)*65536+125
; mov edx,50
; mov esi,[sc.work_button]
; int 0x40
 
; mov eax,4 ; SEARCH TEXT
; mov ebx,[dstart]
; add ebx,7*65536+32
; mov ecx,[sc.work_button_text]
; mov edx,searcht
; mov esi,searchtl-searcht
; int 0x40
 
 
 
; ****************************
; ******* READ STRING ********
; ****************************
goto_string:
 
mov [num_goto_string],0
call read_str_num
mov eax,[num_goto_string]
cmp eax,[lines]
ja .leave
 
;---------------
mov [posy],0
call goto_pos
 
.leave:
call draw_window_for_dialogs
call mask_events
 
jmp still
 
 
read_str_num:
push eax
;----------------
mov eax,40
mov ebx,00000000000000000000000000000111b
int 0x40
;----------------
pop eax
 
mov eax,13
mov ebx,100*65536+100
mov ecx,70*65536+60
mov edx,[sc.work_button]
int 0x40
 
 
mov eax,38
mov ebx,100*65536+200
mov ecx,70*65536+70
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,100*65536+200
mov ecx,130*65536+130
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,100*65536+100
mov ecx,70*65536+130
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,200*65536+200
mov ecx,70*65536+130
mov edx,cl_White
int 0x40
 
 
 
putlabel 105,75,'GoTo Line #',cl_White
mov eax,13
mov ebx,110*65536+40
mov ecx,90*65536+12;[ya]
mov edx,[sc.work]
int 0x40
 
outcount [num_goto_string],112,92,cl_Black,6*65536
drawlbut 110,105,40,15,'GoTo',93,cl_Grey,cl_Black
drawlbut 153,105,40,15,'Cancel',94,cl_Grey,cl_Black
.waitev:
mov eax, 10
int 0x40
; cmp eax,6
; je .mouse
cmp eax,3
je .but
cmp eax, 2
; jne .read_done
jne .waitev
int 0x40
shr eax, 8
 
cmp al, 13 ; enter
je .read_done
cmp al,27
je goto_string.leave
cmp al, 8 ; backspace
jnz .nobsl
 
xor edx,edx
 
mov eax,[num_goto_string]
mov ebx,dword 10
div ebx
mov [num_goto_string],eax
call print_text2
jmp .waitev
 
;.mouse:
;mov eax,37
;mov ebx,2
;int 0x40
;cmp eax,2
;je goto_string.leave
;jmp .waitev
 
.but:
mov eax,17
int 0x40
cmp ah,94
je goto_string.leave
cmp ah,93
je .read_done
jmp .waitev
 
 
.nobsl:
xor ecx,ecx
xor edx,edx
 
sub al,48
mov cl,al
 
mov eax,[num_goto_string]
cmp eax,99999
ja .read_done
mov ebx,10
mul ebx
add eax,ecx
mov [num_goto_string],eax
 
call print_text2
jmp .waitev
 
.read_done:
mov eax,[num_goto_string]
dec eax
mov [num_goto_string],eax
call print_text2
ret
 
 
print_text2:
 
pusha
 
mov eax,13
mov ebx,110*65536+40
mov ecx,90*65536+12;[ya]
mov edx,[sc.work]
int 0x40
 
outcount [num_goto_string],112,92,cl_Black,6*65536
popa
 
ret
 
;******************************************************************************
calc_scroll_size_and_pos:
 
;cmp [menu_is_on],0
;je ._ff
;call drawwindow
;mov [menu_is_on],0
;._ff:
 
cmp [lines],30
jbe .lines_less_30
 
xor edx,edx
mov eax,[post]
mov ebx,80
div ebx
add eax,[posy]
;add eax,[slines]
 
;checking for bug
mov ebx,[lines]
sub ebx,30
 
cmp eax,ebx
ja .f
mov [VScroll_1+16],eax
jmp .ff
.f:
mov [VScroll_1+16],ebx
 
.ff:
;---------------------
mov eax,[lines]
sub eax,30 ;---max=lines-30
mov [VScroll_1+12],eax
jmp .leave
 
.lines_less_30:
 
mov [VScroll_1+16],dword 0
mov [VScroll_1+12],dword 1
 
.leave:
 
ret
;============Draw vertical scroll bar=========
draw_vertical_scroll:
call calc_scroll_size_and_pos
;========================
xor ecx,ecx ;start at top of controls list
Draw_Controls_Loop: ;Redraw Controls Loop
mov ebp, [App_Controls+ecx] ;get controls data location
or ebp,ebp ;is this the last control?
jz Draw_Controls_Done ;
call dword [App_Controls+ecx+4] ;call controls draw function
add ecx, 12 ;get next control
jmp Draw_Controls_Loop ;loop till done
Draw_Controls_Done: ;all done
;========================
 
mov eax,38
mov ebx,488*65536+488
mov ecx,43*65536+388
mov edx,0x00000000
int 0x40
ret
 
mouse_info:
;call
mov eax, 37 ;get mouse cordinates
mov ebx, 1 ;
int 0x40 ;
mov ecx, eax ;
push ecx ;
mov eax, 37 ;get mouse buttons
mov ebx, 2 ;
int 0x40 ;
;------------------
; if menu is on - then we need to redraw window before continue
cmp eax,1
jne ._f1
 
pusha
cmp [menu_is_on],0
je ._ff
call drawwindow
mov [menu_is_on],0
._ff:
popa
 
._f1:
;------------------
cmp [mouseb], eax ;compare old mouse states to new states
jne redraw_mouse_info ;
cmp [mousey], cx ;
jne redraw_mouse_info ;
shr ecx, 16 ;
cmp [mousex], cx ;
jne redraw_mouse_info ;
pop ecx ;
ret ;return if no change in states
redraw_mouse_info:
pop ecx
mov [mouseb], eax ;save new mouse states
mov dword [mousey], ecx
xor ecx, ecx
Check_Mouse_Over_Controls_Loop:
mov ebp, [App_Controls+ecx]
or ebp, ebp
jz Check_Mouse_Over_Controls_Loop_done
 
movzx eax,word [ebp+2]
cmp ax, [mousex]
ja mouse_not_on_control
movzx eax,word [ebp+6]
cmp ax, [mousey]
ja mouse_not_on_control
movzx eax,word [ebp]
add ax, [ebp+2]
cmp ax, [mousex]
jb mouse_not_on_control
movzx eax,word [ebp+4]
add ax, [ebp+6]
cmp ax, [mousey]
jb mouse_not_on_control
call dword [App_Controls+ecx+8]
;------------------------------
cmp [mouseb],1
jne mouse_not_on_control
mov eax,[VScroll_1+16]
call goto_pos
;------------------------------
 
mouse_not_on_control:
add ecx, 12
jmp Check_Mouse_Over_Controls_Loop
Check_Mouse_Over_Controls_Loop_done:
 
ret
;******************************************************************************
goto_pos:
;pusha
 
mov ecx,eax ;save new position number in ecx for future
 
cmp [lines],30 ;check for 'cursor' bug
jbe .lines_less_30
;---------------
 
mov edx,[lines] ;if new pos is > than (lines-30)
sub edx,30
 
cmp eax,edx
ja .f1
jmp .ff
 
.f1:
mov eax,edx ;than newpos is = (lines-30)
 
sub ecx,edx ;and posY=newpos-(lines-30)
mov [posy],ecx
 
.ff:
 
;-----------------------
;in eax must be string number
mov ecx,80
mul ecx
 
; add eax,[slines]
; sub
;------------------------
mov [post],eax
 
.lines_less_30:
call clear_screen
call drawfile
;popa
ret
;******************************************************************************
mask_events:
mov eax,40
mov ebx,00100111b
int 0x40
ret
;******************************************************************************
main_cursor_move:
;call drawwindow
sub [mouse_x],7
sub [mouse_y],45
 
xor edx,edx
mov eax,[mouse_x]
mov ebx,6
div ebx ;eax=result
mov [posx],eax
 
xor edx,edx
mov eax,dword [mouse_y]
mov ebx,dword 10
div ebx ;eax=result=new posY
 
;error checking ------
cmp [lines],dword 1 ;for "1st line" bug
je ._do_nothing
 
mov ebx,[lines]
sub ebx,dword 1
 
cmp eax,ebx ;[lines]
ja ._do_nothing
 
;----------------------
mov [posy],eax
 
._do_nothing:
call clear_screen
call drawfile
call draw_vertical_scroll
ret
 
;******************************************************************************
make_fast_so:
;===========================
; 1) get info about me
mov eax,9
mov ebx,procinfo
mov ecx,-1
int 0x40
; eax = number of processes
 
; save process counter
inc eax
inc eax
mov [proccount],eax
 
mov eax,[procinfo.PID]
mov [PID],eax
;==========================
 
 
mov eax,51
mov ebx,1
mov ecx,fast_so_thread_start
mov edx,so_stack
int 0x40
ret
;******************************************************************************
 
;fast save & fast open
draw_fastso_window:
startwd
colorwindow 120,100,454,70,window_Type1+0x00cccccc,0x00cccccc,cl_Black
 
call draw_string00
drawlbut 10,40,30,20,'Save',17,cl_Grey,cl_Black
 
drawlbut 50,40,30,20,'Open',18,cl_Grey,cl_Black
 
drawlbut 90,40,37,20,'Close',19,cl_Grey,cl_Black
endwd
ret
 
draw_string00:
mov ebx,10*65536+433
mov ecx,10*65536+20
mov edx,0x00ffffff
mov eax,13
int 0x40
 
push eax
mov eax,6*65536
mul dword [pos00]
add eax,10*65536+6
mov ebx,eax
pop eax
mov edx,0x6a73d0
int 0x40
 
mov eax,4
mov ebx,12*65536+17
mov ecx,cl_Black ;0x00000000
mov edx,mypath ;filename ;path
mov esi,71 ;200
int 0x40
ret
 
fast_so_thread_start:
;copy filename to mypath
cld
mov esi,filename
mov edi,mypath
mov ecx,71 ;200
rep movsb
mov edi,mypath
mov ecx,71 ;200
xor eax,eax
repne scasb
;end copy
call draw_fastso_window
 
fastso_still:
wtevent fred,fkey,fbut
jmp fastso_still
 
fred:
call draw_fastso_window
jmp fastso_still
 
;====KEY
fkey:
 
mov eax,2
int 0x40
 
cmp ah,179
jne noright00
mov eax,[pos00]
cmp eax,70 ;41
ja fastso_still
inc eax
mov [pos00],eax
call draw_string00
jmp fastso_still
noright00:
cmp ah,176
jne noleft00
mov eax,[pos00]
test eax,eax
je fastso_still
dec eax
mov [pos00],eax
call draw_string00
jmp fastso_still
noleft00:
cmp ah,182
jne nodelete00
call shiftback00
call draw_string00
jmp fastso_still
nodelete00:
cmp ah,8
jne noback00
mov eax,[pos00]
test eax,eax
je fastso_still
dec eax
mov [pos00],eax
call shiftback00
call draw_string00
jmp fastso_still
noback00:
enter00:
 
cmp ah,19 ;ctrl+s
je fast_save
cmp ah,15 ;ctrl+o
je fast_open
 
cmp ah,27 ;esli escape
jne noesc00
jmp closethis ;to zakrivaem okno i nifiga ne delayem
 
noesc00:
cmp dword [pos00],71 ;200 ;42
jae fastso_still ;if pos>71 then jump to still
 
;============letters==================
;~~~~~~~TEST CODE~~~~~~~~~
; upper case
shr eax,8
cmp eax,dword 31
jbe no_lit
cmp eax,dword 95
jb capital
sub eax,32
capital:
;~~~~~~~~~~~~~~~~~~~~~~~~~
mov edi,mypath ;filename ;mypath ;**************PATHNAME
add edi,71 ;200 ;count of letters
mov esi,edi
dec esi
mov ecx,71 ;200 ;again???
sub ecx,[pos00]
std
rep movsb
 
;shr eax,8
mov esi,mypath ;filename ;*************PATH AGAIN
add esi,[pos00]
mov byte [esi],al
inc dword [pos00]
call draw_string00
 
no_lit:
jmp fastso_still
;===============================
shiftback00:
mov edi,mypath ;filename ;******PATH
add edi,[pos00]
mov esi,edi
inc esi
mov ecx,71 ;200 ; count???
sub ecx,[pos00]
cld
rep movsb
ret
 
;******************************************************************************
 
;====button
fbut:
mov eax,17
int 0x40
cmp ah,17
je fast_save
cmp ah,18
je fast_open
cmp ah,19
je closethis
jmp fastso_still
;******************************************************************************
;******************************************************************************
 
fast_open:
call path_copy
call set_title
mov [to_return],1
call do_load_file
jmp closethis
fast_save:
call path_copy
call save_file
call set_title
;call copy_fpath_s
closethis:
mov [to_return],0
cmp [error_found],1
je @f
call activate_main
@@:
mov [error_found],0
close
 
 
activate_main:
mov eax,9
mov ebx,procinfo
mov ecx,[proccount]
@@:
dec ecx
jz @f ; counter=0 => not found? => return
mov eax,9
int 0x40
mov edx,[procinfo.PID]
cmp edx,[PID]
jne @b
 
;found: ecx = process_number
mov eax,18
mov ebx,3
int 0x40
 
mov eax,5
mov ebx,eax
int 0x40
 
@@:
ret
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
doyouwannasave:
;******************************************************************************
cmp [modified],0
je newfile
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep1
int 0x40
delay 4
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep2
int 0x40
 
mov eax,13
mov ebx,150*65536+200
mov ecx,100*65536+70
mov edx,[sc.work_graph] ;0x00dd9438 ;0x00ff7512
int 0x40
 
mov eax,38
mov ebx,150*65536+350
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+350
mov ecx,170*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+150
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,350*65536+350
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
 
 
putlabel 190,120,'‘®åà ­¨âì ¤®ªã¬¥­â?',cl_White
 
drawlbut 170,140,30,15,'„ ',46,[sc.work_button],cl_White
drawlbut 230,140,30,15,'¥â',45,[sc.work_button],cl_White
drawlbut 290,140,45,15,'Žâ¬¥­ ',47,[sc.work_button],cl_White
 
mov [exit_wnd_on],1
jmp still
;-------------
newfile:
;if filename is not NEWDOC## than change it to it!
mov eax,dword [orig_filename]
cmp dword [filename],eax ;[orig_filename]
je @f
cld
mov esi,orig_filename
mov edi,filename
mov ecx,71 ;50
rep movsb
mov edi,filename
mov ecx,71 ;50
xor eax,eax
repne scasb
sub edi,filename
dec edi
mov [filename_len],edi
 
@@:
 
call change_fname
call set_title
call draw_window_for_dialogs
call empty_work_space
mov [lines],1
jmp do_load_file.restorecursor
 
change_fname:
cmp [filename+7],'9'
jne addfname
cmp [filename+6],'9'
je error_creating_new_file
mov [filename+7],'0'
add [filename+6],0x1
jmp leavenow
addfname:
add [filename+7],0x1
leavenow:
ret
 
set_title:
cmp [error2_found],1
je no_set_title
mov esi, filename
mov edi, header
mov ecx, [filename_len]
mov eax, ecx
add eax, 10
mov [headlen], eax
cld
rep movsb
 
mov [edi], dword ' - '
add edi, 3
mov esi, htext
mov ecx, htext.size
rep movsb
 
call drawwindow
no_set_title:
mov [error2_found],0
ret
 
draw_window_for_dialogs:
call clear_screen
call drawwindow
ret
 
copy_fpath:
call mask_events
call path_copy
call set_title
call draw_window_for_dialogs
jmp do_load_file
 
copy_fpath_s:
call mask_events
call path_copy
call save_file
call set_title
call draw_window_for_dialogs
jmp still
 
path_copy:
cld
mov esi,mypath
mov edi,filename
mov ecx,250 ;71 ;50
rep movsb
mov edi,filename
mov ecx,250 ;71 ;50
xor eax,eax
repne scasb
sub edi,filename
dec edi
mov [filename_len],edi
ret
 
openerror:
mov eax,360
mov ebx,openerrtext
mov ecx,1
call alert_box
 
cmp [to_return2],1
jne jmp_to_still
mov [to_return2],0
mov [error_found],1
call mask_events
 
ret
 
saveerror:
mov eax,390
mov ebx,saveerrtext
mov ecx,1
call alert_box
cmp [to_return2],0
je jmp_to_still
mov [to_return2],0
mov [error_found],1
call mask_events
ret
;jmp still
jmp_to_still:
call mask_events
jmp still
 
error_creating_new_file:
mov eax,200
mov ebx,newfileerror
mov ecx,1
call alert_box
jmp still
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;MENU;;;;;;;;;;;;;;;;;;;;;;
draw_win_menu:
 
;mov eax,8
;mov ebx,145*65536+276
;mov ecx,22*65536+15
;mov edx,00100000000000000000000000001111b
;mov esi,0x00aaaaaa
;int 0x40
 
mov eax,13
mov ebx,5*65536+497
mov ecx,22*65536+17
mov edx,[sc.work_graph] ;0x00999999
int 0x40
mov ecx,39*65536+5
mov edx,0x00aaaaaa
int 0x40
 
drawlbut 5,22,70,15,'” ©«',97,[sc.work_button],[sc.work_button_text]
drawlbut 75,22,70,15,'Š®¤',98,[sc.work_button],[sc.work_button_text]
drawlbut 145,22,70,15,'’¥ªáâ',96,[sc.work_button],[sc.work_button_text]
drawlbut 431,22,70,15,'‘¯à ¢ª ',99,[sc.work_button],[sc.work_button_text]
 
ret
 
draw_win_menu_file:
call clear_screen
call drawwindow
;mov eax,13
;mov ebx,5*65536+71
;mov ecx,35*65536+90
;mov edx,[sc.grab_button];0x00999999
;int 0x40
;mov eax,38
;mov ebx,5*65536+35
;mov ecx,40*65536+47
;mov edx,0x00ff0000
;int 0x40
mov [menu_is_on],1
 
drawlbut 5,38,70,15,'®¢®¥ ®ª­®',100,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,53,70,15,'®¢ë©',101,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,68,70,15,'‘®åà ­¨âì',2,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,83,70,15,'‘®åà. ª ª',102,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,98,70,15,'Žâªàëâì',103,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,113,70,15,'‚ë室',104,[sc.grab_button],[sc.grab_button_text]
jmp still
 
draw_win_menu_code:
call clear_screen
call drawwindow
drawlbut 75,38,70,15,'Š®¬¯¨«.',10000,[sc.grab_button],[sc.grab_button_text]
drawlbut 75,53,70,15,'‡ ¯ãáâ¨âì',10001,[sc.grab_button],[sc.grab_button_text]
drawlbut 75,68,70,15,'„®áª  ®â«.',10002,[sc.grab_button],[sc.grab_button_text]
drawlbut 75,83,70,15,'SysFunc',10003,[sc.grab_button],[sc.grab_button_text]
mov [menu_is_on],1
jmp still
 
draw_win_menu_text:
call clear_screen
call drawwindow
drawlbut 145,38,70,15,'GoTo Line#',95,[sc.grab_button],[sc.grab_button_text]
drawlbut 145,53,70,15,' ©â¨',92,[sc.grab_button],[sc.grab_button_text]
drawlbut 145,68,70,15,' ©â¨ ¤ «¥¥',50,[sc.grab_button],[sc.grab_button_text]
mov [menu_is_on],1
jmp still
 
new_pad_wnd:
mov eax,19
mov ebx,tinypad_filename
mov ecx,0
int 0x40
jmp still
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
openerrtext db 'Žè¨¡ª  ®âªàëâ¨ï ä ©«  ¨«¨ ®âªàë⨥ ®â¬¥­¥­®!',0
saveerrtext db 'Žè¨¡ª  á®åà ­¥­¨ï ä ©«  ¨«¨ á®åà ­¥­¨¥ ®â¬¥­¥­®!',0
newfileerror db '¥¢®§¬®¦­® á®å¤ âì ­®¢ë© ä ©«',0
; ********************
; ****** DATA ******
; ********************
sz fasm_filename, 'FASM '
sz debug_filename, 'BOARD '
sz tinypad_filename, 'TINYPAD '
 
lsz sysfuncs_filename,\
ru, <'SYSFUNCR.TXT',0>,\
en, <'SYSFUNCS.TXT',0>
 
sz setup, 'SETUP ' ; we need to run SETUP to change keyboard layout
param_setup db 'LANG',0 ; parameter for SETUP
 
 
addr dd filename ; address of input string
 
filename_len dd 12
filename db 'NEWDOC00.TXT'
times 256 db 0;51-12 db 0
;times db 0 ; ï ­¥ §­ î ¯®ç¥¬ã ‚¨«« ­¥ ¯®áâ ¢¨« íâã áâà®çªã
orig_filename db 'NEWDOC00.TXT'
rb 256
search_len dd 5
search_string db 'still'
times 51-5 db 0
 
case_sens db 0 ; for search function
 
align 4
comment_string:
db ';***************************************'
db '*************************************** '
 
 
 
; INTERFACE DATA:
 
 
sz htext, 'TINYPAD'
;sz toolbar_btn_text, 'COMPILE RUN BOARD SYSFUNC'
 
 
searcht:
if lang eq ru
db ' ‘’ŽŠ€ > '
db ' Žˆ‘Š '
else
db ' STRING > '
db ' SEARCH '
end if
searchtl:
 
 
htext2:
if lang eq ru
db ' Ž‡ˆ–ˆŸ 00:00000 „‹ˆ€ 00000 ‘’ŽŠ '
else
db 'POSITION 00:00000 LENGTH 00000 LINES '
end if
htextlen2:
 
help_text:
if lang eq ru
db ' ŠŽŒ€„›: '
db ' '
db ' CTRL+F1 : â® ®ª­® '
db ' CTRL+S : ¥à¢ ï áâப  ¤«ï ª®¯¨à®¢ ­¨ï '
db ' CTRL+E : ®á«¥¤­ïï áâப  ¤«ï ª®¯¨à®¢ ­¨ï '
db ' CTRL+P : ‚áâ ¢¨âì ¢ë¡à ­­®¥ ­  ⥪ãéãî ¯®§¨æ¨î '
db ' CTRL+D : “¤ «¨âì áâபã '
db ' CTRL+L : ‚áâ ¢¨âì áâபã-à §¤¥«¨â¥«ì '
db ' CTRL+[ : ¥à¥©â¨ ¢ ­ ç «® ä ©«  '
db ' CTRL+] : ¥à¥©â¨ ¢ ª®­¥æ ä ©«  '
db ' CTRL+F2 : ‡ £à㧨âì ä ©« '
db ' CTRL+F3 : ®¨áª '
db ' CTRL+F4 : ‘®åà ­¨âì ä ©« '
db ' CTRL+F5 : ‘®åà ­¨âì ä ©« ª ª... '
db ' CTRL+F6 : ‚¢¥á⨠áâப㠤«ï ¯®¨áª  '
db ' CTRL+F7 : "Žª­® ¡ëáâண® á®åà ­¥­¨ï ¨ § £à㧪¨" '
db ' CTRL+F8 : ‘¬¥­¨âì à áª« ¤ªã ª« ¢¨ âãàë '
db ' CTRL+F9 : Š®¬¯¨«¨à®¢ âì ä ©« '
db ' CTRL+F10 : Š®¬¯¨«¨à®¢ âì ¨ § ¯ãáâ¨âì '
db ' F12 : ‡ ¯ãáâ¨âì ¤®áªã ®â« ¤ª¨ '
db 'x'
else
db ' COMMANDS: '
db ' '
db ' CTRL+F1 : SHOW THIS WINDOW '
db ' CTRL+S : SELECT FIRST STRING TO COPY '
db ' CTRL+E : SELECT LAST STRING TO COPY '
db ' CTRL+P : PASTE SELECTED TO CURRENT POSITION '
db ' CTRL+D : DELETE CURRENT LINE '
db ' CTRL+L : INSERT SEPARATOR LINE '
db ' CTRL+[ : GO TO THE BEGINNING OF FILE '
db ' CTRL+] : GO TO THE END OF FILE '
db ' CTRL+F2 : LOAD FILE '
db ' CTRL+F3 : SEARCH '
db ' CTRL+F4 : SAVE FILE '
db ' CTRL+F5 : SAVE FILE AS... '
db ' CTRL+F6 : ENTER SEARCH STRING '
db ' CTRL+F7 : DRAW "FAST SAVE AND OPEN" WINDOW '
db ' CTRL+F8 : CHANGE KEYBOARD LAYOUT '
db ' CTRL+F9 : COMPILE FILE '
db ' CTRL+F10 : RUN OUTFILE '
db ' F12 : OPEN DEBUG BOARD '
db 'x'
end if
 
help_wnd_header:
if lang eq ru
db 'ŽŒŽ™œ',0
else
db 'TINYPAD HELP',0
end if
 
hlphead_len = $ - help_wnd_header
 
save_yes_no:
if lang eq ru
db '‘®åà ­¨âì ä ©« ¯¥à¥¤ ¢ë室®¬?',0
else
db 'Save file before exit?',0
end if
 
VScroll_1:
dw 13 ;width +0
dw 489 ;x +2
dw 341 ;326 ;height +4
dw 43 ;y +6
dd 0 ;min +8
dd 100 ;scrl_max ;lines ;max +12
dd 0 ;cur_pos ;current +16
dd 1 ;small change +20
dd 10 ;big change +24
 
App_Controls:
dd VScroll_1 , drawvscroll, VScroll_mouse_over ;
dd 0,0,0 ;last control do not delete
 
; END OF INTERFACE DATA
 
symbols db '%#&*\:/<>|{}()[]=+-,. '
 
error_beep:
db 0xA0,0x30,0
save_beep1:
db 0x84,0x43,0
save_beep2:
db 0x84,0x48,0
 
 
align 4
fileinfo_read:
dd 0
dd 0
dd 300000/512
dd 0x10000
dd 0x70000
pathfile_read:
times 250 db 0 ;51 db 0
 
align 4
fileinfo_write:
dd 1
dd 0
dd 0
dd 0x10000
dd 0x70000
pathfile_write:
times 250 db 0 ; 51 db 0
 
align 4
 
temp dd 0xabc ; used in read_string
d_status dd 0
 
color_tbl:
dd 0x00000000 ; text
dd 0x00000000 ; instruction
dd 0x00000000 ; register
dd 0x00009000 ; number
dd 0x00a00000 ; quote
dd 0x00909090 ; comment
dd 0x003030f0 ; symbol
 
 
next_not_quote2 db 0 ; "
next_not_quote db 0 ; '
quote db 0
asm_mode db 0 ; ASM highlight?
tmpabc db 0
 
 
I_PARAM db 0 ; parameters are HERE - ¯ à ¬¥âàë ¡ã¤ãâ ­ ç¨­ âìáï ‡„…‘œ!
TINYPAD_END: ; end of file
 
 
; Uninitialised data
; ¥¨­¨æ¨ «¨§¨à®¢ ­­ë¥ ¤ ­­ë¥
align 4
 
posx dd ? ; x ­  íªà ­¥ (on the screen)
posy dd ? ; y ­  íªà ­¥
post dd ? ; ᬥ饭¨¥ ®â ­ ç «  - offset
posl dd ?
lines dd ? ; ª®«¨ç¥á⢮ áâப ¢ ¤®ªã¬¥­â¥
posxm dd ?
posym dd ?
 
dstart dd ? ; ᬥ饭¨¥ ¯® ®á¨ y ¤«ï ®âà¨á®¢ª¨ ª­®¯®ª ¨ ¤à.
 
filelen dd ? ; ¤«¨­  ä ©« 
 
PID dd ? ; ¨¤¥­â¨ä¨ª â®à ¯à®æ¥áá 
proccount dd ? ; ª®«¨ç¥á⢮ ¯à®æ¥áᮢ
 
filesize dd ? ; à §¬¥à ä ©« 
ya dd ? ; ¤«ï read_string
slines dd ? ; number of strings on the screen - ª®«¨ç¥á⢮ áâப ­  íªà ­¥
 
run_outfile dd ? ; for FASM
copy_start dd ? ; Ctrl+S
copy_count dd ? ; Ctrl+E
headlen dd ? ; header length
do_not_draw dd ? ; to draw or not to draw - this is a serious question ;)
 
MainWndClosed dd ?
sc system_colors
 
to_return db 0
to_return2 db 0
error_found db 0
error2_found db 0
 
header: ; window header - § £®«®¢®ª ®ª­ 
rb 256
 
; ¨­ä®à¬ æ¨ï ® ¯à®æ¥áᥠ§ ¯¨á뢠¥âáï ¢ íâã áâàãªâãàã
procinfo process_information
 
virtual at procinfo
fasm_parameters rb 256
end virtual
pos00 dd 0
newdoc db ?
mypath:
times 258 db 0
real_posy dd 0
vscroll_size dd 0
vscroll_pos dd 0
cur_pos dd 0
scrl_max dd 100
 
mouse_x dd 0
mouse_y dd 0
mousey dw 0
mousex dw 0
mouseb dd 0
 
num_goto_string dd 0
 
menu_is_on db 0
exit_wnd_on db 0
modified db 0
;fast save n open stack
rb 1024
so_stack:
;growing down
; the end!
 
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property