Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 30 → Rev 31

/programs/tinypad2/trunk/ReadMe.txt
0,0 → 1,203
-= [v 3.78b] =-
‚¥àá¨ï ¡ë«  ᤥ« ­  áࠧ㠯®á«¥ ⮣® ª ª ï ¢ë«®¦¨« ¯à¥¤., ­® ï ¥ñ ­¥ ¢ëª« ¤ë¢ «,
â ª ª ª ­ ¤¥ï«áï ¥éñ ¤®à ¡®â âì.
 
®¢®¥:
- ¯®¨áª á¯àïâ ­ ¢ ¬¥­î, £®àïç ï ª« ¢¨è  ctrl+F7, ¯®¨áª ¤ «¥¥ - ctrl+F8
- ¡®«¥¥ ¤«¨­­ ï áâப  ®âªàëâ¨ï ä ©«®¢, ­¥ ¦¥« â¥«ì­® ®âªà뢠âì ¯ãâ¨
>71 ᨬ¢®« , â ª ª ª ¬®£ãâ ¢®§­¨ª­ãâì ®è¨¡ª¨ ¯à¨ à ¡®â¥ á ®ª­®¬ "¡ëáâண® á/§"
 
 
íâ® ¯à®áâ® ¤®¯®«­¥­¨¥ ª ¯à¥¤ë¤ã饬㠢ë¯ãáªã. ¤ «ìè¥ ¡ã¤¥â ¨á¯à ¢«¥­®:
- £«îª á ­¥ ªâ¨¢­ë¬¨ ®ª­ ¬¨.
 
-= [v 3.78a] =-
 
‚த¥ à ¡®â ¥â.. :)
 
®¢®¥:
- ‘ªà®«« ¢§ïâ á "Scroll.inc", ¢â®à ª®â®à®£® Jason Delozier.
¯à¨­æ¨¯ ¤¢¨¦¥­¨ï ¯® ¤®ªã¬¥­âã ¯®«­®áâìî ¨§¬¥­ñ­ (¯® áà ¢­¥­¨î
á ¯à®è«®© ¢¥àᨥ©).
- Šãàá®à ¤¢¨£ ¥âáï ª«¨ª®¬ ¬ë誨.
- „®¡ ¢«¥­  äã­ªæ¨ï Goto Line #.
(enter-goto; esc - cancel)
¤®áâ â®ç­® ¯®«¥§­ ï äã­ªæ¨ï, ª®£¤  ä á¬(­  ¤®áª¥ ®â« ¤ª¨) ¯¨è¥â çâ® ®è¨¡ª 
¢ â ª®©-â® áâப¥...
- ˆá¯à ¢«¥­ ¡ £ á § ¤ ­¨¥¬ ¨¬¥­¨ ­®¢®£® ä ©« 
- ˆá¯à ¢«¥­ ¡ £ á® áâப®© ¯®¨áª  (¯à¨ "¯®¨áª¥" ¯®á«¥¤­¥© áâப¨)
- ˆá¯à ¢«¥­ ¡ £ ¯®á«¥ ¢ë§®¢  ¤¨ «®£®¢ ®âªàëâ¨ï/á®åà ­¥­¨ï.
⥯¥àì áªà®«« ¯®á«¥ ­¨å ¯à®¤®«¦ ¥â à ¡®â âì ;)
- Œ¥«ª¨¥ ¨á¯à ¢«¥­¨ï ¢ à ¡®â¥ ¬¥­î.
 
®ï¢¨«áï:
£«îª, ª ª ¢ LC - ¯à¨ ­ ¦ â¨¨ ¢ ®¡« á⨠®ª­ , ¤ ¦¥ ¥á«¨ ®ª­® ­¥  ªâ¨¢­®,
ªãàᮢ ¨ áªà®«« ¡ à ¢áñ à ¢­® ॠ£¨àãîâ ­  ¬ëèªã.
 
 ¡®â î ­ ¤:
-ᯨ᪮¬ ¯®á«¥¤­¨å ä ©«®¢
-§ £à㧪®© "color table'a"
 
â ª ¦¥, ­ ¤® ¯®á¬®âà¥âì ¨á室­¨ª¨ HeEd'a,   â®ç­¥¥ ä㭪樨 ¯¥à¥ª®¤¨à®¢ª¨.
 
-------------------------------------------------
 
-= [v 3.77a] =-
 
…éñ ®¤­   «ìä .
 
  íâ®â à §:
- ¤®¡ ¢«¥­  ¯®«®á  ¯à®ªã⪨
- ¨á¯à ¢«¥­® ®ª­® ¢®¯à®á  "á®åà ­¨âì ¤®ªã¬¥­â", â ª ª ª ï § ¬¥â¨«
çâ® ®­® ¦à «® ¬­®£® ¯à®æ¥áá®à­®£® ¢à¥¬¥­¨.
- ®¡­®¢«¥­¨¥ íªà ­  ¯®á«¥ ¤¨ «®£®¢ á®åà ­¥­¨ï ¨ ®âªàëâ¨ï
 
  § ¬¥âªã: áªà®«« ¯®«­®áâìî ᤥ« ­ ¬­®© ¨ ¯®í⮬ã, ¢®§¬®¦­®, ¥áâì £«îª¨.
â ª ª ª ï ­¥ ­ èñ« ¡®«¥¥ å®à®è¥© ä®à¬ã«ë, áªà®«« ¢á¥£¤  ­¥¬­®£® ­¥ ¤®¥§¦ ¥â ¤®
¢¥àå , § â® ­¨ª®£¤  ­¥ ¯¥à¥á¥ª ¥â ­¨¦­îî ª­®¯ªã (¢à®¤¥ ¡ë)
 
ª­®¯ª¨ áªà®««  "¢¢¥àå" ¨ "¢­¨§" íª¢¨¢ «¥­â­ë pg.up ¨ pg.down
 
 §¬¥à áªà®««  ¦¥á⪮ § ªà¥¯«ñ­, â ª ª ª ᪮஠¡ã¤¥â § ¯¥à饭®
¨§¬¥­ïâì à §¬¥­ë ®ª­ .
 
 
¥ ¯®«ãç¨âáï:
“¡à âì ®£à ­¨ç¥­¨¥ ¢ 80 ᨬ¢®«®¢ ¨ ¯à¨á®¡ ç¨âì ¯®¤¤¥à¦ªã BGI èà¨ä⮢.
à®¡«¥¬  ¢ ᫨誮¬ ¨§¢à éñ­­®¬  «£®à¨â¬¥ ¢ë¢®¤  ᨬ¢®«®¢ (¯® ªà ©­¥©
¬¥à¥ ¬­¥ â ª ¯®ª § «®áì), ¯à®é¥ ¡ã¤¥â ¯¥à¥¤¥« âì ¢áñ ¯® ­®¢®©,
¢§ï¢ ­¥ª®â®àë¥ ä㭪樨 ®âá.
 
‚ á«¥¤ãî饩 ¢¥àᨨ ¯« ­¨àã¥âáï:
- äã­ªæ¨ï "goto string #"
- ¨§¬¥­¥­¨¥ æ¢¥â  â¥ªáâ  (¨ ᯥæ. ᨬ¢®«®¢) ¨ à ¡®ç¥© ®¡« áâ¨.
- á®åà ­¥­¨¥ ­¥¡®«ì讣® ᯨ᪠ "¯®á«¥¤­¨å । ªâ¨à㥬ëå ä ©«®¢"
¯®áâ à îáì, ­® ¢áñ ¦¥ ­¨ç¥£® ­¥ ®¡¥é î....
 
 
-= [v 3.76 ] =-
 
®¢â®à­ë© ६¥©ª â ©­¨¯ ¤  :) Š« ¢¨ âãà  à㫨â.
 
—â® ­®¢®£®?
 
- "Žª­® ¡ëáâண® á®åà ­¥­¨ï ¨ § £à㧪¨" ¤«ï ¯à®¯¨á뢠­¨ï ¯ãâ¨
ª ä ©«ã "¢àãç­ãî". ‚ í⮬ ¦¥ ®ª­¥ £®àï稥 ª« ¢¨è¨ -
ctrl+s - á®åà ­¨âì, ctrl+o - ®âªàëâì, esc - ®â¬¥­ 
 
- ƒ®àï稥 ª« ¢¨è¨ ¤«ï ª®¬¯¨«ï樨(CTRL+F9),
ª®¬¯¨«ï樨 ¨ § ¯ã᪠ (CTRL+F10), ¨ ¤®áª¨ ®â« ¤ª¨(F12)
 
- £« ¢­®¥ ®ª­® ®áâ ñâáï  ªâ¨¢­ë¬ ¯®á«¥ § ¯ã᪠ ¤®áª¨ ®â« ¤ª¨
¨ ®ª­  ¡ëáâண® á®åà ­¥­¨ï (⮫쪮 £®àï稬¨ ª« ¢¨è ¬¨)
 
- ˆá¯à ¢«¥­ £«îª ¢ë«¥â ­¨ï ¯à¨ ¯®¯ë⪥ ¯®¨áª  ¢ ¯ãá⮬
¤®ªã¬¥­â¥
 
- ®¡« £®à®¦¥­ ¯¨áª ¨§ ᯨª¥à , ⥯¥àì ¯®å®¦ ­  ¯¨áª Š®«¨¡à¨ 3
 
- Š­®¯ª¨ ¢ë஢­¥­ë ¤«ï ¨á¯®«ì§®¢ ­¨ï ᪨­ 
 
- ¯® ­¥¯®­ïâ­ë¬ ¬­¥ ¯à¨ç¨­ ¬ ä ©«ë á®åà ­ñ­­ë¥ ¢ ­¨¦­¥¬ ॣ¨áâà¥
 ¡á®«îâ­® ­¥ ¯à¨­¨¬ «¨áì sysxtree ¨ ­ã¦­® ¡ë«® ¨å ®âªà뢠âì
¢àãç­ãî ¯à®¯¨áë¢ ï ¯ãâì. ¨á¯à ¢«¥­® ®¡ëç­ë¬ ¯¥à¥¢®¤®¬ ¢ ¢¥àå­¨©
ॣ¨áâà.
 
- ®ª­  á®®¡é¥­¨ï ¯à¨ ¯¥à¥¯®«­¥­­®¬ ¤¨áª¥ (â  ¦¥ ¯à®æ¥¤ãà , çâ® ¨ ¤«ï erroff ã
savedialog)
 
- ¨á¯à ¢«¥­ ¬®© ¡ £ - ¯à¨ ­¥¢®§¬®¦­®á⨠á®åà ­¥­¨ï ⥯¥àì ®áâ ñâáï áâ àë© ¯ãâì
ª ä ©«ã (¨ ¨¬ï).
 
- ¨á¯à ¢«¥­® ¥éñ ¯ à®çª  ¬¥«ª¨å ­¥¤®çñ⮢ (¬®¨å?!).
 
—â® ­¥ ᤥ« ­®?
 
‚áñ ¥éñ ­¥â ¯®¤¤¥à¦ª¨ èà¨ä⮢ BGI ¨
¨§¬¥­¥­¨ï æ¢¥â  ä®­ /⥪áâ . •®âï ï ᮬ­¥¢ îáì, çâ® BGI èà¨äâë ¯àאַ "­¥®¡å®¤¨¬
ë"
¢  á¬-¡«®ª­®â¥.
®ª  ¥éñ ­¥ ®¡à ¡ â뢠¥âáï ®è¨¡ª  "fat12 § ¯®«­¥­" - ¢à®¤¥ ¡ë ¤ ¦¥ ä㭪樨 ¢ ï¤
ॠ­¥â...
•®çã ¯¥à¥©â¨ ­  ᪠­-ª®¤ë,   â® ¢  áª¨ ¯®¢â®àïîâáï ª®¤ë.
--------------------------------------------
¨ ¥éñ: ® ®è¨¡ª å ¨ ªà¨â¨ª¥ - ¬­¥ (­¥ "¬¥­ï") ­  ¬ë«® ¨«¨ ­  ä®àã¬.
--------------------------------------------
 
ˆáâ®à¨ï...
 
-= [ v 3.75b ] =-
 
Ž....
¥¬¥©ª :) Tinypad'a :
’ã«¡ à ⥯¥àì á¯àïâ ­ ¢ ¬¥­î. „«ï á®åà ­¥­¨ï ¨ ®âªàëâ¨ï ¨á¯®«ì§ãîâáï
¤¨ «®£¨ ¨§ ASCL  ¢«î設  …¢£¥­¨ï. ˆá¯à ¢«¥­ "¦ã⪨©" ¡ £ - ª®£¤ 
á®åà ­ï¥èì ¤®ªã¬¥­â ¯®¤ ¤à㣨¬ ¨¬¥­¥¬, ¢ áâப¥ § £®«®¢ª  ®áâ ¢ «®áì
áâ à®¥ ­ §¢ ­¨¥.
„®¡ ¢«¥­ë ¤¨ «®£®¢ë¥ ®ª­  ¯à¨ ®è¨¡ª å ¨ ¢ë室¥. „®¡ ¢«¥­  ª­®¯ª 
"­®¢ë©", ¯à¨ ­ ¦ â¨¨ ­  ª®â®àãî § ¤ ñâáï ¢®¯à®á ® á®åà ­¥­¨¨ ä ©« , § â¥¬
ᮧ¤ ñâáï ¤®ªã¬¥­â á ­®¢ë¬ ¨¬¥­¥¬. Œ ªá¨¬ «ì­® 99 ­®¢ëå ¤®ªã¬¥­â®¢. Š­®¯ª 
"­®¢®¥ ®ª­®" ®âªà뢠¥â ­®¢®¥ ®ª­® ’ ©­¨¯ ¤  (§ ¯ã᪠¥â ­®¢ë© ¯à®æ¥áá).
 
Ž £àãáâ­®¬...
Ž¡® ¢á¥å ®è¨¡ª å ¬­¥ ­  ¬ë«®, ¯®¯à®¡ãî ¨á¯à ¢¨âì.
„¨ «®£ "á®åà ­¨âì ª ª" á®åà ­ï¥â ⮫쪮 ­  £®â®¢ë¥ ä ©«ë (â® ¥áâì ¯®¢¥àå ­¨å,
­¥«ì§ï ᮧ¤ âì ­®¢ë©).
à¨ ¯®¯ë⪥ ¯®¨áª  áâப¨ ¢ ¯ãá⮬ ¤®ªã¬¥­â¥ ¯à®£  ¢ë«¥â ¥â :(
à¨ ¢ë室¥, ª®£¤  ¢ë« §¨â ®ª®èª® á ¢®¯à®á®¬ "á®åà ­¨âì ä ©«?" - ¤  - á®åà ­ï¥â
¤®ªã¬¥­â ¨ § ªà뢠¥â ®ª­®, ­¥â - ­¥ á®åà ­ï¥â ¨ ¢ë室¨â, ™¥«çñª ¯® à ¡®ç¥© ®¡« 
áâ¨
â ©­¨¯ ¤  íª¢¨¢ «¥­â¥­ ª­®¯ª¥ ®â¬¥­ , ª®â®à®© ­¥âã ;), ¯à ¢¤  ¥á«¨ ®ª­® á®®¡é¥­¨
ï
¯¥à¥¬¥áâ¨âì, £« ¢­®¥ ®ª­® ­¥ ®¡­®¢«ï¥âáï. â® ¢ë§¢ ­­® "ᯥæ¨ä¨ç¥áª¨¬" ª®¤®¬, â
 ª
ª ª ¡®«¥¥ ¯à®á⮣® à¥è¥­¨ï ï ­¥ ­ èñ«.
 
Ž ᯠᨡª å...
‚ᥬ ᯠᨡ !  ¢«î設㠧  ASCL, • «ï¢¨­ã, Willow ¨ ¢á¥¬ á ­ è¥£® ä®à㬠 ¯®¬®éì.
 
Ž ¡ã¤ã饬...
¥á«¨ ¯®«ãç¨âáï, ¬®¦­® ¡ã¤¥â ॠ«¨§®¢ âì ¯®¤¤¥à¦ªã BGI èà¨ä⮢... ¥éñ ­¥ ᬮâ५
¨å ª®¤ -- áâà è­®!
 
Šâ®, ¡«%?
DoomEd Archangel
archangel@mail.kz / meos-wall.narod.ru
 
 
 
-= [ v 3.75a ------> v 3.6 ] =-
 
;******************************************************************************
; project name: TINYPAD
; compiler: flat assmebler 1.52 alpha 3
; version: 3.75a
; last update: 24/03/2004
; maintained by: Ivan Poddubny
; e-mail: ivan-yar@bk.ru
;******************************************************************************
; HISTORY:
; 3.75a
; fixed converting char to upper case in read_string
; 3.75
; rewrote save_file from scratch; bugfix in loadfile;
; 3.74
; optimisation
; 3.73
; completly new load_file function
; 3.72
; speed++
; 3.71
; error beep
; 3.6,3.7:
; many bugs fixed
; simple toolbar
; compile, run applications from TINYPAD, all fasm output is in debug board
; TAB button
; auto-indent
; Ctrl+L - insert comment string
;******************************************************************************
; Memory 0x300000:
; stack 0x00eff0 - áâíª
; stack for help 0x00fff0 -
; stack for help 0x00fff0
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/tinypad2/trunk/archive.txt
0,0 → 1,8
„«ï ­ ç¨­ îé¨å à ¡®â âì á MeOS - ®¯¨á ­¨¥ ä ©«®¢ ¢ í⮬  à娢¥:
 
tinypad - ᪮¬¯¨«¨à®¢ ­­ë© ¨á¯®«­ï¥¬ë© ä ©« MeOS
tinypad.asm - ¨á室­ë© ª®¤
ascl.inc - assembler small code library ®â  ¢«î設  …¢£¥­¨ï
(äã­ªæ¨ï label § ¬¥­¥­  ­  putlabel)
dialogs1.inc - ¤¨ «®£®¢ë¥ ®ª­ , messagebox'ë ¨ ­¥ ®ç¥­ì å®à®è¥¥ ¬¥­î.
macros.inc - ⮦¥ § ¬¥ç â¥«ì­ë© ­ ¡®à ¬ ªà®á®¢.
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/tinypad2/trunk/ascl.inc
0,0 → 1,933
lang equ ru ; ru en fr ge fi
 
