2006-08-14 14:50:43 +02:00
; SYSTEM HEADER:
2006-07-29 09:27:24 +02:00
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'
2006-08-14 14:50:43 +02:00
include 'lang.inc'
2006-07-29 09:27:24 +02:00
include 'macros.inc' ; useful stuff
include 'dialogs1.inc'
include 'scroll.inc'
2006-08-14 14:50:43 +02:00
include 'debug.inc'
2006-07-29 09:27:24 +02:00
purge mov ; SPEED
;******************************************************************************
; INITIALIZING
START:
;debug_print_hex TINYPAD_END
call mask_events
cmp [ I_PARAM ], byte 0
jz noparams
2006-08-14 14:50:43 +02:00
;//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
2006-07-29 09:27:24 +02:00
; 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
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 cl ear_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 , si zeof.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 [ ds tart ], 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 ,[ ds tart ]
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 ch eck_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 ch eck_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 ch eck_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 cl ear_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 cl ear_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 di sk_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 di sk_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 ,[ ds tart ]
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 [ ds tart ]
add ebx , 33 ;18
mov ecx ,[ sc.work_button_text ]
mov edx , htext2
mov esi , 38
int 0x40
cmp [ modified ], 1
jne no_mod
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
putlabel 270 , 386 , '<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ' ,[ sc.work_button_text ]
2006-08-14 14:50:43 +02:00
else
putlabel 270 , 386 , 'MODIFIED' ,[ sc.work_button_text ]
end if
2006-07-29 09:27:24 +02:00
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
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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 ]
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
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
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
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 ,[ ds tart ]
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 Ch eck_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 Ch eck_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 cl ear_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 cl ear_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 cl osethis ;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 cl osethis
jmp fastso_still
;******************************************************************************
;******************************************************************************
fast_open:
call path_copy
call set_title
mov [ to_return ], 1
call do_load_file
jmp cl osethis
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
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
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 ch ange_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 cl ear_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 al ert_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 al ert_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 al ert_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
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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 ]
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
ret
draw_win_menu_file:
call cl ear_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
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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 ]
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
jmp still
draw_win_menu_code:
call cl ear_screen
call drawwindow
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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 ]
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
mov [ menu_is_on ], 1
jmp still
draw_win_menu_text:
call cl ear_screen
call drawwindow
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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 ]
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
mov [ menu_is_on ], 1
jmp still
new_pad_wnd:
mov eax , 19
mov ebx , tinypad_filename
mov ecx , 0
int 0x40
jmp still
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2006-08-14 14:50:43 +02:00
if lang eq ru
2006-07-29 09:27:24 +02:00
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
2006-08-14 14:50:43 +02:00
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
2006-07-29 09:27:24 +02:00
; ********************
; ****** 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!