forked from KolibriOS/kolibrios
11c04adbbc
tinypad: new version from Kolibri 0.5.8.1 + corrections in IPC algo for new docpak tinypad2: corrections in IPC for new docpak + full english translation bcdclk, crownscr: small fixes to match to Kolibri 0.5.8.1 distro git-svn-id: svn://kolibrios.org@122 a494cfbc-eb01-0410-851d-a64ba20cac60
4094 lines
74 KiB
NASM
4094 lines
74 KiB
NASM
; SYSTEM HEADER:
|
||
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 'ascl.inc'
|
||
include 'lang.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
|
||
|
||
;//Willow
|
||
cmp byte[I_PARAM],'*'
|
||
jne .noipc
|
||
; convert size from decimal representation to dword
|
||
mov esi, I_PARAM+1
|
||
xor edx, edx
|
||
xor eax, eax
|
||
@@:
|
||
lodsb
|
||
test al, al
|
||
jz @f
|
||
lea edx, [edx*4+edx]
|
||
lea edx, [edx*2+eax]
|
||
jmp @b
|
||
@@:
|
||
add edx,20
|
||
mcall 60,1,0x10000-16
|
||
mov dword[0x10000+-16+4],8
|
||
mcall 40,1000000b
|
||
mcall 23,200
|
||
; dpd eax
|
||
cmp eax,7
|
||
jne exit_now
|
||
mov esi,0x10000-16
|
||
mov byte[esi],1
|
||
call mask_events
|
||
mov eax,[esi+12]
|
||
inc eax
|
||
call file_found
|
||
jmp do_load_file.restorecursor
|
||
.noipc:
|
||
;//Willow
|
||
; 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
|
||
|
||
|
||
if lang eq ru
|
||
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
|
||
else
|
||
putlabel 190,120,'Save the document?',cl_White
|
||
|
||
drawlbut 170,140,30,15,'Yes',49,[sc.work_button],cl_White
|
||
drawlbut 230,140,30,15,'No',48,[sc.work_button],cl_White
|
||
drawlbut 290,140,45,15,'Cancel',47,[sc.work_button],cl_White
|
||
end if
|
||
|
||
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
|
||
if lang eq ru
|
||
putlabel 270,386,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',[sc.work_button_text]
|
||
else
|
||
putlabel 270,386,'MODIFIED',[sc.work_button_text]
|
||
end if
|
||
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
|
||
|
||
if lang eq ru
|
||
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]
|
||
else
|
||
drawlbut 375,110,50,15,'Search',50,[sc.work_button],[sc.work_button_text]
|
||
drawlbut 375,130,50,15,'Cancel',94,[sc.work_button],[sc.work_button_text]
|
||
end if
|
||
|
||
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
|
||
|
||
if lang eq ru
|
||
putlabel 195,120,'<27><>ப<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!',cl_White
|
||
else
|
||
putlabel 195,120,'String not found!',cl_White
|
||
end if
|
||
|
||
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
|
||
|
||
if lang eq ru
|
||
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
|
||
else
|
||
putlabel 190,120,'Save document?',cl_White
|
||
|
||
drawlbut 170,140,30,15,'Yes',46,[sc.work_button],cl_White
|
||
drawlbut 230,140,30,15,'No',45,[sc.work_button],cl_White
|
||
drawlbut 290,140,45,15,'Cancel',47,[sc.work_button],cl_White
|
||
end if
|
||
|
||
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
|
||
|
||
if lang eq ru
|
||
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]
|
||
else
|
||
drawlbut 5,22,70,15,'File',97,[sc.work_button],[sc.work_button_text]
|
||
drawlbut 75,22,70,15,'Code',98,[sc.work_button],[sc.work_button_text]
|
||
drawlbut 145,22,70,15,'Text',96,[sc.work_button],[sc.work_button_text]
|
||
drawlbut 431,22,70,15,'Help',99,[sc.work_button],[sc.work_button_text]
|
||
end if
|
||
|
||
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
|
||
|
||
if lang eq ru
|
||
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]
|
||
else
|
||
drawlbut 5,38,70,15,'New window',100,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 5,53,70,15,'New',101,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 5,68,70,15,'Save',2,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 5,83,70,15,'Save as',102,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 5,98,70,15,'Open',103,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 5,113,70,15,'Exit',104,[sc.grab_button],[sc.grab_button_text]
|
||
end if
|
||
jmp still
|
||
|
||
draw_win_menu_code:
|
||
call clear_screen
|
||
call drawwindow
|
||
if lang eq ru
|
||
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]
|
||
else
|
||
drawlbut 75,38,70,15,'Compile',10000,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 75,53,70,15,'Run',10001,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 75,68,70,15,'Debug board',10002,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 75,83,70,15,'SysFunc',10003,[sc.grab_button],[sc.grab_button_text]
|
||
end if
|
||
mov [menu_is_on],1
|
||
jmp still
|
||
|
||
draw_win_menu_text:
|
||
call clear_screen
|
||
call drawwindow
|
||
if lang eq ru
|
||
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]
|
||
else
|
||
drawlbut 145,38,70,15,'GoTo Line#',95,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 145,53,70,15,'Find',92,[sc.grab_button],[sc.grab_button_text]
|
||
drawlbut 145,68,70,15,'Find next',50,[sc.grab_button],[sc.grab_button_text]
|
||
end if
|
||
mov [menu_is_on],1
|
||
jmp still
|
||
|
||
new_pad_wnd:
|
||
mov eax,19
|
||
mov ebx,tinypad_filename
|
||
mov ecx,0
|
||
int 0x40
|
||
jmp still
|
||
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
if lang eq ru
|
||
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> ᮧ<><E1AEA7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 䠩<>',0
|
||
else
|
||
openerrtext db 'Error while opening file or opening canceled!',0
|
||
saveerrtext db 'Error while saving file or saving canceled!',0
|
||
newfileerror db 'Cannot create new file',0
|
||
end if
|
||
; ********************
|
||
; ****** 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!
|
||
|
||
|