;
; Assembler
; SMALL
; CODE
; Libary
;
; Ver 0.14 By Pavlushin Evgeni (RUSSIA)
; www.waptap@mail.ru
 
;Please compile aplications on FASM ver1.54 or higer!!!
 
;InfoList
;0.01 scank,putpix,puttxt
;0.02 label,random,colors
;0.03 window,startwd,endwd,attributes
;0.04 close,delay,scevent ~30.04.2004
;0.05 small random, ~04.05.2004
;0.06 wtevent ~09.05.2004
;0.07 timeevent ~23.05.2004
;0.08 txtput ~14.06.2004
;0.09 opendialog,savedialog ~20.06.2004
;0.10 wordstoreg by halyavin, add at ~30.08.2004
; random bug deleted eax is use.
;0.11 loadfile from me +puttxt bug del ~07.09.2004
;0.12 open/save dialog ~13.09.2004
;0.13 dialogs bugs deleted
;0.14 drawlbut ~03.10.2004
;0.15 extendet label!
 
; LOADFILE
; (SYNTAX) LOADFILE 'full_path_to_file',file_load_area,file_temp_area
; (SAMPLE) LOADFILE '/rd/1/clock.bmp',load_area,temp_area
 
 
macro loadfile file_name,file_load_area,file_temp_area
{
local open,fileinfo,string
jmp open
fileinfo:
dd 0
dd 0
dd 1
dd file_load_area
dd file_temp_area
string:
db file_name,0
open:
mov dword [fileinfo+8],1 ; how many blocks to read (1)
mov eax,58
mov ebx,fileinfo
int 0x40
mov eax,[file_load_area+2]
shr eax,9 ; ¯®¤¥«¨¬ ­  512 ¨ ¯à¨¡ ¢¨¬ 1 - ¯®«ã稬 ç¨á«® ¡«®ª®¢
inc eax
mov dword [fileinfo+8],eax
mov eax,58
mov ebx,fileinfo
int 0x40
}
 
 
;***********************************************************
macro savefile file_name,file_save_area,file_temp_area,fsize
{
local save,fileinfo,string ;,counter00
jmp save
;counter00 dd 0
fileinfo:
dd 1
dd 0
dd fsize ;counter00
dd file_save_area
dd file_temp_area
string:
db file_name,0
save:
;xor edi,edi
; sub edi,file_save_area ; calculate dump size
; mov edx,edi
;mov [counter00],edi
; mov dword [fileinfo+8],1 ; how many blocks to write (1)
; mov eax,58
; mov ebx,fileinfo
; int 0x40
; mov eax,[file_load_area+2]
; shr eax,9 ; ¯®¤¥«¨¬ ­  512 ¨ ¯à¨¡ ¢¨¬ 1 - ¯®«ã稬 ç¨á«® ¡«®ª®¢
; inc eax
; mov dword [fileinfo+8],eax
mov eax,58
mov ebx,fileinfo
int 0x40
}
;***********************************************************
 
 
;macro wordstoreg reg,hiword,loword
;{
;if hiword eqtype 0 & loword eqtype 0
; mov reg,dword hiword*65536+loword
;else if hiword eqtype 12 & loword eqtype eax
; mov reg,dword hiword*65536
; add reg,dword loword
;else if hiword eqtype 12 & loword eqtype [123]
; mov reg,dword hiword*65536
; add reg,dword loword
;else
; mov reg,dword hiword
; shl reg,16
; add reg,dword loword
;end if
;}
 
macro dword2reg reg,doubleword
{
if doubleword eq
; not changes
else
mov reg,dword doubleword
end if
}
 
macro words2reg reg,hiword,lowword
{
if hiword eq
if lowword eq
; not changes
else
if lowword eqtype 12
and reg,dword 0xffff0000
add reg,dword lowword
else
and reg,dword 0xffff0000
add reg,dword lowword
end if
end if
else
if lowword eq
if hiword eqtype 12
and reg,dword 0x0000ffff
add reg,dword hiword*65536
else
shl reg,16
add reg,dword hiword
ror reg,16
end if
else
if lowword eqtype 12 & hiword eqtype 12
if lowword eq 0 & hiword eq 0
xor reg,reg
else
mov reg,dword hiword*65536+lowword
end if
else
mov reg,dword hiword
shl reg,16
add reg,dword lowword
end if
end if
end if
}
 
 
 
 
; DRAW BUTTON with label
 
macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor
{
local asd,lab
jmp asd
lab db text ;arg label
asd:
words2reg ebx,x,xs
words2reg ecx,y,ys
mov edx,id
mov esi,bcolor
mov eax,8
int 0x40
 
mov eax,asd-lab ;calc size
mov ebx,6
mul ebx
mov esi,eax
 
mov eax,xs
sub eax,esi
shr eax,1
add eax,x
 
mov edx,ys
sub edx,7
shr edx,1
add edx,y
 
mov ebx,eax
shl ebx,16
add ebx,edx
 
mov ecx,tcolor ;arg4 color
mov edx,lab
mov esi,asd-lab ;calc size
mov eax,4
int 0x40
}
 
 
macro opendialog redproc,openoff,erroff,path
{
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
local run_fileinfo, param
local getmesloop, loox, mred, mkey, mbutton, mgetmes
local dlg_is_work, ready, procinfo
;
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
;
 
cld
;; mov esi,path
mov edi,path
mov eax,0
mov ecx,200
rep stosb
 
;mov [get_loops],0
mov [dlg_pid_get],0
 
; Get my PID in dec format 4 bytes
mov eax,9
mov ebx,procinfo
mov ecx,-1
int 0x40
 
; convert eax bin to param dec
mov eax,dword [procinfo+30] ;offset of myPID
mov edi,param+4-1 ;offset to 4 bytes
mov ecx,4
mov ebx,10
cld
new_d:
xor edx,edx
div ebx
add dl,'0'
mov [edi],dl
dec edi
loop new_d
 
; wirite 1 byte space to param
mov [param+4],byte 32 ;Space for next parametr
; and 1 byte type of dialog to param
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog)
 
;
; STEP2 prepare IPC area for get messages
;
 
; prepare IPC area
mov [path],dword 0
mov [path+4],dword 8
 
; define IPC memory
mov eax,60
mov ebx,1 ; define IPC
mov ecx,path ; offset of area
mov edx,150 ; size 150 bytes
int 0x40
 
; change wanted events list 7-bit IPC event
mov eax,40
mov ebx,01000111b
int 0x40
 
;
; STEP 3 run SYSTEM XTREE with parameters
;
 
mov eax,58
mov ebx,run_fileinfo
int 0x40
 
call redproc
 
mov [get_loops],0
getmesloop:
mov eax,23
mov ebx,50 ;0.5 sec
int 0x40
 
cmp eax,1
je mred
cmp eax,2
je mkey
cmp eax,3
je mbutton
cmp eax,7
je mgetmes
 
; Get number of procces
mov ebx,procinfo
mov ecx,-1
mov eax,9
int 0x40
mov ebp,eax
 
loox:
mov eax,9
mov ebx,procinfo
mov ecx,ebp
int 0x40
mov eax,[DLGPID]
cmp [procinfo+30],eax ;IF Dialog find
je dlg_is_work ;jmp to dlg_is_work
dec ebp
jnz loox
 
jmp erroff
 
dlg_is_work:
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
je erroff ;TESTODP2 terminated too
 
cmp [dlg_pid_get],dword 1
je getmesloop
inc [get_loops]
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
jae erroff
jmp getmesloop
 
mred:
call redproc
jmp getmesloop
mkey:
mov eax,2
int 0x40 ; read (eax=2)
jmp getmesloop
mbutton:
mov eax,17 ; get id
int 0x40
cmp ah,1 ; button id=1 ?
jne getmesloop
mov eax,-1 ; close this program
int 0x40
mgetmes:
 
; If dlg_pid_get then second message get jmp to still
cmp [dlg_pid_get],dword 1
je ready
 
; First message is number of PID SYSXTREE dialog
 
; convert PID dec to PID bin
movzx eax,byte [path+16]
sub eax,48
imul eax,10
movzx ebx,byte [path+16+1]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [path+16+2]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [path+16+3]
add eax,ebx
sub eax,48
mov [DLGPID],eax
 
; Claear and prepare IPC area for next message
mov [path],dword 0
mov [path+4],dword 8
mov [path+8],dword 0
mov [path+12],dword 0
mov [path+16],dword 0
 
; Set dlg_pid_get for get next message
mov [dlg_pid_get],dword 1
call redproc ;show DLG_PID
jmp getmesloop
 
ready:
;
; The second message get
; Second message is 100 bytes path to SAVE/OPEN file
; shl path string on 16 bytes
;
cld
mov esi,path+16
mov edi,path
mov ecx,200
rep movsb
mov [edi],byte 0
 
jmp openoff
 
 
; DATA AREA
get_loops dd 0
dlg_pid_get dd 0
DLGPID dd 0
 
param:
dd 0 ; My dec PID
dd 0,0 ; Type of dialog
 
run_fileinfo:
dd 16
dd 0
dd param
dd 0
dd procinfo ; 0x10000
;run_filepath
db '/RD/1/SYSXTREE',0
 
procinfo:
times 1024 db 0
}
 
 
macro savedialog redproc,openoff,erroff,path
{
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
local run_fileinfo, run_filepath, param
local getmesloop, loox, mred, mkey, mbutton, mgetmes
local dlg_is_work, ready, procinfo
;
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
;
 
cld
;; mov esi,path
mov edi,path
mov eax,0
mov ecx,200
rep stosb
 
;mov [get_loops],0
mov [dlg_pid_get],0
 
; Get my PID in dec format 4 bytes
mov eax,9
mov ebx,procinfo
mov ecx,-1
int 0x40
 
; convert eax bin to param dec
mov eax,dword [procinfo+30] ;offset of myPID
mov edi,param+4-1 ;offset to 4 bytes
mov ecx,4
mov ebx,10
cld
new_d:
xor edx,edx
div ebx
add dl,'0'
mov [edi],dl
dec edi
loop new_d
 
; wirite 1 byte space to param
mov [param+4],byte 32 ;Space for next parametr
; and 1 byte type of dialog to param
mov [param+5],byte 'S' ;Get Open dialog (Use 'S' for Save dialog)
 
;
; STEP2 prepare IPC area for get messages
;
 
; prepare IPC area
mov [path],dword 0
mov [path+4],dword 8
 
; define IPC memory
mov eax,60
mov ebx,1 ; define IPC
mov ecx,path ; offset of area
mov edx,150 ; size 150 bytes
int 0x40
 
; change wanted events list 7-bit IPC event
mov eax,40
mov ebx,01000111b
int 0x40
 
;
; STEP 3 run SYSTEM XTREE with parameters
;
 
mov eax,58
mov ebx,run_fileinfo
int 0x40
 
call redproc
 
mov [get_loops],0
getmesloop:
mov eax,23
mov ebx,50 ;0.5 sec
int 0x40
 
cmp eax,1
je mred
cmp eax,2
je mkey
cmp eax,3
je mbutton
cmp eax,7
je mgetmes
 
; Get number of procces
mov ebx,procinfo
mov ecx,-1
mov eax,9
int 0x40
mov ebp,eax
 
loox:
mov eax,9
mov ebx,procinfo
mov ecx,ebp
int 0x40
mov eax,[DLGPID]
cmp [procinfo+30],eax ;IF Dialog find
je dlg_is_work ;jmp to dlg_is_work
dec ebp
jnz loox
 
jmp erroff
 
dlg_is_work:
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
je erroff ;TESTODP2 terminated too
 
cmp [dlg_pid_get],dword 1
je getmesloop
inc [get_loops]
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
jae erroff
jmp getmesloop
 
mred:
call redproc
jmp getmesloop
mkey:
mov eax,2
int 0x40 ; read (eax=2)
jmp getmesloop
mbutton:
mov eax,17 ; get id
int 0x40
cmp ah,1 ; button id=1 ?
jne getmesloop
mov eax,-1 ; close this program
int 0x40
mgetmes:
 
; If dlg_pid_get then second message get jmp to still
cmp [dlg_pid_get],dword 1
je ready
 
; First message is number of PID SYSXTREE dialog
 
; convert PID dec to PID bin
movzx eax,byte [path+16]
sub eax,48
imul eax,10
movzx ebx,byte [path+16+1]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [path+16+2]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [path+16+3]
add eax,ebx
sub eax,48
mov [DLGPID],eax
 
; Claear and prepare IPC area for next message
mov [path],dword 0
mov [path+4],dword 8
mov [path+8],dword 0
mov [path+12],dword 0
mov [path+16],dword 0
 
; Set dlg_pid_get for get next message
mov [dlg_pid_get],dword 1
call redproc ;show DLG_PID
jmp getmesloop
 
ready:
;
; The second message get
; Second message is 100 bytes path to SAVE/OPEN file
; shl path string on 16 bytes
;
cld
mov esi,path+16
mov edi,path
mov ecx,200
rep movsb
mov [edi],byte 0
 
jmp openoff
 
 
; DATA AREA
get_loops dd 0
dlg_pid_get dd 0
DLGPID dd 0
 
param:
dd 0 ; My dec PID
dd 0,0 ; Type of dialog
 
run_fileinfo:
dd 16
dd 0
dd param
dd 0
dd procinfo
;run_filepath:
db '/RD/1/SYSXTREE',0
 
procinfo:
times 1024 db 0
}
 
 
 
 
; RANDOM - generate random count (small)
; (SYNTAX) RANDOM MaxCount,OutArgument
; (SAMPLE) RANDOM 10000,eax
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations
 
randomuse = 0
 
macro random arg1,arg2
{
local rxproc
randomuse = randomuse + 1
 
jmp rxproc
 
if defined randomuse & randomuse = 1
randomproc:
jmp rnj
rsx1 dw 0x4321
rsx2 dw 0x1234
rnj:
; mov eax,arg1
push bx
push cx
push dx
push si
push di
mov cx,ax
mov ax,word ptr rsx1
mov bx,word ptr rsx2
mov si,ax
mov di,bx
mov dl,ah
mov ah,al
mov al,bh
mov bh,bl
xor bl,bl
rcr dl,1
rcr ax,1
rcr bx,1
add bx,di
adc ax,si
add bx,0x62e9
adc ax,0x3619
mov word ptr rsx1,bx
mov word ptr rsx2,ax
xor dx,dx
cmp ax,0
je nodiv
cmp cx,0
je nodiv
div cx
nodiv:
mov ax,dx
pop di
pop si
pop dx
pop cx
pop bx
and eax,0000ffffh
; mov arg2,0
; mov arg2,eax
ret
end if
 
rxproc:
mov eax,arg1
call randomproc
mov arg2,eax
}
 
macro scank
{
mov eax,10
int 0x40
}
 
macro putpix x,y,color
{
mov ebx,x
mov ecx,y
mov edx,color
mov eax,1
int 0x40
}
 
macro puttxt x,y,offs,size,color
{
; mov ebx,x
; shl ebx,16
; add ebx,y
words2reg ebx,x,y
 
dword2reg ecx,color
dword2reg edx,offs
dword2reg esi,size
 
; mov ecx,color
; mov edx,offs
; mov esi,size
mov eax,4
int 0x40
}
 
macro outcount data, x, y, color, numtype
{
mov ecx,data
mov ebx,numtype
mov bl,0
; mov edx,x*65536+y
words2reg edx,x,y
mov esi,color
mov eax,47
int 0x40
}
 
; SCEVENT - Scan event
 
macro scevent red,key,but
{
mov eax,11
int 0x40
dec eax
jz red
dec eax
jz key
dec eax
jz but
}
 
; WTEVENT - Wait event
 
macro wtevent red,key,but
{
mov eax,10
int 0x40
dec eax
jz red
dec eax
jz key
dec eax
jz but
}
 
; TIMEEVENT - Wite for event with timeout
 
macro timeevent xfps,noevent,red,key,but
{
mov eax,23
mov ebx,xfps
int 0x40
cmp eax,0
je noevent
dec eax
jz red
dec eax
jz key
dec eax
jz but
}
 
 
; CLOSE - Close program
 
macro close
{
mov eax,-1
int 0x40
}
 
; DELAY - Create delay 1/100 sec
; (SYNTAX) Delay time
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec
 
macro delay arg1
{
mov eax,5
mov ebx,arg1
int 0x40
}
 
; WINDOW - Draw window
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned
 
macro window arg1,arg2,arg3,arg4,arg5
{
; mov ebx,arg1*65536+arg3
; mov ecx,arg2*65536+arg4
words2reg ebx,arg1,arg3
words2reg ecx,arg2,arg4
mov edx,arg5
mov eax,0
int 0x40
}
 
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7
{
; mov ebx,arg1*65536+arg3
; mov ecx,arg2*65536+arg4
words2reg ebx,arg1,arg3
words2reg ecx,arg2,arg4
mov edx,arg5
mov esi,arg6
mov edi,arg7
mov eax,0
int 0x40
}
 
 
; STARTWD - Start of window draw
 
macro startwd
{
mov eax,12
mov ebx,1
int 0x40
}
 
; ENDWD - End window draw
 
macro endwd
{
mov eax,12
mov ebx,2
int 0x40
}
 
; LABEL - Put text to frame
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big
 
macro putlabel arg1,arg2,arg3,arg4
{
local asd,lab
jmp asd
lab db arg3 ;arg label
asd:
; mov ebx,arg1 ;arg1=y arg2=x
; shl ebx,16
; add ebx,arg2
 
words2reg ebx,arg1,arg2
 
dword2reg ecx,arg4
 
mov edx,lab
mov esi,asd-lab ;calc size
mov eax,4
int 0x40
}
 
;Key's
key_Up equ 178
key_Down equ 177
key_Right equ 179
key_Left equ 176
key_Esc equ 27
key_Space equ 32
key_Enter equ 13
key_Bspace equ 8
key_F1 equ 50
key_F2 equ 51
key_F3 equ 52
key_F4 equ 53
key_F5 equ 54
key_F6 equ 55
key_F7 equ 56
key_F8 equ 57
key_F9 equ 48
key_F10 equ 49
key_F11 equ 68
key_F12 equ 255
key_Home equ 180
key_End equ 181
key_PgUp equ 184
key_PgDown equ 183
 
;Attributes
 
;Window Attributes
window_Skinned equ 0x03000000
window_Type2 equ 0x02000000
window_Type1 equ 0x00000000
window_Reserve equ 0x01000000
 
