forked from KolibriOS/kolibrios
4002 lines
71 KiB
NASM
4002 lines
71 KiB
NASM
|
; 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,'<27><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD>㬥<EFBFBD><E3ACA5>?',cl_White
|
|||
|
|
|||
|
drawlbut 170,140,30,15,'<27><>',49,[sc.work_button],cl_White
|
|||
|
drawlbut 230,140,30,15,'<27><><EFBFBD>',48,[sc.work_button],cl_White
|
|||
|
drawlbut 290,140,45,15,'<27>⬥<EFBFBD><E2ACA5>',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:
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᮢ<EFBFBD><E1AEA2> <20><><EFBFBD><EFBFBD>
|
|||
|
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 -> <20><><EFBFBD>᪨<EFBFBD>
|
|||
|
; 2 times <20><><EFBFBD>᪨<EFBFBD> -> 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 ; ⥯<><E2A5AF><EFBFBD> 㪠<>뢠<EFBFBD><EBA2A0> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> 䠩<><E4A0A9>
|
|||
|
|
|||
|
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:
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
|||
|
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:
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>࠭
|
|||
|
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:
|
|||
|
; ᬥ<><E1ACA5><EFBFBD><EFBFBD> <20><>᪫<EFBFBD><E1AAAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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
|
|||
|
|
|||
|
; <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
|||
|
; 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,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',[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,'<27><><EFBFBD><EFBFBD><EFBFBD>',50,[sc.work_button],[sc.work_button_text]
|
|||
|
drawlbut 375,130,50,15,'<27>⬥<EFBFBD><E2ACA5>',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,'<27><>ப<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!',cl_White
|
|||
|
|
|||
|
drawlbut 235,140,30,15,'<27><>',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,'<27><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD>㬥<EFBFBD><E3ACA5>?',cl_White
|
|||
|
|
|||
|
drawlbut 170,140,30,15,'<27><>',46,[sc.work_button],cl_White
|
|||
|
drawlbut 230,140,30,15,'<27><><EFBFBD>',45,[sc.work_button],cl_White
|
|||
|
drawlbut 290,140,45,15,'<27>⬥<EFBFBD><E2ACA5>',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,'<27><><EFBFBD><EFBFBD>',97,[sc.work_button],[sc.work_button_text]
|
|||
|
drawlbut 75,22,70,15,'<27><><EFBFBD>',98,[sc.work_button],[sc.work_button_text]
|
|||
|
drawlbut 145,22,70,15,'<27><><EFBFBD><EFBFBD><EFBFBD>',96,[sc.work_button],[sc.work_button_text]
|
|||
|
drawlbut 431,22,70,15,'<27><>ࠢ<EFBFBD><E0A0A2>',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,'<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>',100,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 5,53,70,15,'<27><><EFBFBD><EFBFBD><EFBFBD>',101,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 5,68,70,15,'<27><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>',2,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 5,83,70,15,'<27><><EFBFBD><EFBFBD>. <20><><EFBFBD>',102,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 5,98,70,15,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',103,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 5,113,70,15,'<27><>室',104,[sc.grab_button],[sc.grab_button_text]
|
|||
|
jmp still
|
|||
|
|
|||
|
draw_win_menu_code:
|
|||
|
call clear_screen
|
|||
|
call drawwindow
|
|||
|
drawlbut 75,38,70,15,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.',10000,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 75,53,70,15,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',10001,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 75,68,70,15,'<27><>᪠ <20><><EFBFBD>.',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,'<27><><EFBFBD><EFBFBD><EFBFBD>',92,[sc.grab_button],[sc.grab_button_text]
|
|||
|
drawlbut 145,68,70,15,'<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>',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 '<27>訡<EFBFBD><E8A8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䠩<><E4A0A9> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>⨥ <20>⬥<EFBFBD><E2ACA5><EFBFBD><EFBFBD>!',0
|
|||
|
saveerrtext db '<27>訡<EFBFBD><E8A8A1> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD> 䠩<><E4A0A9> <20><><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD> <20>⬥<EFBFBD><E2ACA5><EFBFBD><EFBFBD>!',0
|
|||
|
newfileerror db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>夠<EFBFBD><E5A4A0> <20><><EFBFBD><EFBFBD><EFBFBD> 䠩<>',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 ; <20> <20><> <20><><EFBFBD><EFBFBD> <20><>祬<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>⠢<EFBFBD><E2A0A2> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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 ' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> > '
|
|||
|
db ' <20><><EFBFBD><EFBFBD><EFBFBD> '
|
|||
|
else
|
|||
|
db ' STRING > '
|
|||
|
db ' SEARCH '
|
|||
|
end if
|
|||
|
searchtl:
|
|||
|
|
|||
|
|
|||
|
htext2:
|
|||
|
if lang eq ru
|
|||
|
db ' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 00:00000 <20><><EFBFBD><EFBFBD><EFBFBD> 00000 <20><><EFBFBD><EFBFBD><EFBFBD> '
|
|||
|
else
|
|||
|
db 'POSITION 00:00000 LENGTH 00000 LINES '
|
|||
|
end if
|
|||
|
htextlen2:
|
|||
|
|
|||
|
help_text:
|
|||
|
if lang eq ru
|
|||
|
db ' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: '
|
|||
|
db ' '
|
|||
|
db ' CTRL+F1 : <20><><EFBFBD> <20><><EFBFBD><EFBFBD> '
|
|||
|
db ' CTRL+S : <20><>ࢠ<EFBFBD> <20><>ப<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD> '
|
|||
|
db ' CTRL+E : <20><><EFBFBD><E1ABA5><EFBFBD><EFBFBD> <20><>ப<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD> '
|
|||
|
db ' CTRL+P : <20><>⠢<EFBFBD><E2A0A2><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> <20><> ⥪<><E2A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '
|
|||
|
db ' CTRL+D : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ப<EFBFBD> '
|
|||
|
db ' CTRL+L : <20><>⠢<EFBFBD><E2A0A2><EFBFBD> <20><>ப<EFBFBD>-ࠧ<><E0A0A7><EFBFBD><EFBFBD>⥫<EFBFBD> '
|
|||
|
db ' CTRL+[ : <20><>३<EFBFBD><E0A5A9> <20> <20><>砫<EFBFBD> 䠩<><E4A0A9> '
|
|||
|
db ' CTRL+] : <20><>३<EFBFBD><E0A5A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD> 䠩<><E4A0A9> '
|
|||
|
db ' CTRL+F2 : <20><><EFBFBD><EFBFBD>㧨<EFBFBD><E3A7A8> 䠩<> '
|
|||
|
db ' CTRL+F3 : <20><><EFBFBD><EFBFBD><EFBFBD> '
|
|||
|
db ' CTRL+F4 : <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> 䠩<> '
|
|||
|
db ' CTRL+F5 : <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> 䠩<> <20><><EFBFBD>... '
|
|||
|
db ' CTRL+F6 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ப<EFBFBD> <20><><EFBFBD> <20><><EFBFBD>᪠ '
|
|||
|
db ' CTRL+F7 : "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ண<EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>㧪<EFBFBD>" '
|
|||
|
db ' CTRL+F8 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>᪫<EFBFBD><E1AAAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '
|
|||
|
db ' CTRL+F9 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD> 䠩<> '
|
|||
|
db ' CTRL+F10 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '
|
|||
|
db ' F12 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>⫠<EFBFBD><E2ABA0><EFBFBD> '
|
|||
|
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 '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0
|
|||
|
else
|
|||
|
db 'TINYPAD HELP',0
|
|||
|
end if
|
|||
|
|
|||
|
hlphead_len = $ - help_wnd_header
|
|||
|
|
|||
|
save_yes_no:
|
|||
|
if lang eq ru
|
|||
|
db '<27><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> 䠩<> <20><>। <20><>室<EFBFBD><E5AEA4>?',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 - <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>稭<EFBFBD><E7A8AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>!
|
|||
|
TINYPAD_END: ; end of file
|
|||
|
|
|||
|
|
|||
|
; Uninitialised data
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
align 4
|
|||
|
|
|||
|
posx dd ? ; x <20><> <20><>࠭<EFBFBD> (on the screen)
|
|||
|
posy dd ? ; y <20><> <20><>࠭<EFBFBD>
|
|||
|
post dd ? ; ᬥ饭<E1ACA5><E9A5AD> <20><> <20><>砫<EFBFBD> - offset
|
|||
|
posl dd ?
|
|||
|
lines dd ? ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><>ப <20> <20><><EFBFBD>㬥<EFBFBD><E3ACA5><EFBFBD>
|
|||
|
posxm dd ?
|
|||
|
posym dd ?
|
|||
|
|
|||
|
dstart dd ? ; ᬥ饭<E1ACA5><E9A5AD> <20><> <20><><EFBFBD> y <20><><EFBFBD> <20><><EFBFBD><EFBFBD>ᮢ<EFBFBD><E1AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>.
|
|||
|
|
|||
|
filelen dd ? ; <20><><EFBFBD><EFBFBD><EFBFBD> 䠩<><E4A0A9>
|
|||
|
|
|||
|
PID dd ? ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䨪<EFBFBD><E4A8AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
proccount dd ? ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᮢ
|
|||
|
|
|||
|
filesize dd ? ; ࠧ<><E0A0A7><EFBFBD> 䠩<><E4A0A9>
|
|||
|
ya dd ? ; <20><><EFBFBD> read_string
|
|||
|
slines dd ? ; number of strings on the screen - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><>ப <20><> <20><>࠭<EFBFBD>
|
|||
|
|
|||
|
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 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
rb 256
|
|||
|
|
|||
|
; <20><><EFBFBD><EFBFBD>ଠ<EFBFBD><E0ACA0><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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!
|
|||
|
|
|||
|
|