;Font Attributes
font_Big equ 0x10000000
 
;Colors
cl_White equ 0x00ffffff
cl_Black equ 0x00000000
cl_Grey equ 0x00888888
cl_Red equ 0x00ff0000
cl_Lime equ 0x0000ff00
cl_Green equ 0x0000af00
cl_Blue equ 0x000000ff
cl_Purple equ 0x008080ff
cl_Violet equ 0x008040ff
cl_Cyan equ 0x0040e0ff
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/tinypad2/trunk/build_en.bat
0,0 → 1,4
@erase lang.inc
@echo lang fix en >lang.inc
@fasm tinypad2.asm tinypad2
@pause
/programs/tinypad2/trunk/build_ru.bat
0,0 → 1,4
@erase lang.inc
@echo lang fix ru >lang.inc
@fasm tinypad2.asm tinypad2
@pause
/programs/tinypad2/trunk/dialogs1.inc
0,0 → 1,597
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; DIALOGS1.INC ;
; ;
; COMPILE WITH FASM for MENUET ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
menus dd 3 ; number of menus
m_x dd 0x5 ; x start
m_y dd 20 ; y start
m_xs dd 290 ; x size
m_ys dd 14 ; y size
g_stack dd 0xf000 ; thread stack - required
 
 
menu:; AB C D E F G
 
db '*D FILE +Save File +Load File +- +Quit '
db '*B EDIT +Copy +Paste '
db '*B HELP +Setup +About.. '
db '@' ; end mark
 
; A : Data type '*' -> New menu , '+' -> menu selection
; B : Number of selections in menu (A+)
; C : Menu header text
; D-G : Menu selection text
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; DATA BELOW IS FOR DIALOGS1.INC INTERNALS
 
menu_action dd '----'
 
window_on db 0
 
g_n dd -1
g_x dd 0x0
g_t dd 0x0
g_1 dd 0x0
g_l dd 0x0
closet db 0
 
table: times 1024 db 0
 
last_mouse dd 0x0
 
mo_x dd 0x0
mo_y dd 0x0
 
 
check_mouse:
 
pusha
 
cmp [window_on],1
je no_open
 
mov eax,37
mov ebx,2
int 0x40
 
cmp [window_on],0
jne openw2
 
cmp eax,0
je no_open
 
openw2:
 
waitformouse:
 
mov eax,23
mov ebx,2
int 0x40
 
cmp eax,0
jne no_open
 
mov eax,37
mov ebx,2
int 0x40
 
cmp eax,0
jne waitformouse
 
 
mov eax,37
mov ebx,1
int 0x40
 
mov esi,eax
 
shr eax,16
xor edx,edx
mov ebx,50
div ebx
mov edx,eax
cmp edx,[g_n]
je no_open
cmp edx,[menus]
jge no_open
mov eax,esi
 
and eax,0xffff
 
mov ebx,[m_y]
cmp eax,ebx
jbe no_open
add ebx,[m_ys]
cmp eax,ebx
jge no_open
 
cmp [window_on],0
je noww
 
mov [closet],1
mov ecx,100
waitm:
mov eax,5
mov ebx,1
int 0x40
dec ecx
jz no_open
cmp [window_on],0
jne waitm
noww:
 
mov eax,edx
jmp cll
 
no_open:
 
mov [last_mouse],esi
 
popa
 
ret
 
cll:
 
mov [window_on],2
 
mov [g_n],eax
mov [g_x],96
mov [g_t],0
mov [g_1],1
 
mov eax,9
mov ebx,table
mov ecx,-1
int 0x40
 
mov eax,[table+34]
mov [mo_x],eax
mov eax,[table+38]
mov [mo_y],eax
 
mov eax,51
mov ebx,1
mov ecx,alert_entry
mov edx,[g_stack]
int 0x40
 
mov [esp+28],dword 0 ; clear button entry
 
mov [menu_action],'MD '
 
check_gr:
 
popa
 
ret
 
 
draw_menu:
 
mov eax,9
mov ebx,table
mov ecx,-1
int 0x40
 
cmp [table+46],dword 30
jb drmr
 
mov eax,13 ; white background
mov ebx,[m_x]
shl ebx,16
add ebx,[m_xs]
inc ebx
mov ecx,[m_y]
shl ecx,16
add ecx,[m_ys]
mov edx,0xf0f8ff
int 0x40
 
mov eax,38 ; egde lines
mov ebx,[m_x]
shl ebx,16
add ebx,[m_x]
add ebx,[m_xs]
mov ecx,[m_y]
shl ecx,16
add ecx,[m_y]
mov edx,0x000000
int 0x40
mov eax,38
mov ecx,[m_y]
add ecx,[m_ys]
shl ecx,16
add ecx,[m_y]
add ecx,[m_ys]
int 0x40
 
mov esi,menu-1
mov edi,[m_x]
mov ebp,1
new_menu:
inc esi
 
cmp [esi],byte '*'
jne drmnl1
push esi
mov eax,4
mov ebx,edi
shl ebx,16
add ebx,[m_y]
add ebx,0x00050004
mov ecx,0x000000
mov edx,esi
add edx,3
mov esi,12
int 0x40 ; draw text
pop esi
add esi,2
add edi,50
inc ebp
 
drmnl1:
cmp [esi],byte '@'
jne new_menu
 
drmr:
 
ret
 
alert_box:
 
; eax : x size - min 200
; ebx : pointer to ASCIIZ - max 128 character text
; ecx : button 1 id ( OK or YES )
; edx : button 2 id or zero ( NO )
 
 
cmp [window_on],0
jne alert_box_return
 
mov [window_on],1
 
cmp eax,100
jg size_ok
mov eax,100
size_ok:
 
mov [g_x],eax
mov [g_t],ebx
mov [g_1],ecx
 
mov ecx,0
new_search:
cmp [ebx],byte 0
je found_len
inc ebx
inc ecx
cmp ecx,128
jbe new_search
found_len:
mov [g_l],ecx
 
mov eax,51
mov ebx,1
mov ecx,alert_entry
mov edx,[g_stack]
int 0x40
 
mov [menu_action],'MA '
 
alert_box_return:
 
ret
 
alert_entry:
 
call alert_draw_window
 
alert_still:
 
mov eax,23 ; wait here for event
mov ebx,1
int 0x40
 
cmp eax,1 ; redraw request ?
je alert_red
cmp eax,2 ; key in buffer ?
je alert_key
cmp eax,3 ; button in buffer ?
je alert_button
 
cmp [closet],0
jne ccc
 
mov eax,9
mov ebx,table
mov ecx,-1
int 0x40
 
cmp ax,[table+4]
je no_close
ccc:
mov [closet],0
mov [g_n],-1
mov [menu_action],'----'
mov [window_on],0
mov eax,-1
int 0x40
no_close:
 
jmp alert_still
 
alert_red: ; redraw
call alert_draw_window
jmp alert_still
 
alert_key: ; key
mov eax,2 ; just read it and ignore
int 0x40
jmp alert_still
 
alert_button: ; button
mov eax,17 ; get id
int 0x40
 
shr eax,8
cmp eax,3
jg no_action1
dec eax
shl eax,2
mov eax,dword [eax+rtext]
mov [menu_action],eax
jmp action_done
no_action1:
sub eax,16
add eax,65
shl eax,8
mov ebx,[g_n]
add ebx,65
add eax,ebx
mov [menu_action],eax
 
action_done:
 
mov [closet],0
mov [g_n],-1
mov [window_on],0
mov eax,-1 ; close this program
int 0x40
 
rtext db 'NO YES OK '
 
jmp alert_still
 
 
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
 
 
alert_draw_window:
 
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
int 0x40
 
cmp [window_on],2
jne no_win_type_2
 
mov edx,menu-1
mov ecx,[g_n]
add ecx,1
find_menu:
inc edx
cmp [edx],byte '*'
je menu_loop
jmp find_menu
menu_loop:
loop find_menu
movzx ebp,byte [edx+1]
sub ebp,64
push edx
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,[g_n]
imul ebx,50
add ebx,[mo_x]
add ebx,[m_x]
shl ebx,16
add ebx,[g_x]
mov ecx,[mo_y]
add ecx,[m_y]
add ecx,[m_ys]
shl ecx,16
mov edx,14
imul edx,ebp
add edx,7
add ecx,edx
mov edx,0x00ffffff ; color of work area RRGGBB,8->color gl
mov esi,0x00ffffff ; color of grab bar RRGGBB,8->color gl
mov edi,0x000000cc ; color of frames RRGGBB
int 0x40
 
pop edx
 
mov ebx,5*65536+7 ; draw info text with function 4
mov ecx,0x10000000
mov esi,12
mov ebp,16
no_d_found:
inc edx
cmp [edx],byte '*'
je d_drawed
cmp [edx],byte '@'
je d_drawed
cmp [edx],byte '+'
jne no_d_found
inc edx
pusha ; draw button
mov eax,8
mov ecx,ebx
mov ebx,[g_x]
add ebx,0x0000fffe
shl ecx,16
add ecx,0xfffc0000+14
mov edx,0x40000000
add edx,ebp
mov esi,0
int 0x40
popa
mov eax,4 ; draw text
int 0x40
inc ebp
add ebx,14
jmp no_d_found
d_drawed:
 
no_win_type_2:
 
 
cmp [window_on],1
jne no_win_1
 
mov eax,14 ; to middle of screen
int 0x40
mov ecx,eax
and ecx,0xffff
shr ecx,1
shr eax,1
mov ebx,[g_x]
shr ebx,1
shl ebx,16
sub eax,ebx
mov ebx,eax
 
mov eax,0 ; function 0 : define and draw window
mov bx,word [g_x]
sub ecx,80
shl ecx,16
mov cx,110 ; [y start] *65536 + [y size]
mov edx,0x02ffffff ; color of work area RRGGBB,8->color gl
mov esi,0x80d05050 ; color of grab bar RRGGBB,8->color gl
mov edi,0x00d05050 ; color of frames RRGGBB
int 0x40
 
 
mov eax,4 ; label
mov ebx,8*65536+8
mov ecx,0x10ddeeff
mov edx,alert_labelt1
mov esi,alert_label1len-alert_labelt1
int 0x40
 
mov eax,4
mov ebx,10*65536+43
mov ecx,0x10000000
mov edx,[g_t]
mov esi,[g_l]
int 0x40
 
cmp [g_1],1
jne gadgets_no_1
 
mov eax,8
mov ebx,[g_x]
sub ebx,100
shr ebx,1
shl ebx,16
add ebx,30*65536+40
mov ecx,75*65536+16
mov edx,3
mov esi,0x446688
int 0x40
 
mov eax,4
mov ebx,[g_x]
sub ebx,100
shr ebx,1
shl ebx,16
add ebx,31*65536+80
mov ecx,0x10ffffff
mov edx,alert_t2
mov esi,alert_t2len-alert_t2
int 0x40
 
gadgets_no_1:
 
cmp [g_1],2
jne gadgets_no_2
 
mov eax,8
mov ebx,[g_x]
sub ebx,100
shr ebx,1
shl ebx,16
add ebx,0*65536+40
mov ecx,75*65536+16
mov edx,1
mov esi,0x446688
int 0x40
 
mov eax,8
mov ebx,[g_x]
sub ebx,100
shr ebx,1
shl ebx,16
add ebx,57*65536+40
mov ecx,75*65536+16
mov edx,2
mov esi,0x446688
int 0x40
 
mov eax,4
mov ebx,[g_x]
sub ebx,100
shr ebx,1
shl ebx,16
add ebx,1*65536+80
mov ecx,0x10ffffff
mov edx,alert_t1
mov esi,alert_t1len-alert_t1
int 0x40
 
gadgets_no_2:
 
no_win_1:
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
 
ret
 
 
; DATA AREA
 
 
alert_t1:
db ' No Yes'
alert_t1len:
 
 
alert_t2:
db ' OK'
alert_t2len:
 
 
alert_labelt1:
db 'ALERT'
alert_label1len:
 
 
 
 
 
 
 
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/tinypad2/trunk/macros.inc
0,0 → 1,266
; new application structure
macro meos_app_start
{
use32
org 0x0
 
db 'MENUET01'
dd 0x01
dd __start
dd __end
dd __memory
dd __stack
 
if used __params & ~defined __params
dd __params
else
dd 0x0
end if
 
dd 0x0
}
MEOS_APP_START fix meos_app_start
 
macro code
{
__start:
}
CODE fix code
 
macro data
{
__data:
}
DATA fix data
 
macro udata
{
if used __params & ~defined __params
__params:
db 0
__end:
rb 255
else
__end:
end if
__udata:
}
UDATA fix udata
 
macro meos_app_end
{
align 32
rb 2048
__stack:
__memory:
}
MEOS_APP_END fix meos_app_end
 
 
; macro for defining multiline text data
struc mstr [sstring]
{
forward
local ssize
virtual at 0
db sstring
ssize = $
end virtual
dd ssize
db sstring
common
dd -1
}
 
 
; strings
macro sz name,[data] { ; from MFAR [mike.dld]
common
if used name
label name
end if
forward
if used name
db data
end if
common
if used name
.size = $-name
end if
}
 
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
common
if used name
label name
end if
forward
if (used name)&(lang eq lng)
db data
end if
common
if used name
.size = $-name
end if
}
 
 
 
; easy system call macro
macro mpack dest, hsrc, lsrc
{
if (hsrc eqtype 0) & (lsrc eqtype 0)
mov dest, (hsrc) shl 16 + lsrc
else
if (hsrc eqtype 0) & (~lsrc eqtype 0)
mov dest, (hsrc) shl 16
add dest, lsrc
else
mov dest, hsrc
shl dest, 16
add dest, lsrc
end if
end if
}
 
macro __mov reg,a { ; mike.dld
if ~a eq
mov reg,a
end if
}
 
macro mcall a,b,c,d,e,f { ; mike.dld
__mov eax,a
__mov ebx,b
__mov ecx,c
__mov edx,d
__mov esi,e
__mov edi,f
int 0x40
}
 
 
 
; language for programs
lang fix ru ; ru en fr ge fi
 
 
 
; optimize the code for size
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
macro add arg1,arg2
{
if (arg2 eqtype 0)
if (arg2) = 1
inc arg1
else
add arg1,arg2
end if
else
add arg1,arg2
end if
}
 
macro sub arg1,arg2
{
if (arg2 eqtype 0)
if (arg2) = 1
dec arg1
else
sub arg1,arg2
end if
else
sub arg1,arg2
end if
}
 
macro mov arg1,arg2
{
if (arg1 in __regs) & (arg2 eqtype 0)
if (arg2) = 0
xor arg1,arg1
else if (arg2) = 1
xor arg1,arg1
inc arg1
else if (arg2) = -1
or arg1,-1
else if (arg2) > -128 & (arg2) < 128
push arg2
pop arg1
else
mov arg1,arg2
end if
else
mov arg1,arg2
end if
}
 
 
macro struct name
{
virtual at 0
name name
sizeof.#name = $ - name
end virtual
}
 
; structures used in MeOS
struc process_information
{
.cpu_usage dd ? ; +0
.window_stack_position dw ? ; +4
.window_stack_value dw ? ; +6
.not_used1 dw ? ; +8
.process_name rb 12 ; +10
.memory_start dd ? ; +22
.used_memory dd ? ; +26
.PID dd ? ; +30
.x_start dd ? ; +34
.y_start dd ? ; +38
.x_size dd ? ; +42
.y_size dd ? ; +46
.slot_state dw ? ; +50
rb (1024-52)
}
struct process_information
 
struc system_colors
{
.frame dd ?
.grab dd ?
.grab_button dd ?
.grab_button_text dd ?
.grab_text dd ?
.work dd ?
.work_button dd ?
.work_button_text dd ?
.work_text dd ?
.work_graph dd ?
}
struct system_colors
 
 
; constants
 
; events
EV_IDLE = 0
EV_TIMER = 0
EV_REDRAW = 1
EV_KEY = 2
EV_BUTTON = 3
EV_EXIT = 4
EV_BACKGROUND = 5
EV_MOUSE = 6
EV_IPC = 7
EV_STACK = 8
 
; event mask bits for function 40
EVM_REDRAW = 1b
EVM_KEY = 10b
EVM_BUTTON = 100b
EVM_EXIT = 1000b
EVM_BACKGROUND = 10000b
EVM_MOUSE = 100000b
EVM_IPC = 1000000b
EVM_STACK = 10000000b
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/tinypad2/trunk/scroll.inc
0,0 → 1,440
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;
;; Scroll.inc ;
;; ;
;; Vertical Scroll Bar Example for MenuetOS ;
;; ;
;; Version 0.2 27 February 2005 ;
;; ;
;; ;
;; GNU GENERAL PUBLIC LICENSE ;
;; Version 2, June 1991 ;
;; ;
;; Copyright 2005 Jason Delozier, ;
;; cordata51@hotmail.com ;
;; ;
;; See file COPYING for details ;
;; ;
;; Updates: ;
;; - FPU not longer used for calculations -Feb 27, 2005 ;
;; ;
;; ;
;; TODO: ;
;; - Create Message Handler and only allow runtime arguments ;
;; to be processed through the message handler ;
;; - Remove all local varibles and only allow working varible to ;
;; reside in scroll bar structure. ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
 
 
;*****************************************************************************
;*
;* VScroll Structure Equates
;*
;*****************************************************************************
 
VScroll_width equ 0
VScroll_x equ 2
VScroll_height equ 4
VScroll_y equ 6
VScroll_min equ 8
VScroll_max equ 12
VScroll_current equ 16
VScroll_s_change equ 20
VScroll_b_change equ 24
 
;Example VScroll Structure
;VScroll_1:
; dw 16 ;width +0
; dw 100 ;x +2
; dw 200 ;height +4
; dw 40 ;y +6
; dd 0 ;min +8
; dd 1000;max +12
; dd 1 ;current +16
; dd 1 ;small change +20
; dd 10 ;big change +24
 
VScroll_Min_Height dw 16 ;scroll box
Vscroll_Fixed_Height dw 16 ;height of scroll buttons (up and down)
 
;**************************************
;*
;* Mouse Over VScroll
;*
;**************************************
vsm1 dd 0
vstoff dd 0
 
VScroll_mouse_over:
cmp [mouseb], 1
je VScroll_Mouse_Has_Mouse
cmp [mouseb], 0
jne VScroll_mouse_over_done2
mov [vsm1], 0
jmp VScroll_mouse_over_done2
VScroll_Mouse_Has_Mouse:
push ecx
mov ecx, [vsm1]
shl ecx,2
call dword [VScroll_Mouse_Jumptable+ecx]
VScroll_mouse_over_done:
pop ecx
VScroll_mouse_over_done2:
ret
 
VScroll_Mouse_Jumptable:
dd VScroll_Mouse_Find
dd VScroll_Mouse_On_Up
dd VScroll_Mouse_On_Down
dd VScroll_Mouse_Above_Thumb
dd VScroll_Mouse_Below_Thumb
dd VScroll_Mouse_On_Thumb
 
VScroll_Mouse_Find:
inc ecx
call dword [VScroll_Mouse_Jumptable+ecx*4]
cmp [vsm1], 0
jne VScroll_mouse_over_done2
cmp ecx, 5
je VScroll_mouse_over_done2
jmp VScroll_Mouse_Find
 
 
;**************************************
;Is Mouse at Up button
VScroll_Mouse_On_Up:
push eax
movzx eax, word [ebp+VScroll_y]
add ax, word [Vscroll_Fixed_Height]
cmp [mousey], ax
pop eax
ja VScroll_Mouse_On_Up2
mov [vsm1], 1
call VScroll_Small_Up
VScroll_Mouse_On_Up2:
ret
 
;**************************************
;Is Mouse at Down button
VScroll_Mouse_On_Down:
push eax
movzx eax,word [ebp+VScroll_y]
add ax, word [ebp+VScroll_height]
sub ax, word [Vscroll_Fixed_Height]
cmp [mousey], ax
pop eax
jb VScroll_Mouse_On_Down2
mov [vsm1], 2
call VScroll_Small_Down
VScroll_Mouse_On_Down2:
ret
 
;**************************************
;Is Mouse above Scroll Thumb
VScroll_Mouse_Above_Thumb:
push eax
push ecx
push edx
call Vscroll_SBox_Area
add cx, word [ebp+VScroll_y]
add cx, word [Vscroll_Fixed_Height] ;plus height of scroll button
cmp cx, [mousey]
pop edx
pop ecx
pop eax
jb VScroll_Mouse_Above_Thumb2
mov [vsm1], 3
call VScroll_Big_Up
VScroll_Mouse_Above_Thumb2:
ret
 
;**************************************
;Is Mouse below scroll thumb
VScroll_Mouse_Below_Thumb:
push eax
push ecx
push edx
call Vscroll_SBox_Area
add cx, word [ebp+VScroll_y]
add cx, word [Vscroll_Fixed_Height] ;plus height of scroll button
add cx, ax
cmp cx, [mousey]
pop edx
pop ecx
pop eax
ja VScroll_Mouse_Below_Thumb2
mov [vsm1], 4
call VScroll_Big_Down
VScroll_Mouse_Below_Thumb2:
ret
 
;**************************************
;Mouse is on Scroll Thumb
VScroll_Mouse_On_Thumb:
 
pusha
cmp [vsm1], 5 ;first time moving since we clicked?
je VScroll_Mouse_On_Thumb1 ;if not jump.. we already have offset
mov [vsm1], 5 ;determine offset between mouse pointer and top of thumb
call Vscroll_SBox_Area ;get top of thumb coordinate
add cx, word [ebp+VScroll_y] ;make screen coordinate
add cx, word [Vscroll_Fixed_Height] ;plus height of scroll button and top
movzx esi,word [mousey] ;get mouse position
sub esi, ecx ;make offset between top of thumb
mov [vstoff], esi ;and mouse pointer then save it
VScroll_Mouse_On_Thumb1: ;
movzx esi, [mousey] ;get mouse y value
sub si, word [ebp+VScroll_y] ;get y starting value of scroll bar
sub si, [Vscroll_Fixed_Height]
sub esi, [vstoff] ;
call Vscroll_SBox_Area ;
VScroll_Mouse_On_Thumb2: ;
cmp [ebp+VScroll_current], edx ;only redraw if change occured
je VScroll_Mouse_On_Thumb3 ;
mov [ebp+VScroll_current], edx ;new current value
call drawvscrolla ;redraw scroll background and thumb
VScroll_Mouse_On_Thumb3: ;
popa ;
ret
;**************************************
 
 
 
 
;*****************************************************************************
;*
;* Vscroll_SBox_Area
;*
;* Purpose: To determine the area of the Scroll Bar Thumb and the current
;* value of scroll based on top pixel of thumb.
;*
;* Inputs:
;* EBP - Structure of scroll bar
;* ESI - Top of Thumb - optional
;*
;* Outputs:
;* EAX - Thumb Height
;* ECX - Top of thumb
;* EDX - Current Value based on top pixel of thumb. Valid when ESI
;* is given as input.
;*
;* This procedure is divided up into 5 specific functions.
;* 1. ((Vmax-VMin)/Small Change)= Total Changes
;* 2. Height - (2* Fixed Button Height) = Total Pixels
;* 3. Total Pixels - Total Changes = Thumb Height (must be >= 16)
;* Minimum Height of 16 is varible [VScroll_Min_Height]
;* 4. (((Tot Pixels - Thumb Height)* Current)/Max-min)=Top Pixel of Thumb
;* 5. ((Mouse Top * (max-Min))/(Total Pix - Thumb Height)) = Current
;* Step 5 is only valid if ESI is supplied as an input.
;*
;*
;*****************************************************************************
 
Vscroll_SBox_Area:
push ebx
push esi
push edi
;Step 1. Determine Total Changes
mov eax, dword [ebp+VScroll_max] ;get max scroll
sub eax, dword [ebp+VScroll_min] ;sub minmum scroll for total scro
xor edx,edx
push eax
div dword [ebp+VScroll_s_change] ;
;eax = total changes ((max-min)/Small Change)
 
;Step 2. Determine Total Pixels
movzx ecx, word [ebp+VScroll_height] ;height of entire scroll bar
mov bx, word [Vscroll_Fixed_Height] ;minus height of both scroll button
shl bx, 1
sub cx, bx
push ecx
;ecx = total pixels (Total Height - (2*Fixed Button Height)
 
;Step 3. Determine Thumb Height
cmp ecx, eax
jbe vs1
sub ecx, eax
cmp cx, word [VScroll_Min_Height]
jb vs1
jmp vs2
vs1:
movzx ecx, word [VScroll_Min_Height]
vs2:
;ecx = Thumb Height (Total Pixels - Total Changes) >=16
 
;Step 4. Determine Top Pixel of Thumb
pop edi ;Total Pixels
sub edi, ecx ;
;edi = Total Pixels - thumb Height
mov eax, edi ;
mul dword [ebp+VScroll_current] ;get current scroll value
pop ebx ;max scroll
push ecx ;
div ebx ;
mov ecx, eax ;
;ecx = top pixel of thumb
 
;Step 5. Determine Current Value based on Mouse Position
cmp si,0
jge vss4
mov eax, dword [ebp+VScroll_min]
jmp vsdone1
vss4:
cmp esi, edi
jbe vss3
mov eax, dword [ebp+VScroll_max]
jmp vsdone1
vss3:
mov eax,ebx ;max scroll
mul esi ;Top Pixel of mouse
div edi ;Total Pixels - Thumb Height
;eax = Current Value
 
vsdone1:
mov edx, eax ;Current Value
pop eax ;Thumb Height
pop edi
pop esi
pop ebx
ret
 
;*****************************************************************************
;*
;*****************************************************************************
;ebp is structure
drawvscroll:
pusha
;up button
mov eax, 13 ;button system function
mov edx,0x00777777 ;0x6677cc ;color
mov ebx, [ebp+VScroll_width] ;x-start/width
mov cx, word [ebp+VScroll_y] ;get bottom of scroll bar
shl ecx, 16
mov cx, [Vscroll_Fixed_Height] ;fixed height
int 0x40
 
;down button
mov ebx, [ebp+VScroll_width] ;x-start/width
mov cx, word [ebp+VScroll_y] ;get bottom of scroll bar
add cx, word [ebp+VScroll_height] ;
sub cx, [Vscroll_Fixed_Height] ;y-start is 12 pixel from bottom
shl ecx, 16 ;
mov cx, [Vscroll_Fixed_Height] ;fixed height
int 0x40
;------- 'ASCL.INC' needs to be included to use this --
putlabel 493,46,'',cl_Black
putlabel 493,372,'',cl_Black
;------------------------------------------------------
 
popa
drawvscrolla:
pusha
 
mov eax, 13 ;Draw Scroll Box Background
mov edx, 0x00999999;0 ;color
push edx
movzx edx, word [Vscroll_Fixed_Height]
mov ebx, [ebp+VScroll_width] ;x-start/width
movzx ecx,word [ebp+VScroll_y] ;y-start
add ecx, edx ;add fixed height button
shl ecx, 16 ;do height next
mov cx,word [ebp+VScroll_height] ;y-start
sub cx, dx ;subtract fixed height of up button
sub cx, dx ;subtract fixed height of down button
pop edx
int 0x40 ;tell system to draw it
 
;determine height of scroll box (thumb)
 
call Vscroll_SBox_Area
add cx, [ebp+VScroll_y]
add cx, 16
shl ecx, 16
mov cx, ax
 
mov eax, 13 ;draw scroll box
mov ebx, [ebp+VScroll_width] ;x-start/width
mov edx, 0x00bbbbbb ;0x999999
int 0x40
;call Draw_Scroll_info
popa
ret
;*****************************************************************************
 
;*****************************************************************************
;* VScroll_Big_Up
;* VScroll_Small_Up
;*****************************************************************************
;need to update for signed values
VScroll_Big_Up:
push eax
push ebx
mov eax, dword [ebp+VScroll_b_change]
jmp VScroll_Up
VScroll_Small_Up:
push eax
push ebx
mov eax, dword [ebp+VScroll_s_change]
VScroll_Up:
mov ebx, dword [ebp+VScroll_min] ;get minimum value
cmp [ebp+VScroll_current], ebx ;are we at minimum already?
je VScroll_Up_exit ;if so leave
sub [ebp+VScroll_current], eax ;
jnc VScroll_Up_done
mov [ebp+VScroll_current], ebx
VScroll_Up_done:
cmp [ebp+VScroll_current], ebx ;if current is greater then max
jae VScroll_Up_done2
mov [ebp+VScroll_current], ebx
VScroll_Up_done2:
;redraw
call drawvscroll ;temp?
VScroll_Up_exit:
pop ebx
pop eax
 
ret
;*****************************************************************************
 
 
;*****************************************************************************
;* VScroll_Big_Down
;* VScroll_Small_Down
;*****************************************************************************
;need to update for signed values
VScroll_Big_Down:
push eax
push ebx
mov eax, dword [ebp+VScroll_b_change];get big change value
jmp VScroll_Down
VScroll_Small_Down:
push eax
push ebx
mov eax, dword [ebp+VScroll_s_change];get small change value
VScroll_Down:
mov ebx, dword [ebp+VScroll_max] ;get maximum scroll value
cmp [ebp+VScroll_current], ebx ;are we at max already?
je VScroll_Down_exit ;if so leave
add [ebp+VScroll_current], eax ;add change to current
jno VScroll_Down_done ;dont go beyond bounds of register
mov [ebp+VScroll_current], ebx ;if we did then we at max
VScroll_Down_done: ;
cmp [ebp+VScroll_current], ebx ;if current is greater then max
jbe VScroll_Down_done2 ;
mov [ebp+VScroll_current], ebx ;then we at max
VScroll_Down_done2: ;
;redraw
call drawvscroll ;temp?
VScroll_Down_exit:
pop ebx
pop eax
ret
;*****************************************************************************
 
 
 
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/tinypad2/trunk/tinypad2.asm
0,0 → 1,4001
; SYSTEM HAEDER:
use32
org 0x0
db 'MENUET01' ; identifier
dd 0x01 ; version
dd START ; pointer to start
dd TINYPAD_END ; size of file
dd 0x300f00 ;0x500000; 0x3fff00;0x300000 ; size of memory
dd 0xeff0 ;0x4fffff ;0x3ff000;0xeff0 ; esp
dd I_PARAM ; parameters
dd 0 ; reserved
include 'lang.inc'
include 'ascl.inc'
include 'macros.inc' ; useful stuff
include 'dialogs1.inc'
include 'scroll.inc'
;include 'debug.inc'
purge mov ;  SPEED
;******************************************************************************
; INITIALIZING
START:
;debug_print_hex TINYPAD_END
call mask_events
 
cmp [I_PARAM],byte 0
jz noparams
 
; parameters are at I_PARAM
mov esi,I_PARAM
mov edi,filename
mov ecx,50
cld
rep movsb
 
mov edi,filename
mov ecx,50
xor eax,eax
repne scasb
sub edi,filename
dec edi
mov [filename_len],edi
jmp do_load_file
noparams:
jmp newfile
;******************************************************************************
; MAIN LOOP
still:
call writepos ; write current position & number of strings
call mouse_info
 
mov eax,10 ; wait here until event
int 0x40
 
cmp eax,1
je red
cmp eax,2
je key
cmp eax,3
je button
cmp eax,6
je mouse
jmp still
;******************************************************************************
; *********************************
; * MOUSE *
; *********************************
mouse:
mov eax,37 ;mouse click
mov ebx,2
int 0x40
cmp eax,0
je .leave_now
;if exit window is on
cmp [exit_wnd_on],1
jne @f
mov [exit_wnd_on],0
jmp red
;else
@@:
cmp eax,1 ;mouse 1
jne .leave_now
 
mov eax,37 ;mouse position
mov ebx,1
int 0x40
 
mov word[mouse_y],ax
shr eax,16
mov word[mouse_x],ax
 
 
cmp [mouse_x],7
jb .leave_now ;.leave_now ;if <
cmp [mouse_x],485;487
ja .leave_now ;.leave_now ;if >
 
cmp [mouse_y],45
jb .leave_now ;.leave_now ;if <
cmp [mouse_y],342 ;345
ja .leave_now ;.leave_now ;if >
 
call main_cursor_move
 
.leave_now:
jmp still
 
; *********************************
; * BUTTON HANDLER *
; *********************************
 
button:
 
mov eax,17
int 0x40
;;;;;;;;;;;;;;;exit dialog box check;;;;;;;;;;;;;
cmp ah,49
je save_and_exit
cmp ah,48
je exit_now
cmp ah,47
mov [exit_wnd_on],0
je red
cmp ah,46
jne @f
 
call save_file
jmp newfile
@@:
cmp ah,45
je newfile
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;MENU CHECK;;;;;;;;;;;;;;;;;;;;;;;
cmp ah,15
jne no_d_w
call draw_window_for_dialogs
jmp still
no_d_w:
cmp ah,97
je draw_win_menu_file
cmp ah,98
je draw_win_menu_code
cmp ah,96
je draw_win_menu_text
cmp ah,95
je goto_string
cmp ah,92
je search_window
cmp ah,94
je red
cmp ah,99
je help_wnd
cmp ah,100
je new_pad_wnd
cmp ah,101
je doyouwannasave
cmp ah,102
jne nosavenow
for_key_save:
savedialog draw_window_for_dialogs,copy_fpath_s,saveerror,mypath
nosavenow:
cmp ah,103
jne noopennow
for_key_open:
opendialog draw_window_for_dialogs,copy_fpath,openerror,mypath
noopennow:
cmp ah,104
je exit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shr eax,8
 
cmp al,50
jne no_search
 
; SEARCH {
search:
 
cmp [lines],1 ;something like bug fix
je red ;still
 
xor esi,esi
mov edi,[post]
add edi,80
imul ecx,[lines],80
sub ecx,edi ; ecx (loop counter) = lines*80-(post+80)
news:
push edi
news2:
 
; 1) LOAD BYTES
mov al,[esi+search_string]
mov bl,[edi+0x80000]
 
; 2) COMPARE BYTES
cmp al,bl
je yes_char
 
; 3) LETTER?
cmp al,'A'
jb notequal
cmp al,'z'
ja notequal
 
; 4) A->a OR a->A
cmp al,'a'
jb @f
add al,-32
jmp compare_bytes
@@:
cmp al,'Z'
ja notequal
add al,32
 
compare_bytes:
cmp al,bl
jne notequal
 
yes_char:
inc edi
inc esi
cmp esi,[search_len]
jge sfound
jmp news2
 
notequal:
pop edi
xor esi,esi
inc edi
loop news
call string_not_found
jmp still
 
sfound:
mov eax,edi
cdq ; edx = 0;
mov ebx,80
div ebx
;;;;; imul eax,80
; lea eax,[eax+eax*4] ; eax *= 5;
; shl eax,4 ; eax *= 16;
 
; mov [post],eax
mov [posy],0
;---------------
; mov ebx,80
; div ebx
call goto_pos
call draw_vertical_scroll
jmp still
; SEARCH }
 
no_search:
 
; TOOLBAR {
cmp eax,10000
jb no_toolbar
 
add eax,-10000
jne @f
lbl_compile_file:
mov [run_outfile],0
call start_fasm
jmp still
@@:
dec eax
jnz @f
lbl_run_outfile:
mov [run_outfile],1
call start_fasm
jmp still
@@:
dec eax
jnz @f
call open_debug_board
jmp still
@@:
dec eax
jnz still
call open_sysfuncs_txt
jmp still
; TOOLBAR }
 
no_toolbar:
 
cmp al,4
jne noid4
 
; LOAD_FILE {
do_load_file:
mov [modified],0
 
call empty_work_space
 
 
cmp [filename],'/'
jne @f
 
call loadhdfile
jmp .restorecursor
@@:
call loadfile1
.restorecursor:
mov edi,0x78000
mov ecx,80*80/4
mov eax,0x01010101
cld
rep stosd
xor eax,eax
mov [post],eax
mov [posx],eax
mov [posy],eax
 
; enable color syntax for ASM and INC files:
mov [asm_mode], 0
 
mov eax, [filename_len]
add eax, filename
cmp word [eax-3],'AS'
jne @f
cmp byte [eax-1],'M'
jne @f
mov [asm_mode], 1
jmp .nocol
@@:
cmp word [eax-3],'IN'
jne @f
cmp byte [eax-1],'C'
jne @f
mov [asm_mode], 1
@@:
.nocol:
 
; if the header is the same as the previous,
; just redraw the text area
; else redraw the window
 
;------pos00=filename_len
mov eax,[filename_len]
mov [pos00],eax
;-------------------------
mov ecx, [filename_len]
add ecx, 10 ; strlen(" - TINYPAD");
cmp ecx, [headlen]
jne @f
add ecx, -10
mov esi, filename ; strcmp(filename,header);
mov edi, header
rep cmpsb
jne @f
call drawfile
call draw_window_for_dialogs ;redraw, because it's needed
cmp [to_return],0
je still
ret
;jmp still
@@:
call set_title
cmp [to_return],0
je still
ret
; jmp still
; LOAD_FILE }
 
noid4:
 
cmp al, 2
jz yessave
 
dec al ; close if butid == 0
jnz nosave
; EXIT:
exit:
cmp [modified],0
je exit_now
 
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep1
int 0x40
delay 4
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep2
int 0x40
 
;---------"EXIT" dialog box
 
mov eax,13
mov ebx,150*65536+200
mov ecx,100*65536+70
mov edx,[sc.work_graph] ;0x00dd9438 ;0x00ff7512
int 0x40
 
 
mov eax,38
mov ebx,150*65536+350
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+350
mov ecx,170*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+150
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,350*65536+350
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
 
 
 
putlabel 190,120,'‘®åà ­¨âì ¤®ªã¬¥­â?',cl_White
 
drawlbut 170,140,30,15,'„ ',49,[sc.work_button],cl_White
drawlbut 230,140,30,15,'¥â',48,[sc.work_button],cl_White
drawlbut 290,140,45,15,'Žâ¬¥­ ',47,[sc.work_button],cl_White
 
mov [exit_wnd_on],1
;----------------
 
jmp still
 
exit_now:
mov [MainWndClosed], 1
or eax, -1
int 0x40
 
save_and_exit:
call save_file
jmp exit_now
; mov [MainWndClosed], 1
; or eax, -1
; int 0x40
 
; SAVE_FILE {
yessave:
call clear_screen
call drawwindow
call save_file
; call clear_screen
; call drawwindow
mov [modified],0
 
jmp still
; SAVE_FILE }
 
nosave:
 
inc al
call read_string
 
jmp still
 
;**********************************
;* REDRAW HANDLER *
;**********************************
 
red:
; ¯¥à¥à¨á®¢ª  ®ª­ 
call clear_screen
call drawwindow
jmp still
 
 
 
;**********************************
;* KEY HANDLER *
;**********************************
 
key:
mov eax, 2 ; GET KEY
int 0x40
 
cmp [exit_wnd_on],1 ;exit window is ON?
jne no_exit_wnd ; no - goto other checks
 
; cmp eax,13 ;enter - save n exit
; je save_and_exit
 
; cmp eax,173 ;ctrl+enter - exit
; je exit_now
mov [exit_wnd_on],0 ;other keys - cancel
; call draw_window_for_dialogs
 
jmp red ;redraw and still
 
 
no_exit_wnd:
shr eax, 8
 
; HELP_TEXT {
cmp al, 210 ; Ctrl + F1
jne no_help_text
help_wnd:
call clear_screen
call drawwindow
mov eax, 51
mov ebx, 1
mov ecx, help_thread_start
mov edx, 0xfff0
int 0x40
jmp still
 
help_thread_start:
call draw_help_wnd
 
still_hw:
cmp [MainWndClosed], 1
je exit_hw
mov eax, 10
int 0x40
cmp eax, 1
je red_hw
cmp eax, 2
je key_hw
cmp eax, 3
je button_hw
jmp still_hw
 
red_hw:
call draw_help_wnd
jmp still_hw
 
key_hw:
; mov eax, 2
int 0x40
cmp ah, 27
jne still_hw
 
button_hw:
mov eax, 17
int 0x40
exit_hw:
or eax, -1
int 0x40
 
; draw help window
draw_help_wnd:
mov eax, 12
mov ebx, 1
int 0x40
 
xor eax, eax
mov ebx, 200 shl 16 + 320
mov ecx, 200 shl 16 + 260
mov edx, 0x03e0e0e0 ; work
mov esi, [sc.grab]
or esi, 0x80000000 ; grab
mov edi, [sc.frame] ; frame
int 0x40
 
mov eax, 4
mov ebx, 8 shl 16 + 8
mov ecx, 0xffffff
mov edx, help_wnd_header
mov esi, hlphead_len
int 0x40
 
mov eax, 4
mov ebx, 8 shl 16 + 34
xor ecx, ecx
mov esi, 51
mov edx, help_text
.new_help_line:
int 0x40
add ebx, 10
add edx, esi
cmp [edx], byte 'x'
jne .new_help_line
 
mov eax, 12
mov ebx, 2
int 0x40
ret
; HELP_TEXT }
 
no_help_text:
; LOAD_FILE {
cmp al, 211 ; Ctrl + F2
je for_key_open ;do_load_file
; LOAD_FILE }
 
; SEARCH {
cmp al, 212 ; Ctrl + F3
je search
; SEARCH }
 
; SAVE_FILE {
cmp al, 213 ; Ctrl + F4
je yessave
; SAVE_FILE }
 
; ENTER_FILENAME {
cmp al, 214 ; Ctrl + F5
jne @f
jmp for_key_save
@@:
; ENTER_FILENAME }
 
; ENTER_SEARCH {
cmp al, 215 ; Ctrl + F6
jne @f
; mov al, 51
; call read_string
; jmp still
jmp search_window
@@:
; ENTER_SEARCH }
 
; CHANGE_LAYOUT {
cmp al, 217 ; Ctrl + F8
jne @f
call layout
jmp still
@@:
; CHANGE_LAYOUT }
 
; COMPILE_FILE {
cmp al, 208
je lbl_compile_file
; COMPILE_FILE }
 
; RUN_OUTFILE {
cmp al, 209
je lbl_run_outfile
 
; RUN_OUTFILE }
 
;run debug board { -----
cmp al,255
jne @f
call open_debug_board
call activate_me
jmp still
;}
@@:
;open sysfuncR { -----
; cmp al,228
; jne @f
; call open_sysfuncs_txt
; jmp still
; @@:
 
;fast_save_and_open {
cmp al,216
jne @f
call make_fast_so
jmp still
;}
@@:
; 3 times english -> àãá᪨©
; 2 times àãá᪨© -> english
 
; COPY START {
cmp al, 19
jne no_copy_start
mov eax, [post]
imul ebx, [posy], 80
add eax, ebx
mov [copy_start], eax
jmp still
; COPY START }
 
no_copy_start:
; COPY END {
cmp al, 5
jne no_copy_end
cmp [copy_start], 0
je still
mov ecx, [post]
imul ebx, [posy], 80
add ecx, ebx
add ecx, 80
cmp ecx, [copy_count]
jb still
sub ecx, [copy_start]
mov [copy_count], ecx
mov esi, [copy_start]
add esi, 0x80000
mov edi, 0x2f0000
cld
rep movsb
jmp still
; COPY END }
 
no_copy_end:
 
; PASTE {
cmp al, 16
jne no_copy_paste
cmp [copy_count], 0
je still
mov eax,[copy_count]
cdq
mov ebx, 80
div ebx
add [lines], eax
mov ecx, 0x2e0000
mov eax, [post]
imul ebx, [posy], 80
add eax, ebx
add eax, 0x80000
sub ecx, eax
mov esi, 0x2e0000
sub esi, [copy_count]
mov edi, 0x2e0000
std
rep movsb
mov esi, 0x2f0000
mov edi, [post]
imul eax, [posy], 80
add edi, eax
add edi, 0x80000
mov ecx, [copy_count]
cld
rep movsb
 
call clear_screen
call drawfile
call draw_vertical_scroll
mov [modified],1
 
jmp still
; PASTE }
 
 
no_copy_paste:
 
 
; INSERT_SEPARATOR {
cmp al,0xc ; Ctrl+L
jne no_insert_separator
 
imul eax,[posy],80
add eax,[post]
add eax,0x80000
mov ebx,eax
 
imul eax,[lines],80
add eax,0x80000 ; ⥯¥àì 㪠§ë¢ ¥â ­  ª®­¥æ ä ©« 
 
mov ecx,eax ; size
sub ecx,ebx
inc ecx
 
mov esi,eax ; from
mov edi,eax
add edi,80 ; to
 
std
rep movsb
 
mov ecx,80/4
mov esi,comment_string
mov edi,ebx
cld
rep movsd
 
inc [lines]
 
call clear_screen
call drawfile
;call calc_scroll_size_and_pos
call draw_vertical_scroll
mov [modified],1
 
jmp still
; INSERT_SEPARATOR }
 
 
no_insert_separator:
 
 
; DEL_LINE {
cmp al,4
jne no_delete_line
mov eax,[post]
cdq
mov ebx,80
div ebx
add eax,[posy]
inc eax
cmp eax,[lines]
jge still
dec dword [lines]
imul edi,[posy],80
add edi,[post]
add edi,0x80000
mov esi,edi
add esi,80
mov ecx,0x2e0000
sub ecx,esi
shr ecx,4
cld
rep movsd
call clear_screen
call drawfile
;call calc_scroll_size_and_pos
call draw_vertical_scroll
mov [modified],1
 
jmp still
; DEL_LINE }
 
no_delete_line:
 
; ENTER {
cmp al,13
jnz noenter
 
; lines down
mov eax,[posy]
inc eax
; imul eax,80
lea eax,[eax+eax*4] ; eax *= 5
shl eax,4 ; eax *= 16
add eax,0x80000
add eax,[post]
mov ebx,eax
 
; ebx = ([posy]+1)*80 + 0x80000 + [post]
; ebx -> first byte of next string
 
imul eax,[lines],80
add eax,0x80000
mov ecx,eax
 
; ecx = [lines]*80 + 0x80000
; ecx -> end of the document
 
cmp ebx,ecx
jz .bug_fixed
 
@@:
dec ecx
mov dl,[ecx]
mov [ecx+80],dl
 
cmp ecx,ebx
jnz @b
 
.bug_fixed:
 
; save for later
imul eax,[posy],80
add eax,0x80000
add eax,[post]
mov ebx,eax
add eax,[posx]
; eax = 0x80000 + [post] + [posy]*80 + [posx]
 
push eax
 
dec ebx
xor ecx,ecx
@@:
cmp ecx,80
je @f
inc ecx
inc ebx
cmp byte [ebx],' '
je @b
@@:
dec ecx
 
cmp ecx,80-1
jne @f
; mov [posx],0
jmp .lbl
@@:
 
cmp [posx],ecx
jbe @f
mov [posx],ecx
jmp .lbl
@@:
mov [posx],0
 
.lbl:
inc [posy]
 
;clear line
imul eax,[posy],80
add eax,0x80000
add eax,[post]
 
mov edi,eax
mov eax,' '
mov ecx,80/4
cld
rep stosd
 
 
; end of line to next line beginning
imul eax,[posy],80
add eax,0x80000
add eax,[post]
; add eax,[posx]
mov ebx,eax
; ebx -> beginning of this line
 
pop esi
mov edi,eax
 
@@:
mov al,[esi]
mov [ebx],al
mov [esi],byte ' '
 
inc esi
inc ebx
 
cmp esi,edi
jb @b
 
inc [lines]
 
mov ecx,[posy]
cmp ecx,[slines]
jne @f
 
dec [posy]
add [post],80
 
@@:
call clear_screen
call drawfile
;call calc_scroll_size_and_pos
 
call draw_vertical_scroll
mov [modified],1
 
jmp still
; ENTER }
 
 
noenter:
 
 
; UP {
cmp al,130+48
jnz noup
mov ecx,[posy]
test ecx,ecx
jnz .up1
mov ecx,[post]
test ecx,ecx
jz still
add ecx,-80
mov [post],ecx
call clear_screen
jmp .finish
.up1:
dec ecx
mov [posy],ecx
.finish:
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
; UP }
 
noup:
 
; DOWN {
cmp al,129+48
jnz nodown
 
mov ecx,[posy]
mov eax,[slines]
dec eax
cmp ecx,eax
jb .do1 ; goto do1 if [posy] < [slines]-1
 
mov eax,[lines]
sub eax,[slines]
dec eax
jb still ; goto still if [lines] < [slines]-1
; imul eax,80
lea eax,[eax+eax*4]
shl eax,4
cmp [post],eax
jg still ; goto still if [post] > ([lines]-[slines]-1)*80
 
add [post],80
call clear_screen
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
 
.do1:
pusha
mov eax,[post]
cdq
mov ebx,80
div ebx
add eax,[posy]
inc eax
cmp eax,[lines]
jb .do10
popa
jmp still
 
.do10:
popa
inc ecx
mov [posy],ecx
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
; DOWN }
 
 
nodown:
 
 
; LEFT {
cmp al,128+48
jnz noleft
cmp [posx],0
je still
dec [posx]
call drawfile
jmp still
; LEFT }
 
 
noleft:
 
 
; RIGHT {
cmp al,131+48
jnz noright
cmp [posx],79
je still
inc [posx]
call drawfile
jmp still
; RIGHT }
 
 
noright:
 
 
; PAGE_UP {
page_up:
cmp al,136+48
jnz nopu
scrl_up:
mov eax,[slines]
dec eax
; imul eax,80
lea eax,[eax+eax*4]
shl eax,4
mov ecx,[post]
cmp eax,ecx
jbe pu1
mov ecx,eax
pu1:
sub ecx,eax
mov [post],ecx
 
call clear_screen
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
jmp still
; PAGE_UP }
 
 
nopu:
 
 
; PAGE_DOWN {
page_down:
cmp al,135+48
jnz nopd
scrl_down:
mov eax,[lines]
cmp eax,[slines]
jb still
 
mov eax,[post] ; eax = offset
cdq
mov ebx,80
div ebx ; eax /= 80
mov ecx,[lines] ; ecx = lines in the file
cmp eax,ecx ; if eax < ecx goto pfok
jnb still
mov eax,[slines] ; eax = lines on the screen
dec eax ; eax--
; imul eax,80 ; eax *= 80
lea eax,[eax+eax*4]
shl eax,4
add [post],eax ; offset += eax
 
mov eax,[lines] ; eax = lines in the file
sub eax,[slines] ; eax -= lines on the screen
; imul eax,80 ; eax *= 80
lea eax,[eax+eax*4]
shl eax,4
cmp [post],eax
jb @f
mov [post],eax
@@:
 
call clear_screen
call drawfile
call draw_vertical_scroll
;call calc_scroll_size_and_pos
 
jmp still
; PAGE_DOWN }
 
nopd:
 
; HOME {
cmp al,132+48
jnz nohome
 
push 0
pop [posx]
 
call drawfile
jmp still
; HOME }
 
 
nohome:
 
 
; END {
end_key:
cmp al,133+48
jnz noend
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
 
mov esi,eax
add eax,80+1
 
@@: dec eax
cmp eax,esi
je @f
cmp byte [eax-1],' '
jbe @b
@@:
sub eax,esi
cmp eax,80-1
jbe @f
dec eax
@@:
mov [posx],eax
 
call drawfile
jmp still
; END }
 
 
noend:
 
 
; GO_START {
cmp al,251 ; Ctrl + [
jnz no_go_to_start
 
push 0
pop [post] ; offset = 0
 
call clear_screen
call drawfile ; draw file
call draw_vertical_scroll
;call calc_scroll_size_and_pos
jmp still ; go to still
; GO_START }
 
 
no_go_to_start:
 
 
; GO_END {
cmp al,253 ; Ctrl + ]
jnz no_go_to_end
cmp [lines],30 ;to fix ctrl+] bug
jb @f
mov eax,[lines] ; eax = lines in the file
sub eax,[slines] ; eax -= lines on the screen
; imul eax,80 ; eax *= 80 (length of line)
lea eax,[eax+eax*4]
shl eax,4
mov [post],eax ; offset in the file
 
call clear_screen
call drawfile ; draw file
call draw_vertical_scroll
@@:
jmp still ; go to still
; GO_END }
 
 
no_go_to_end:
 
 
; DELETE {
cmp al,134+48
jne nodel
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ecx,eax
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
 
push ebx
 
dec ecx
dec ebx
 
 
push ecx ebx
 
push ebx
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
mov ecx,eax
 
xor eax,eax
cdq
 
pop ebx
 
dec ecx
@@:
inc ecx
mov dh,[ecx]
cmp dh,33
jb .nok
xor eax,eax
inc eax
.nok:
cmp ecx,ebx
jb @b
 
pop ebx ecx
 
@@:
inc ecx
mov dl,[ecx+1]
mov [ecx],dl
cmp ecx,ebx
jb @b
 
 
pop ebx
mov [ebx],byte 32
 
test eax,eax
jz dellinesup
 
call clear_screen
call drawfile
mov [modified],1
 
jmp still
 
dellinesup:
 
; lines -1
 
pusha
 
mov eax,[post]
cdq
mov ebx,80
div ebx
add eax,[posy]
inc eax
 
cmp eax,[lines]
jb @f
 
popa
mov [modified],1
 
jmp still
 
@@:
 
popa
 
dec [lines]
 
; lines up
 
mov [posx],dword 0
 
imul eax,[posy],80
add eax,0x80000-1
add eax,[post]
mov ebx,eax
 
push ebx
 
imul eax,[lines],80
add eax,0x80000-1
add eax,[post]
mov ecx,eax
 
pop ebx
 
@@:
mov dl,[ebx+80]
mov [ebx],dl
inc ebx
 
cmp ecx,ebx
jnz @b
 
call clear_screen
call drawfile
mov [modified],1
 
jmp still
; DELETE }
 
 
nodel:
 
 
; INSERT {
cmp al,137+48
jnz noins
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ecx,eax
; ecx = [posy]*80+0x80000+[post]+[posx]
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
; ebx = [posy]*80+0x80000+79+[post]
 
.movstr:
dec ebx
mov dl,[ebx]
mov [ebx+1],dl
cmp ecx,ebx
jb .movstr
 
mov [ecx],byte ' '
 
call invalidate_string
call drawfile
mov [modified],1
 
jmp still
; INSERT }
 
 
noins:
 
 
; BACKSPACE {
cmp al,8
jnz nobs
mov ecx,[posx]
test ecx,ecx
jz still
dec ecx
mov [posx],ecx
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ebx,eax
 
push ebx
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
 
pop ecx
 
push ebx
 
dec ecx
.movleft:
inc ecx
mov dl,[ecx+1]
mov [ecx],dl
cmp ecx,ebx
jb .movleft
 
pop ebx
mov [ebx],byte ' '
 
call invalidate_string
call drawfile
mov [modified],1
 
jmp still
; BACKSPACE }
 
 
nobs:
 
 
; TAB {
cmp eax,9 ; Tab
jne notab
 
mov eax,[posx]
cmp eax,80-1
jae still
add eax,5 ; 9 5 3
and eax,11111100b ; ...1000b, ...100b, ...10b
dec eax
mov [posx], eax
 
call drawfile
mov [modified],1
 
jmp still
; TAB }
 
 
notab:
 
 
; ADD_KEY {
push eax ; add key
 
imul eax,[posy],80
add eax,0x80000
add eax,[post]
add eax,[posx]
mov ecx,eax
 
push ecx
 
imul eax,[posy],80
add eax,0x80000+79
add eax,[post]
mov ebx,eax
 
.movright:
dec ebx
mov al,[ebx]
mov [ebx+1],al
cmp ecx,ebx
jbe .movright
 
pop ebx
 
pop eax
 
mov [ebx],al
mov edx,78
mov ecx,[posx]
cmp edx,ecx
jb noxp
inc ecx
mov [posx],ecx
noxp:
 
call invalidate_string
call drawfile
mov [modified],1
; call draw_vertical_scroll
jmp still
; ADD_KEY }
 
 
;******************************************************************************
 
start_fasm:
cmp [asm_mode],1
je @f
ret
@@:
mov esi,filename
mov edi,fasm_parameters
 
cmp byte [esi],'/'
je .yes_systree
 
mov ecx,[filename_len]
rep movsb
 
mov al,','
stosb
 
mov ecx,[filename_len]
add ecx,-4
mov esi,filename
rep movsb
 
mov al,','
stosb
 
mov [edi],dword '/RD/'
add edi,4
mov [edi],word '1/'
inc edi
inc edi
 
mov al,0
stosb
 
jmp .run
 
.yes_systree:
add esi,[filename_len]
dec esi
 
xor ecx,ecx
mov al,'/'
@@:
cmp [esi],al
je @f
dec esi
inc ecx
jmp @b
@@:
inc esi
 
push esi
push esi
push ecx
 
rep movsb
 
mov al,','
stosb
 
pop ecx
pop esi
 
add ecx,-4
rep movsb
 
mov al,','
stosb
 
pop ecx
sub ecx,filename
mov esi,filename
 
rep movsb
 
mov al,0
stosb
 
.run:
cmp [run_outfile],1
jne @f
dec edi
mov eax,',run'
stosd
mov al,0
stosb
@@:
 
mov eax,19
mov ebx,fasm_filename
mov ecx,fasm_parameters
int 0x40
ret
 
open_debug_board:
mov eax,19
mov ebx,debug_filename
xor ecx,ecx
int 0x40
ret
 
open_sysfuncs_txt:
mov eax,19
mov ebx,tinypad_filename
mov ecx,sysfuncs_filename
int 0x40
ret
 
 
empty_work_space:
; ®ç¨áâ¨âì ¢á¥
mov eax,' '
mov edi,0x80000
mov ecx,(0x300000-0x90000)/4
cld
rep stosd
mov edi,0x10000
mov ecx,0x60000/4
rep stosd
ret
 
 
clear_screen:
; ®ç¨áâ¨âì íªà ­
mov ecx,80*40
mov edi,0x78000
xor eax,eax
@@:
mov [edi],eax
add edi,4
dec ecx
jnz @b
ret
 
invalidate_string:
imul eax,[posy],80
add eax,0x78000
mov edi,eax
mov al,1
mov ecx,80/4
rep stosd
ret
 
layout:
; ᬥ­¨âì à áª« ¤ªã ª« ¢¨ âãàë
mov eax,19
mov ebx,setup
mov ecx,param_setup
int 0x40
mov eax,5
mov ebx,eax
int 0x40
call activate_me
ret
 
 
activate_me:
; 1) get info about me
mov eax,9
mov ebx,procinfo
mov ecx,-1
int 0x40
; eax = number of processes
 
; save process counter
inc eax
inc eax
mov [proccount],eax
 
mov eax,[procinfo.PID]
mov [PID],eax
 
; 2) get my process number
mov eax,9
mov ebx,procinfo
mov ecx,[proccount]
@@:
dec ecx
jz @f ; counter=0 => not found? => return
mov eax,9
int 0x40
mov edx,[procinfo.PID]
cmp edx,[PID]
jne @b
 
;found: ecx = process_number
mov eax,18
mov ebx,3
int 0x40
 
mov eax,5
mov ebx,eax
int 0x40
 
@@:
ret
 
 
 
 
; *******************************************************************
; ************************** DRAW WINDOW **************************
; *******************************************************************
 
align 4
drawwindow:
 
mov eax,12 ; WINDOW DRAW START
mov ebx,1
int 0x40
mov [menu_is_on],0
mov eax,48 ; get system colors
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
int 0x40
 
mov [sc.work],0xe0e0e0
 
xor eax,eax ; DEFINE WINDOW
mov ebx,100*65536+506 ; 496
mov ecx,75*65536+400 ;385;400 ; sum < 480 for 640x480
mov edx,[sc.work]
add edx,0x03000000
mov esi,[sc.grab]
or esi,0x80000000
mov edi,[sc.frame]
int 0x40
 
; header string
mov eax,4
mov ebx,10*65536+8
mov ecx,[sc.grab_text]
mov edx,header
mov esi,[headlen]
int 0x40
 
mov eax,9 ; get info about me
mov ebx,procinfo
or ecx,-1
int 0x40
 
mov eax,[procinfo.y_size]
 
mov [do_not_draw],1 ; do_not_draw = true
cmp eax,100
jb .no_draw ; do not draw text & buttons if height < 100
mov [do_not_draw],0 ; do_not_draw = false
add eax,-(46+47) ; 46 = y offs
cdq
mov ebx,10
div ebx
mov [slines],eax
 
cmp eax,[posy]
jnb @f
dec eax
mov [posy],eax
@@:
 
mov eax,[procinfo.y_size] ; calculate buttons position
add eax,-47
mov [dstart],eax
 
; mov eax,8 ; STRING BUTTON
; mov ebx,5*65536+57
; mov ecx,[dstart]
; add ecx,29
; shl ecx,16
; add ecx,13
; mov edx,51 ;;;;;-----string button ID=51
; mov esi,[sc.work_button]
; int 0x40
; SEARCH BUTTON
; mov ebx,(505-129)*65536+125
; mov edx,50
; mov esi,[sc.work_button]
; int 0x40
 
; mov eax,4 ; SEARCH TEXT
; mov ebx,[dstart]
; add ebx,7*65536+32
; mov ecx,[sc.work_button_text]
; mov edx,searcht
; mov esi,searchtl-searcht
; int 0x40
 
 
mov eax,13 ; BAR STRIPE
mov ebx,5*65536+497
mov ecx,[dstart]
shl ecx,16
add ecx,30 ;15
 
mov edx,0x00aaaaaa
int 0x40
 
; mov eax,4 ; FIRST TEXT LINE (POSITION...)
; mov ebx,12*65536
; add ebx,[dstart]
; add ebx,38 ;18
; mov ecx,[sc.work_button_text]
; mov edx,htext2
; mov esi,htextlen2-htext2
; int 0x40
 
 
call drawfile
 
; mov eax,[dstart]
 
; add eax,31
; mov [ya],eax
; mov [addr],search_string
; call print_text
 
.no_draw:
call draw_win_menu
 
call draw_vertical_scroll
 
mov eax,12 ; WINDOW DRAW END
mov ebx,2
int 0x40
 
ret
 
 
 
 
; **********************************
; *********** DRAWFILE ***********
; **********************************
 
drawfile:
;---------------
cmp [menu_is_on],1
jne .ff
call drawwindow
.ff:
;---------------
mov [next_not_quote],1
mov [next_not_quote2],1
 
mov eax,[post] ; print from position
 
pusha
 
mov edi,[post]
mov [posl],edi
 
mov ebx,8*65536+46 ; letters (46 = y offs)
xor ecx,ecx
 
mov edx,0x80000
add edx,eax
mov edi,edx
 
imul esi,[slines],80
add edi,esi
 
 
nd:
 
pusha
 
mov edx,ebx
mov edi,ebx
add edi,(6*65536)*80
 
wi1:
 
 
; draw ?
 
 
pusha
 
push ecx
 
imul eax,[posx],6
add eax,8
shl eax,16
mov ecx,eax
 
;  ecx = ([posx]*6+8)<<16
 
imul eax,[posy],10
add eax,46 ; y offs
add eax,ecx
 
;  eax = [posy]*10+46+ecx
 
pop ecx
 
cmp edx,eax
jnz drwa
 
mov eax,0x7ffff
call check_pos
jmp drlet
 
drwa:
 
popa
 
 
pusha
 
imul eax,[posxm],6
add eax,8
shl eax,16
mov ecx,eax
 
imul eax,[posym],10
add eax,46 ; y offs
add eax,ecx
 
cmp edx,eax
jnz drwa2
 
mov eax,0x7ffff
call check_pos
jmp drlet
 
drwa2:
 
popa
 
pusha
 
mov eax,0x78000 ; screen
add eax,[posl] ; screen+abs
sub eax,[post] ; eax = screen+abs-base = y*80+x + screen
 
mov edx,0x80000 ; file
add edx,[posl] ; edx = absolute
mov bl,[edx] ; in the file
 
call check_pos
 
mov cl,[eax] ; on the screen
cmp bl,cl
jnz drlet
 
popa
 
jmp nodraw
 
 
; draw letter
 
 
drlet:
 
mov [eax],bl ; mov byte to the screen
mov [tmpabc],bl
popa ; restore regs
 
;!!!!!!!!!!!!
 
cmp [tmpabc],' '
je @f
call draw_letter
jmp nodraw
@@:
call clear_char
 
nodraw:
 
inc [posl]
 
add edx,6*65536
cmp edx,edi
jz wi3
jmp wi1
 
wi3:
 
popa
 
add ebx,10
add edx,80
cmp edi,edx
jbe nde
jmp nd
 
nde:
 
mov eax,[posx]
mov ebx,[posy]
 
mov [posxm],eax
mov [posym],ebx
 
popa
 
ret
 
stText = 0
stInstr = 1
stReg = 2
stNum = 3
stQuote = 4
stComment = 5
stSymbol = 6
 
align 4
 
clear_char:
 
pusha
mov ebx,[sc.work]
 
push ecx
 
imul eax,[posx],6
add eax,8
shl eax,16
mov ecx,eax
 
imul eax,[posy],10
add eax,46 ; 26
add eax,ecx
 
pop ecx
cmp edx,eax
jnz @f
mov ebx,0xffffff ; light blue 0x00ffff
@@:
 
; draw bar
push ebx
mov eax,13
mov ebx,edx
mov bx,6
mov ecx,edx
shl ecx,16
add ecx,10
pop edx
int 0x40
popa
ret
 
align 4
 
; CHECK_POSITION {
check_pos:
cmp [asm_mode],1
je @f
 
mov [d_status],stText
ret
 
@@:
pushad
 
; COMMENT TERMINATOR
cmp [d_status],stComment
jnz @f
mov eax,[posl]
sub eax,[post]
cdq
mov ebx,80
div ebx
test edx,edx
jnz end_check_pos
mov [d_status],stText
@@:
 
; QUOTE TERMINATOR B
cmp [next_not_quote],1
jne @f
mov [d_status],stText
@@:
 
mov eax,[posl]
add eax,0x80000
mov edx,eax
mov al,[eax]
 
; QUOTE TERMINATOR A
cmp [d_status],stQuote
jnz @f
cmp al,[quote]
jne end_check_pos
mov [next_not_quote],1
jmp end_check_pos
@@:
mov [next_not_quote],0
 
; START QUOTE 1
cmp al,"'"
jne @f
mov [d_status],stQuote
mov [quote],al
jmp end_check_pos
@@:
 
; START QUOTE 2
cmp al,'"'
jne @f
mov [d_status],stQuote
mov [quote],al
jmp end_check_pos
@@:
 
; START COMMENT
cmp al,';'
jne @f
mov [d_status],stComment
jmp end_check_pos
@@:
 
; NUMBER TERMINATOR
cmp [d_status],stNum
jne nonumt
mov ecx,23
@@:
dec ecx
jz nonumt
cmp al,[symbols+ecx]
jne @b
 
nonumt1:
mov [d_status],stText
nonumt:
 
; START NUMBER
cmp [d_status],stNum
je end_check_pos
cmp al,'0'
jb nonum
cmp al,'9'
ja nonum
mov bl,[edx-1]
mov ecx,23
@@:
dec ecx
jz nonum
cmp bl,[symbols+ecx]
jne @b
@@:
mov [d_status],stNum
jmp end_check_pos
nonum:
 
; SYMBOL
mov esi,symbols
mov ecx,21
@@:
cmp byte [esi],al
je @f
dec ecx
jz nosymbol
inc esi
jmp @b
@@:
mov [d_status],stSymbol
jmp end_check_pos
 
nosymbol:
mov [d_status],stText
 
end_check_pos:
popad
ret
; CHECK_POSITION }
 
 
;;;;;;;;;;;;;;;;;
;; DRAW LETTER ;;
;;;;;;;;;;;;;;;;;
draw_letter:
 
call clear_char
 
pusha
 
mov ebx,edx ; x & y
 
mov eax,[d_status]
mov ecx,[eax*4+color_tbl]
mov eax,4
 
xor esi,esi
inc esi
mov edx,0x80000
mov edi,[posl]
add edx,edi
int 0x40
 
popa
 
ret
 
 
; ********************************************
; **************** SAVEFILE ****************
; ********************************************
save_file:
mov esi,0x80000
mov edi,0x10000
or ecx,-1
.new_string:
inc ecx
call save_string
cmp ecx,[lines]
jb .new_string
 
sub edi,0x10004 ; why???
mov [filelen],edi
 
cmp byte [filename],'/'
je .systree_save
 
mov eax,33
mov ebx,filename
mov ecx,0x10000
mov edx,[filelen]
xor esi,esi
int 0x40
 
test eax,eax
je .finish
; call file_not_found
call disk_is_full
;==============================
jmp .finish
 
.systree_save:
mov eax,[filelen]
mov [fileinfo_write+8],eax
 
mov esi,filename
mov edi,pathfile_write
mov ecx,50
cld
rep movsb
 
mov eax,58
mov ebx,fileinfo_write
int 0x40
cmp eax,0
je .finish
call disk_is_full
.finish:
call draw_window_for_dialogs
mov [modified],0
ret
 
save_string:
push ecx
push esi
mov eax,esi
mov ebx,eax
add ebx,79
.countlen:
cmp ebx,eax
jb .endcount
cmp byte [ebx],' '
jne .endcount
dec ebx
jmp .countlen
.endcount:
inc ebx
sub ebx,eax
 
mov ecx,ebx
jecxz .endcopy
.copystr:
mov al,[esi]
mov [edi],al
inc esi
inc edi
dec ecx
jnz .copystr
.endcopy:
 
mov eax,0x0a0d
stosw
 
pop esi
add esi,80
pop ecx
ret
 
 
 
; ********************************************
; **************** LOADFILE ****************
; ********************************************
 
loadhdfile:
 
mov esi,filename
mov edi,pathfile_read
mov ecx,250 ;50
cld
rep movsb
 
mov eax,58
mov ebx,fileinfo_read
int 0x40
 
xchg eax,ebx
inc eax
test ebx,ebx ;errorcode=0 - ok
je file_found
cmp ebx,6 ;errorcode=5 - ok
je file_found
call file_not_found
ret
 
 
loadfile1:
 
mov eax,6 ; 6 = open file
mov ebx,filename
xor ecx,ecx
mov edx,16800
mov esi,0x10000
int 0x40
 
inc eax ; eax = -1 -> file not found
jnz file_found ;strannaya proverka (Ed)
 
call file_not_found
ret
 
 
file_found:
dec eax
; eax = file size
jz .finish
mov [filesize],eax
 
mov edi,0x80000 ; clear all
@@:
mov [edi],byte ' '
inc edi
cmp edi,0x2effff
jnz @b
 
mov [lines],0
mov edi,0x10000
mov ebx,0x80000
 
; edi = from
; ebx = to
; eax = filesize
 
.new_char:
mov cl,[edi] ; get_char();
cmp cl,13 ; if (char==13)
je .new_str1 ; goto .new_str1;
cmp cl,10 ; if (char==10)
je .new_str2 ; goto .new_str2;
mov [ebx],cl ; store_char();
inc ebx ; dest++;
.back:
inc edi ; src++;
dec eax ; counter--;
jnz .new_char ; if (counter!=0) goto .new_char;
 
.finish:
inc [lines] ; [lines]++;
ret
 
.new_str1:
pusha
mov eax,ebx ; eax = destination
add eax,-0x80000 ; eax = offset
cdq
mov ecx,80
div ecx ; offset /= 80;
test edx,edx ; if not the first char in the string
jne @f ; go forward
test eax,eax ; if first line
je @f ; go forward
cmp [edi-1],byte 10; if previous char != 10 continue without line feed
jne .contin
@@:
inc eax ; offset++;
imul eax,80 ; offset *= 80;
add eax,0x80000
mov [esp+4*4],eax ; to ebx
.contin:
popa
inc edi ; do not look on the next char (10)
dec eax ; counter--;
inc [lines] ; [lines]++;
jmp .back
 
 
.new_str2:
pusha
mov eax,ebx
add eax,-0x80000
cdq
mov ecx,80
div ecx
inc eax
imul eax,80
add eax,0x80000
mov [esp+4*4],eax ; to ebx
popa
inc [lines]
jmp .back
 
 
file_not_found:
mov eax,55 ; beep
mov ebx,eax
mov esi,error_beep
int 0x40
mov [lines],1 ; open empty document
 
mov [to_return2],1
call openerror
 
ret
 
disk_is_full:
mov eax,55 ; beep
mov ebx,eax
mov esi,error_beep
int 0x40
mov [to_return2],1
call saveerror
mov [error2_found],1
ret
 
 
; *****************************
; ****** WRITE POSITION ******
; *****************************
 
writepos:
 
cmp [do_not_draw],1 ; return if drawing is not permitted
jne @f
ret
@@:
 
pusha
 
mov eax,[posx]
inc eax
cdq
mov ebx,10
div ebx
add al,'0'
add dl,'0'
mov [htext2+ 9],al
mov [htext2+10],dl
 
mov eax,[post]
cdq
mov ebx,80
div ebx
mov [real_posy],eax ;=====!!!!!!!!!
 
add eax,[posy]
inc eax
mov ebx,10
cdq
div ebx
add dl,'0'
mov [htext2+16],dl ; 00001
cdq
div ebx
add dl,'0'
mov [htext2+15],dl ; 00010
cdq
div ebx
add dl,'0'
mov [htext2+14],dl ; 00100
cdq
div ebx
add dl,'0'
add al,'0'
mov [htext2+13],dl ; 01000
mov [htext2+12],al ; 10000
 
 
mov eax,[lines] ; number of lines
cdq
mov ebx,10
div ebx
add dl,'0'
mov [htext2+31],dl ; 0001
cdq
div ebx
add dl,'0'
mov [htext2+30],dl ; 0010
cdq
div ebx
add dl,'0'
mov [htext2+29],dl ; 0100
cdq
div ebx
add dl,'0'
add al,'0'
mov [htext2+28],dl
mov [htext2+27],al ; 10000
 
; €„Ž › Ž’Ž€†€’œ €‘Š‹€„Š“ Š‹€‚ˆ€’“›!
; mov [htext2+42], word 'RU'
 
; mov eax,13 ; draw bar
; mov ebx,5*65536+38*6
; mov ecx,[dstart]
; shl ecx,16
; add ecx,15
; mov edx,[sc.work_graph]
; int 0x40
 
mov eax,13 ; BAR STRIPE
mov ebx,5*65536+497
mov ecx,[dstart]
add ecx,29;30 ;15
shl ecx,16
add ecx,14
mov edx,[sc.work_graph]
int 0x40
 
mov eax,4 ; write position
mov ebx,12*65536
mov bx,word [dstart]
add ebx,33 ;18
mov ecx,[sc.work_button_text]
mov edx,htext2
mov esi,38
int 0x40
 
cmp [modified],1
jne no_mod
putlabel 270,386,'ˆ‡Œ……',[sc.work_button_text]
no_mod:
popa
 
ret
 
;-----------------------------
; search window
;-----------------------------
search_window:
 
mov eax,13
mov ebx,55*65536+380
mov ecx,100*65536+60
mov edx,[sc.work_graph]
int 0x40
 
mov eax,38
mov ebx,55*65536+435
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,55*65536+55
mov ecx,100*65536+160
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,435*65536+435
mov ecx,100*65536+160
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,55*65536+435
mov ecx,160*65536+160
mov edx,cl_White
int 0x40
 
 
drawlbut 375,110,50,15,'®¨áª',50,[sc.work_button],[sc.work_button_text]
drawlbut 375,130,50,15,'Žâ¬¥­ ',94,[sc.work_button],[sc.work_button_text]
 
call read_string
 
; add eax,31
; mov [ya],eax
; mov [addr],search_string
; call print_text
 
 
 
jmp search
 
string_not_found:
mov eax,13
mov ebx,150*65536+200
mov ecx,100*65536+70
mov edx,[sc.work_graph] ;0x00dd9438 ;0x00ff7512
int 0x40
 
mov eax,38
mov ebx,150*65536+350
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+350
mov ecx,170*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+150
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,350*65536+350
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
 
 
putlabel 195,120,'‘âப  ­¥ ­ ©¤¥­­ !',cl_White
 
drawlbut 235,140,30,15,'Žª',94,[sc.work_button],cl_White
 
ret
 
read_string:
 
push eax
;----------------
mov eax,40
mov ebx,00000000000000000000000000000111b
int 0x40
;----------------
pop eax
 
; cmp al,51
; jz .f2
; ret
 
.f2:
mov [addr],dword search_string
mov eax,[dstart]
add eax,17+14
mov [ya],eax
mov [case_sens],1
 
.rk:
 
mov edi,[addr]
 
mov eax,[addr]
mov eax,[eax-4]
mov [temp],eax
 
add edi,eax
 
call print_text
 
.waitev:
mov eax, 10
int 0x40
cmp eax, 2
jne .read_done
int 0x40
shr eax, 8
 
cmp al, 13 ; enter
je .read_done
 
cmp al,27
jne ._f
jmp red
._f:
cmp al, 192 ; Ctrl + space
jne .noclear
 
xor eax, eax
mov [temp], eax
mov edi, [addr]
mov [edi-4], eax
mov ecx, 49
cld
rep stosb
mov edi, [addr]
call print_text
jmp .waitev
 
.noclear:
 
cmp al, 8 ; backspace
jnz .nobsl
cmp [temp], 0
jz .waitev
dec [temp]
mov edi, [addr]
add edi, [temp]
mov [edi], byte 0
 
mov eax,[addr]
dec dword [eax-4]
 
call print_text
jmp .waitev
 
.nobsl:
cmp [temp],50
jae .read_done
 
; CONVERT CHAR TO UPPER CASE:
cmp al, ' ' ; below "space" - ignore
jb .waitev
cmp [case_sens], 1 ; case sensitive?
je .keyok
cmp al, 'a'
jb .keyok
cmp al, 'z'
ja .keyok
sub al, 32
.keyok:
 
mov edi,[addr]
add edi,[temp]
mov [edi],al
 
inc [temp]
 
mov eax,[addr]
inc dword [eax-4]
call print_text
 
cmp [temp],50
jbe .waitev
 
.read_done:
mov ecx,50
sub ecx,[temp]
mov edi,[addr]
add edi,[temp]
xor eax,eax
cld
rep stosb
 
mov [temp],987
 
call print_text
call mask_events
ret
 
 
print_text:
 
pusha
 
mov eax,13
mov ebx,64*65536+50*6+2
; mov ecx,[ya]
; shl ecx,16
; add ecx,12
mov ecx,110*65536+12
mov edx,[sc.work]
int 0x40
 
mov edx,[addr]
mov esi,[edx-4]
mov eax,4
mov ebx,65*65536+112 ;2
; add ebx,[ya]
mov ecx,[color_tbl+0]
int 0x40
 
cmp [temp],50
ja @f
 
; draw cursor
; {
; mov eax,[ya]
mov eax,18*65536+102 ;65
mov ebx,eax
shl eax,16
add eax,ebx
add eax,10
mov ecx,eax
 
mov eax,[temp]
; imul eax,6
lea eax,[eax+eax*2]
shl eax,1
add eax,65
mov ebx,eax
shl eax,16
add ebx,eax
 
mov eax,38
mov edx,[color_tbl+0]
int 0x40
; }
 
@@:
popa
 
ret
 
 
 
; mov eax,8 ; STRING BUTTON
; mov ebx,5*65536+57
; mov ecx,[dstart]
; add ecx,29
; shl ecx,16
; add ecx,13
; mov edx,51 ;;;;;-----string button ID=51
; mov esi,[sc.work_button]
; int 0x40
; SEARCH BUTTON
; mov ebx,(505-129)*65536+125
; mov edx,50
; mov esi,[sc.work_button]
; int 0x40
 
; mov eax,4 ; SEARCH TEXT
; mov ebx,[dstart]
; add ebx,7*65536+32
; mov ecx,[sc.work_button_text]
; mov edx,searcht
; mov esi,searchtl-searcht
; int 0x40
 
 
 
; ****************************
; ******* READ STRING ********
; ****************************
goto_string:
 
mov [num_goto_string],0
call read_str_num
mov eax,[num_goto_string]
cmp eax,[lines]
ja .leave
 
;---------------
mov [posy],0
call goto_pos
 
.leave:
call draw_window_for_dialogs
call mask_events
 
jmp still
 
 
read_str_num:
push eax
;----------------
mov eax,40
mov ebx,00000000000000000000000000000111b
int 0x40
;----------------
pop eax
 
mov eax,13
mov ebx,100*65536+100
mov ecx,70*65536+60
mov edx,[sc.work_button]
int 0x40
 
 
mov eax,38
mov ebx,100*65536+200
mov ecx,70*65536+70
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,100*65536+200
mov ecx,130*65536+130
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,100*65536+100
mov ecx,70*65536+130
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,200*65536+200
mov ecx,70*65536+130
mov edx,cl_White
int 0x40
 
 
 
putlabel 105,75,'GoTo Line #',cl_White
mov eax,13
mov ebx,110*65536+40
mov ecx,90*65536+12;[ya]
mov edx,[sc.work]
int 0x40
 
outcount [num_goto_string],112,92,cl_Black,6*65536
drawlbut 110,105,40,15,'GoTo',93,cl_Grey,cl_Black
drawlbut 153,105,40,15,'Cancel',94,cl_Grey,cl_Black
.waitev:
mov eax, 10
int 0x40
; cmp eax,6
; je .mouse
cmp eax,3
je .but
cmp eax, 2
; jne .read_done
jne .waitev
int 0x40
shr eax, 8
 
cmp al, 13 ; enter
je .read_done
cmp al,27
je goto_string.leave
cmp al, 8 ; backspace
jnz .nobsl
 
xor edx,edx
 
mov eax,[num_goto_string]
mov ebx,dword 10
div ebx
mov [num_goto_string],eax
call print_text2
jmp .waitev
 
;.mouse:
;mov eax,37
;mov ebx,2
;int 0x40
;cmp eax,2
;je goto_string.leave
;jmp .waitev
 
.but:
mov eax,17
int 0x40
cmp ah,94
je goto_string.leave
cmp ah,93
je .read_done
jmp .waitev
 
 
.nobsl:
xor ecx,ecx
xor edx,edx
 
sub al,48
mov cl,al
 
mov eax,[num_goto_string]
cmp eax,99999
ja .read_done
mov ebx,10
mul ebx
add eax,ecx
mov [num_goto_string],eax
 
call print_text2
jmp .waitev
 
.read_done:
mov eax,[num_goto_string]
dec eax
mov [num_goto_string],eax
call print_text2
ret
 
 
print_text2:
 
pusha
 
mov eax,13
mov ebx,110*65536+40
mov ecx,90*65536+12;[ya]
mov edx,[sc.work]
int 0x40
 
outcount [num_goto_string],112,92,cl_Black,6*65536
popa
 
ret
 
;******************************************************************************
calc_scroll_size_and_pos:
 
;cmp [menu_is_on],0
;je ._ff
;call drawwindow
;mov [menu_is_on],0
;._ff:
 
cmp [lines],30
jbe .lines_less_30
 
xor edx,edx
mov eax,[post]
mov ebx,80
div ebx
add eax,[posy]
;add eax,[slines]
 
;checking for bug
mov ebx,[lines]
sub ebx,30
 
cmp eax,ebx
ja .f
mov [VScroll_1+16],eax
jmp .ff
.f:
mov [VScroll_1+16],ebx
 
.ff:
;---------------------
mov eax,[lines]
sub eax,30 ;---max=lines-30
mov [VScroll_1+12],eax
jmp .leave
 
.lines_less_30:
 
mov [VScroll_1+16],dword 0
mov [VScroll_1+12],dword 1
 
.leave:
 
ret
;============Draw vertical scroll bar=========
draw_vertical_scroll:
call calc_scroll_size_and_pos
;========================
xor ecx,ecx ;start at top of controls list
Draw_Controls_Loop: ;Redraw Controls Loop
mov ebp, [App_Controls+ecx] ;get controls data location
or ebp,ebp ;is this the last control?
jz Draw_Controls_Done ;
call dword [App_Controls+ecx+4] ;call controls draw function
add ecx, 12 ;get next control
jmp Draw_Controls_Loop ;loop till done
Draw_Controls_Done: ;all done
;========================
 
mov eax,38
mov ebx,488*65536+488
mov ecx,43*65536+388
mov edx,0x00000000
int 0x40
ret
 
mouse_info:
;call
mov eax, 37 ;get mouse cordinates
mov ebx, 1 ;
int 0x40 ;
mov ecx, eax ;
push ecx ;
mov eax, 37 ;get mouse buttons
mov ebx, 2 ;
int 0x40 ;
;------------------
; if menu is on - then we need to redraw window before continue
cmp eax,1
jne ._f1
 
pusha
cmp [menu_is_on],0
je ._ff
call drawwindow
mov [menu_is_on],0
._ff:
popa
 
._f1:
;------------------
cmp [mouseb], eax ;compare old mouse states to new states
jne redraw_mouse_info ;
cmp [mousey], cx ;
jne redraw_mouse_info ;
shr ecx, 16 ;
cmp [mousex], cx ;
jne redraw_mouse_info ;
pop ecx ;
ret ;return if no change in states
redraw_mouse_info:
pop ecx
mov [mouseb], eax ;save new mouse states
mov dword [mousey], ecx
xor ecx, ecx
Check_Mouse_Over_Controls_Loop:
mov ebp, [App_Controls+ecx]
or ebp, ebp
jz Check_Mouse_Over_Controls_Loop_done
 
movzx eax,word [ebp+2]
cmp ax, [mousex]
ja mouse_not_on_control
movzx eax,word [ebp+6]
cmp ax, [mousey]
ja mouse_not_on_control
movzx eax,word [ebp]
add ax, [ebp+2]
cmp ax, [mousex]
jb mouse_not_on_control
movzx eax,word [ebp+4]
add ax, [ebp+6]
cmp ax, [mousey]
jb mouse_not_on_control
call dword [App_Controls+ecx+8]
;------------------------------
cmp [mouseb],1
jne mouse_not_on_control
mov eax,[VScroll_1+16]
call goto_pos
;------------------------------
 
mouse_not_on_control:
add ecx, 12
jmp Check_Mouse_Over_Controls_Loop
Check_Mouse_Over_Controls_Loop_done:
 
ret
;******************************************************************************
goto_pos:
;pusha
 
mov ecx,eax ;save new position number in ecx for future
 
cmp [lines],30 ;check for 'cursor' bug
jbe .lines_less_30
;---------------
 
mov edx,[lines] ;if new pos is > than (lines-30)
sub edx,30
 
cmp eax,edx
ja .f1
jmp .ff
 
.f1:
mov eax,edx ;than newpos is = (lines-30)
 
sub ecx,edx ;and posY=newpos-(lines-30)
mov [posy],ecx
 
.ff:
 
;-----------------------
;in eax must be string number
mov ecx,80
mul ecx
 
; add eax,[slines]
; sub
;------------------------
mov [post],eax
 
.lines_less_30:
call clear_screen
call drawfile
;popa
ret
;******************************************************************************
mask_events:
mov eax,40
mov ebx,00100111b
int 0x40
ret
;******************************************************************************
main_cursor_move:
;call drawwindow
sub [mouse_x],7
sub [mouse_y],45
 
xor edx,edx
mov eax,[mouse_x]
mov ebx,6
div ebx ;eax=result
mov [posx],eax
 
xor edx,edx
mov eax,dword [mouse_y]
mov ebx,dword 10
div ebx ;eax=result=new posY
 
;error checking ------
cmp [lines],dword 1 ;for "1st line" bug
je ._do_nothing
 
mov ebx,[lines]
sub ebx,dword 1
 
cmp eax,ebx ;[lines]
ja ._do_nothing
 
;----------------------
mov [posy],eax
 
._do_nothing:
call clear_screen
call drawfile
call draw_vertical_scroll
ret
 
;******************************************************************************
make_fast_so:
;===========================
; 1) get info about me
mov eax,9
mov ebx,procinfo
mov ecx,-1
int 0x40
; eax = number of processes
 
; save process counter
inc eax
inc eax
mov [proccount],eax
 
mov eax,[procinfo.PID]
mov [PID],eax
;==========================
 
 
mov eax,51
mov ebx,1
mov ecx,fast_so_thread_start
mov edx,so_stack
int 0x40
ret
;******************************************************************************
 
;fast save & fast open
draw_fastso_window:
startwd
colorwindow 120,100,454,70,window_Type1+0x00cccccc,0x00cccccc,cl_Black
 
call draw_string00
drawlbut 10,40,30,20,'Save',17,cl_Grey,cl_Black
 
drawlbut 50,40,30,20,'Open',18,cl_Grey,cl_Black
 
drawlbut 90,40,37,20,'Close',19,cl_Grey,cl_Black
endwd
ret
 
draw_string00:
mov ebx,10*65536+433
mov ecx,10*65536+20
mov edx,0x00ffffff
mov eax,13
int 0x40
 
push eax
mov eax,6*65536
mul dword [pos00]
add eax,10*65536+6
mov ebx,eax
pop eax
mov edx,0x6a73d0
int 0x40
 
mov eax,4
mov ebx,12*65536+17
mov ecx,cl_Black ;0x00000000
mov edx,mypath ;filename ;path
mov esi,71 ;200
int 0x40
ret
 
fast_so_thread_start:
;copy filename to mypath
cld
mov esi,filename
mov edi,mypath
mov ecx,71 ;200
rep movsb
mov edi,mypath
mov ecx,71 ;200
xor eax,eax
repne scasb
;end copy
call draw_fastso_window
 
fastso_still:
wtevent fred,fkey,fbut
jmp fastso_still
 
fred:
call draw_fastso_window
jmp fastso_still
 
;====KEY
fkey:
 
mov eax,2
int 0x40
 
cmp ah,179
jne noright00
mov eax,[pos00]
cmp eax,70 ;41
ja fastso_still
inc eax
mov [pos00],eax
call draw_string00
jmp fastso_still
noright00:
cmp ah,176
jne noleft00
mov eax,[pos00]
test eax,eax
je fastso_still
dec eax
mov [pos00],eax
call draw_string00
jmp fastso_still
noleft00:
cmp ah,182
jne nodelete00
call shiftback00
call draw_string00
jmp fastso_still
nodelete00:
cmp ah,8
jne noback00
mov eax,[pos00]
test eax,eax
je fastso_still
dec eax
mov [pos00],eax
call shiftback00
call draw_string00
jmp fastso_still
noback00:
enter00:
 
cmp ah,19 ;ctrl+s
je fast_save
cmp ah,15 ;ctrl+o
je fast_open
 
cmp ah,27 ;esli escape
jne noesc00
jmp closethis ;to zakrivaem okno i nifiga ne delayem
 
noesc00:
cmp dword [pos00],71 ;200 ;42
jae fastso_still ;if pos>71 then jump to still
 
;============letters==================
;~~~~~~~TEST CODE~~~~~~~~~
; upper case
shr eax,8
cmp eax,dword 31
jbe no_lit
cmp eax,dword 95
jb capital
sub eax,32
capital:
;~~~~~~~~~~~~~~~~~~~~~~~~~
mov edi,mypath ;filename ;mypath ;**************PATHNAME
add edi,71 ;200 ;count of letters
mov esi,edi
dec esi
mov ecx,71 ;200 ;again???
sub ecx,[pos00]
std
rep movsb
 
;shr eax,8
mov esi,mypath ;filename ;*************PATH AGAIN
add esi,[pos00]
mov byte [esi],al
inc dword [pos00]
call draw_string00
 
no_lit:
jmp fastso_still
;===============================
shiftback00:
mov edi,mypath ;filename ;******PATH
add edi,[pos00]
mov esi,edi
inc esi
mov ecx,71 ;200 ; count???
sub ecx,[pos00]
cld
rep movsb
ret
 
;******************************************************************************
 
;====button
fbut:
mov eax,17
int 0x40
cmp ah,17
je fast_save
cmp ah,18
je fast_open
cmp ah,19
je closethis
jmp fastso_still
;******************************************************************************
;******************************************************************************
 
fast_open:
call path_copy
call set_title
mov [to_return],1
call do_load_file
jmp closethis
fast_save:
call path_copy
call save_file
call set_title
;call copy_fpath_s
closethis:
mov [to_return],0
cmp [error_found],1
je @f
call activate_main
@@:
mov [error_found],0
close
 
 
activate_main:
mov eax,9
mov ebx,procinfo
mov ecx,[proccount]
@@:
dec ecx
jz @f ; counter=0 => not found? => return
mov eax,9
int 0x40
mov edx,[procinfo.PID]
cmp edx,[PID]
jne @b
 
;found: ecx = process_number
mov eax,18
mov ebx,3
int 0x40
 
mov eax,5
mov ebx,eax
int 0x40
 
@@:
ret
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
doyouwannasave:
;******************************************************************************
cmp [modified],0
je newfile
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep1
int 0x40
delay 4
mov eax,55 ; beep
mov ebx,eax
mov esi,save_beep2
int 0x40
 
mov eax,13
mov ebx,150*65536+200
mov ecx,100*65536+70
mov edx,[sc.work_graph] ;0x00dd9438 ;0x00ff7512
int 0x40
 
mov eax,38
mov ebx,150*65536+350
mov ecx,100*65536+100
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+350
mov ecx,170*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,150*65536+150
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
mov eax,38
mov ebx,350*65536+350
mov ecx,100*65536+170
mov edx,cl_White
int 0x40
 
 
putlabel 190,120,'‘®åà ­¨âì ¤®ªã¬¥­â?',cl_White
 
drawlbut 170,140,30,15,'„ ',46,[sc.work_button],cl_White
drawlbut 230,140,30,15,'¥â',45,[sc.work_button],cl_White
drawlbut 290,140,45,15,'Žâ¬¥­ ',47,[sc.work_button],cl_White
 
mov [exit_wnd_on],1
jmp still
;-------------
newfile:
;if filename is not NEWDOC## than change it to it!
mov eax,dword [orig_filename]
cmp dword [filename],eax ;[orig_filename]
je @f
cld
mov esi,orig_filename
mov edi,filename
mov ecx,71 ;50
rep movsb
mov edi,filename
mov ecx,71 ;50
xor eax,eax
repne scasb
sub edi,filename
dec edi
mov [filename_len],edi
 
@@:
 
call change_fname
call set_title
call draw_window_for_dialogs
call empty_work_space
mov [lines],1
jmp do_load_file.restorecursor
 
change_fname:
cmp [filename+7],'9'
jne addfname
cmp [filename+6],'9'
je error_creating_new_file
mov [filename+7],'0'
add [filename+6],0x1
jmp leavenow
addfname:
add [filename+7],0x1
leavenow:
ret
 
set_title:
cmp [error2_found],1
je no_set_title
mov esi, filename
mov edi, header
mov ecx, [filename_len]
mov eax, ecx
add eax, 10
mov [headlen], eax
cld
rep movsb
 
mov [edi], dword ' - '
add edi, 3
mov esi, htext
mov ecx, htext.size
rep movsb
 
call drawwindow
no_set_title:
mov [error2_found],0
ret
 
draw_window_for_dialogs:
call clear_screen
call drawwindow
ret
 
copy_fpath:
call mask_events
call path_copy
call set_title
call draw_window_for_dialogs
jmp do_load_file
 
copy_fpath_s:
call mask_events
call path_copy
call save_file
call set_title
call draw_window_for_dialogs
jmp still
 
path_copy:
cld
mov esi,mypath
mov edi,filename
mov ecx,250 ;71 ;50
rep movsb
mov edi,filename
mov ecx,250 ;71 ;50
xor eax,eax
repne scasb
sub edi,filename
dec edi
mov [filename_len],edi
ret
 
openerror:
mov eax,360
mov ebx,openerrtext
mov ecx,1
call alert_box
 
cmp [to_return2],1
jne jmp_to_still
mov [to_return2],0
mov [error_found],1
call mask_events
 
ret
 
saveerror:
mov eax,390
mov ebx,saveerrtext
mov ecx,1
call alert_box
cmp [to_return2],0
je jmp_to_still
mov [to_return2],0
mov [error_found],1
call mask_events
ret
;jmp still
jmp_to_still:
call mask_events
jmp still
 
error_creating_new_file:
mov eax,200
mov ebx,newfileerror
mov ecx,1
call alert_box
jmp still
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;MENU;;;;;;;;;;;;;;;;;;;;;;
draw_win_menu:
 
;mov eax,8
;mov ebx,145*65536+276
;mov ecx,22*65536+15
;mov edx,00100000000000000000000000001111b
;mov esi,0x00aaaaaa
;int 0x40
 
mov eax,13
mov ebx,5*65536+497
mov ecx,22*65536+17
mov edx,[sc.work_graph] ;0x00999999
int 0x40
mov ecx,39*65536+5
mov edx,0x00aaaaaa
int 0x40
 
drawlbut 5,22,70,15,'” ©«',97,[sc.work_button],[sc.work_button_text]
drawlbut 75,22,70,15,'Š®¤',98,[sc.work_button],[sc.work_button_text]
drawlbut 145,22,70,15,'’¥ªáâ',96,[sc.work_button],[sc.work_button_text]
drawlbut 431,22,70,15,'‘¯à ¢ª ',99,[sc.work_button],[sc.work_button_text]
 
ret
 
draw_win_menu_file:
call clear_screen
call drawwindow
;mov eax,13
;mov ebx,5*65536+71
;mov ecx,35*65536+90
;mov edx,[sc.grab_button];0x00999999
;int 0x40
;mov eax,38
;mov ebx,5*65536+35
;mov ecx,40*65536+47
;mov edx,0x00ff0000
;int 0x40
mov [menu_is_on],1
 
drawlbut 5,38,70,15,'®¢®¥ ®ª­®',100,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,53,70,15,'®¢ë©',101,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,68,70,15,'‘®åà ­¨âì',2,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,83,70,15,'‘®åà. ª ª',102,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,98,70,15,'Žâªàëâì',103,[sc.grab_button],[sc.grab_button_text]
drawlbut 5,113,70,15,'‚ë室',104,[sc.grab_button],[sc.grab_button_text]
jmp still
 
draw_win_menu_code:
call clear_screen
call drawwindow
drawlbut 75,38,70,15,'Š®¬¯¨«.',10000,[sc.grab_button],[sc.grab_button_text]
drawlbut 75,53,70,15,'‡ ¯ãáâ¨âì',10001,[sc.grab_button],[sc.grab_button_text]
drawlbut 75,68,70,15,'„®áª  ®â«.',10002,[sc.grab_button],[sc.grab_button_text]
drawlbut 75,83,70,15,'SysFunc',10003,[sc.grab_button],[sc.grab_button_text]
mov [menu_is_on],1
jmp still
 
draw_win_menu_text:
call clear_screen
call drawwindow
drawlbut 145,38,70,15,'GoTo Line#',95,[sc.grab_button],[sc.grab_button_text]
drawlbut 145,53,70,15,' ©â¨',92,[sc.grab_button],[sc.grab_button_text]
drawlbut 145,68,70,15,' ©â¨ ¤ «¥¥',50,[sc.grab_button],[sc.grab_button_text]
mov [menu_is_on],1
jmp still
 
new_pad_wnd:
mov eax,19
mov ebx,tinypad_filename
mov ecx,0
int 0x40
jmp still
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
openerrtext db 'Žè¨¡ª  ®âªàëâ¨ï ä ©«  ¨«¨ ®âªàë⨥ ®â¬¥­¥­®!',0
saveerrtext db 'Žè¨¡ª  á®åà ­¥­¨ï ä ©«  ¨«¨ á®åà ­¥­¨¥ ®â¬¥­¥­®!',0
newfileerror db '¥¢®§¬®¦­® á®å¤ âì ­®¢ë© ä ©«',0
; ********************
; ****** DATA ******
; ********************
sz fasm_filename, 'FASM '
sz debug_filename, 'BOARD '
sz tinypad_filename, 'TINYPAD '
 
lsz sysfuncs_filename,\
ru, <'SYSFUNCR.TXT',0>,\
en, <'SYSFUNCS.TXT',0>
 
sz setup, 'SETUP ' ; we need to run SETUP to change keyboard layout
param_setup db 'LANG',0 ; parameter for SETUP
 
 
addr dd filename ; address of input string
 
filename_len dd 12
filename db 'NEWDOC00.TXT'
times 256 db 0;51-12 db 0
;times db 0 ; ï ­¥ §­ î ¯®ç¥¬ã ‚¨«« ­¥ ¯®áâ ¢¨« íâã áâà®çªã
orig_filename db 'NEWDOC00.TXT'
rb 256
search_len dd 5
search_string db 'still'
times 51-5 db 0
 
case_sens db 0 ; for search function
 
align 4
comment_string:
db ';***************************************'
db '*************************************** '
 
 
 
; INTERFACE DATA:
 
 
sz htext, 'TINYPAD'
;sz toolbar_btn_text, 'COMPILE RUN BOARD SYSFUNC'
 
 
searcht:
if lang eq ru
db ' ‘’ŽŠ€ > '
db ' Žˆ‘Š '
else
db ' STRING > '
db ' SEARCH '
end if
searchtl:
 
 
htext2:
if lang eq ru
db ' Ž‡ˆ–ˆŸ 00:00000 „‹ˆ€ 00000 ‘’ŽŠ '
else
db 'POSITION 00:00000 LENGTH 00000 LINES '
end if
htextlen2:
 
help_text:
if lang eq ru
db ' ŠŽŒ€„›: '
db ' '
db ' CTRL+F1 : â® ®ª­® '
db ' CTRL+S : ¥à¢ ï áâப  ¤«ï ª®¯¨à®¢ ­¨ï '
db ' CTRL+E : ®á«¥¤­ïï áâப  ¤«ï ª®¯¨à®¢ ­¨ï '
db ' CTRL+P : ‚áâ ¢¨âì ¢ë¡à ­­®¥ ­  ⥪ãéãî ¯®§¨æ¨î '
db ' CTRL+D : “¤ «¨âì áâபã '
db ' CTRL+L : ‚áâ ¢¨âì áâபã-à §¤¥«¨â¥«ì '
db ' CTRL+[ : ¥à¥©â¨ ¢ ­ ç «® ä ©«  '
db ' CTRL+] : ¥à¥©â¨ ¢ ª®­¥æ ä ©«  '
db ' CTRL+F2 : ‡ £à㧨âì ä ©« '
db ' CTRL+F3 : ®¨áª '
db ' CTRL+F4 : ‘®åà ­¨âì ä ©« '
db ' CTRL+F5 : ‘®åà ­¨âì ä ©« ª ª... '
db ' CTRL+F6 : ‚¢¥á⨠áâப㠤«ï ¯®¨áª  '
db ' CTRL+F7 : "Žª­® ¡ëáâண® á®åà ­¥­¨ï ¨ § £à㧪¨" '
db ' CTRL+F8 : ‘¬¥­¨âì à áª« ¤ªã ª« ¢¨ âãàë '
db ' CTRL+F9 : Š®¬¯¨«¨à®¢ âì ä ©« '
db ' CTRL+F10 : Š®¬¯¨«¨à®¢ âì ¨ § ¯ãáâ¨âì '
db ' F12 : ‡ ¯ãáâ¨âì ¤®áªã ®â« ¤ª¨ '
db 'x'
else
db ' COMMANDS: '
db ' '
db ' CTRL+F1 : SHOW THIS WINDOW '
db ' CTRL+S : SELECT FIRST STRING TO COPY '
db ' CTRL+E : SELECT LAST STRING TO COPY '
db ' CTRL+P : PASTE SELECTED TO CURRENT POSITION '
db ' CTRL+D : DELETE CURRENT LINE '
db ' CTRL+L : INSERT SEPARATOR LINE '
db ' CTRL+[ : GO TO THE BEGINNING OF FILE '
db ' CTRL+] : GO TO THE END OF FILE '
db ' CTRL+F2 : LOAD FILE '
db ' CTRL+F3 : SEARCH '
db ' CTRL+F4 : SAVE FILE '
db ' CTRL+F5 : SAVE FILE AS... '
db ' CTRL+F6 : ENTER SEARCH STRING '
db ' CTRL+F7 : DRAW "FAST SAVE AND OPEN" WINDOW '
db ' CTRL+F8 : CHANGE KEYBOARD LAYOUT '
db ' CTRL+F9 : COMPILE FILE '
db ' CTRL+F10 : RUN OUTFILE '
db ' F12 : OPEN DEBUG BOARD '
db 'x'
end if
 
help_wnd_header:
if lang eq ru
db 'ŽŒŽ™œ',0
else
db 'TINYPAD HELP',0
end if
 
hlphead_len = $ - help_wnd_header
 
save_yes_no:
if lang eq ru
db '‘®åà ­¨âì ä ©« ¯¥à¥¤ ¢ë室®¬?',0
else
db 'Save file before exit?',0
end if
 
VScroll_1:
dw 13 ;width +0
dw 489 ;x +2
dw 341 ;326 ;height +4
dw 43 ;y +6
dd 0 ;min +8
dd 100 ;scrl_max ;lines ;max +12
dd 0 ;cur_pos ;current +16
dd 1 ;small change +20
dd 10 ;big change +24
 
App_Controls:
dd VScroll_1 , drawvscroll, VScroll_mouse_over ;
dd 0,0,0 ;last control do not delete
 
; END OF INTERFACE DATA
 
symbols db '%#&*\:/<>|{}()[]=+-,. '
 
error_beep:
db 0xA0,0x30,0
save_beep1:
db 0x84,0x43,0
save_beep2:
db 0x84,0x48,0
 
 
align 4
fileinfo_read:
dd 0
dd 0
dd 300000/512
dd 0x10000
dd 0x70000
pathfile_read:
times 250 db 0 ;51 db 0
 
align 4
fileinfo_write:
dd 1
dd 0
dd 0
dd 0x10000
dd 0x70000
pathfile_write:
times 250 db 0 ; 51 db 0
 
align 4
 
temp dd 0xabc ; used in read_string
d_status dd 0
 
color_tbl:
dd 0x00000000 ; text
dd 0x00000000 ; instruction
dd 0x00000000 ; register
dd 0x00009000 ; number
dd 0x00a00000 ; quote
dd 0x00909090 ; comment
dd 0x003030f0 ; symbol
 
 
next_not_quote2 db 0 ; "
next_not_quote db 0 ; '
quote db 0
asm_mode db 0 ; ASM highlight?
tmpabc db 0
 
 
I_PARAM db 0 ; parameters are HERE - ¯ à ¬¥âàë ¡ã¤ãâ ­ ç¨­ âìáï ‡„…‘œ!
TINYPAD_END: ; end of file
 
 
; Uninitialised data
; ¥¨­¨æ¨ «¨§¨à®¢ ­­ë¥ ¤ ­­ë¥
align 4
 
posx dd ? ; x ­  íªà ­¥ (on the screen)
posy dd ? ; y ­  íªà ­¥
post dd ? ; ᬥ饭¨¥ ®â ­ ç «  - offset
posl dd ?
lines dd ? ; ª®«¨ç¥á⢮ áâப ¢ ¤®ªã¬¥­â¥
posxm dd ?
posym dd ?
 
dstart dd ? ; ᬥ饭¨¥ ¯® ®á¨ y ¤«ï ®âà¨á®¢ª¨ ª­®¯®ª ¨ ¤à.
 
filelen dd ? ; ¤«¨­  ä ©« 
 
PID dd ? ; ¨¤¥­â¨ä¨ª â®à ¯à®æ¥áá 
proccount dd ? ; ª®«¨ç¥á⢮ ¯à®æ¥áᮢ
 
filesize dd ? ; à §¬¥à ä ©« 
ya dd ? ; ¤«ï read_string
slines dd ? ; number of strings on the screen - ª®«¨ç¥á⢮ áâப ­  íªà ­¥
 
run_outfile dd ? ; for FASM
copy_start dd ? ; Ctrl+S
copy_count dd ? ; Ctrl+E
headlen dd ? ; header length
do_not_draw dd ? ; to draw or not to draw - this is a serious question ;)
 
MainWndClosed dd ?
sc system_colors
 
to_return db 0
to_return2 db 0
error_found db 0
error2_found db 0
 
header: ; window header - § £®«®¢®ª ®ª­ 
rb 256
 
; ¨­ä®à¬ æ¨ï ® ¯à®æ¥áᥠ§ ¯¨á뢠¥âáï ¢ íâã áâàãªâãàã
procinfo process_information
 
virtual at procinfo
fasm_parameters rb 256
end virtual
pos00 dd 0
newdoc db ?
mypath:
times 258 db 0
real_posy dd 0
vscroll_size dd 0
vscroll_pos dd 0
cur_pos dd 0
scrl_max dd 100
 
mouse_x dd 0
mouse_y dd 0
mousey dw 0
mousex dw 0
mouseb dd 0
 
num_goto_string dd 0
 
menu_is_on db 0
exit_wnd_on db 0
modified db 0
;fast save n open stack
rb 1024
so_stack:
;growing down
; the end!
 
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property