Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 4866 → Rev 4867

/programs/develop/SPForth/src/KOL/spf_kol_con_io.f
0,0 → 1,91
( Š®­á®«ì­ë© ¢¢®¤-¢ë¢®¤.
)
: NMNM 0 IF THEN ;
: ACCEPT0 ( c-addr +n1 -- +n2 ) \ 94
\ ‚¢¥á⨠áâப㠬 ªá¨¬ «ì­®© ¤«¨­ë ¤® +n1 ᨬ¢®«®¢.
\ ˆáª«îç¨â¥«ì­ ï á¨âã æ¨ï ¢®§­¨ª ¥â, ¥á«¨ +n1 0 ¨«¨ ¡®«ìè¥ 32767.
\ Žâ®¡à ¦ âì ᨬ¢®«ë ¯® ¬¥à¥ ¢¢®¤ .
\ ‚¢®¤ ¯à¥à뢠¥âáï, ª®£¤  ¯®«ã祭 ᨬ¢®« "ª®­¥æ áâப¨".
\ ¨ç¥£® ­¥ ¤®¡ ¢«ï¥âáï ¢ áâபã.
\ +n2 - ¤«¨­  áâப¨, § ¯¨á ­­®© ¯®  ¤à¥áã c-addr.
OVER + 1- OVER \ SA EA A
NMNM
BEGIN KEY \ SA EA A C
\ ." {" DUP H. ." }"
DUP 10 = OVER 13 = OR 0=
WHILE
DUP 0x1B = IF DROP DUP C@ EMIT ELSE
DUP 8 = IF EMIT BL EMIT 8 EMIT
2- >R OVER 1- R> UMAX ELSE
DUP 9 = IF DROP DUP 8 BLANK
>R OVER R> \ SA EA SA A
SWAP OVER - \ SA EA SA A-SA
8 / 1+ 8 * + ELSE DUP EMIT OVER C!
THEN THEN
THEN 1+ OVER UMIN \ SA EA A
REPEAT \ HEX CR DEPTH .SN
\ SA EA A C
DROP NIP - NEGATE ;
 
VECT ACCEPT
 
' ACCEPT0 TO ACCEPT
 
: TYPE_M ( c-addr1 u --- )
\ Output the string starting at c-addr and length u to the terminal.
OVER + SWAP BEGIN 2DUP - WHILE DUP C@ EMIT_N CHAR+ REPEAT
CC_LINES
2DROP
 
;
 
: _TYPE ( c-addr1 u --- )
\ Output the string starting at c-addr and length u to the terminal.
2DUP SCR_BUF AT-XY? 80 * + + SWAP CMOVE
SCR_TYPE
;
 
\ : ZTYPE ( ADDR -- )
\ DUP >R LZTYPE DROP RDROP ;
 
: _CR ( -- ) \ 94
\ ¥à¥¢®¤ áâப¨.
13 EMIT
;
 
VECT CR ' _CR TO CR
 
: _EMIT ( x -- ) \ 94
\ …᫨ x - ¨§®¡à ¦ ¥¬ë© ᨬ¢®«, ¢ë¢¥á⨠¥£® ­  ¤¨á¯«¥©.
\ DUP SCR_BUF AT-XY? 80 * + + C!
DUP 0xD = IF DROP SCR_CR EXIT THEN
DUP 0x8 = IF DROP 0x00800000
&AT-XY W@ 0xD * 0x15 + 16 LSHIFT 0xB OR
&AT-XY 2+ W@ 0x6 * 16 LSHIFT 6 OR
13 SYS4 DROP
AT-XY? >R 1- R> AT-XY
EXIT THEN
>R RP@ 1 _TYPE RDROP
;
 
 
: SWITCH_CHAR ( c1 -- c2 )
DUP [CHAR] a [CHAR] z 1+ WITHIN
OVER [CHAR] A [CHAR] Z 1+ WITHIN OR
IF 32 XOR THEN
;
 
 
: KEY_M DR_CUR BEGIN 0 ?KEY UNTIL CL_CUR SWITCH_CHAR ;
 
: _KEY
CORSOR_DROW
BEGIN KEY? UNTIL &KEY C@ &KEY 0! SWITCH_CHAR
;
 
: PAGE
draw_window
SCR_BUF SCR_WIDTH SCR_HEIGHT * BLANK
0 0 AT-XY
DRAW_LINS
;
/programs/develop/SPForth/src/KOL/spf_kol_const.f
0,0 → 1,21
( Windows-ª®­áâ ­âë, ­¥®¡å®¤¨¬ë¥ ¯à¨ ¢/¢.
)
 
 
0x80000000 CONSTANT R/O ( -- fam ) \ 94 FILE
\ fam - ®¯à¥¤¥«¥­­®¥ ॠ«¨§ æ¨¥© §­ ç¥­¨¥ ¤«ï ¢ë¡®à  ¬¥â®¤  ¤®áâ㯠
\ ª ä ©«ã "⮫쪮 ¤«ï ç⥭¨ï"
 
0x40000000 CONSTANT W/O ( -- fam ) \ 94 FILE
\ fam - ®¯à¥¤¥«¥­­®¥ ॠ«¨§ æ¨¥© §­ ç¥­¨¥ ¤«ï ¢ë¡®à  ¬¥â®¤  ¤®áâ㯠
\ ª ä ©«ã "⮫쪮 ¤«ï § ¯¨á¨"
 
 
0xC0000000 CONSTANT R/W ( -- fam ) \ 94 FILE
\ fam - ®¯à¥¤¥«¥­­®¥ ॠ«¨§ æ¨¥© §­ ç¥­¨¥ ¤«ï ¢ë¡®à  ¬¥â®¤  ¤®áâ㯠
\ ª ä ©«ã "ç⥭¨¥/§ ¯¨áì"
 
DECIMAL
 
 
\ 7 CONSTANT ZZZ
/programs/develop/SPForth/src/KOL/spf_kol_io.f
0,0 → 1,139
( ” ©«®¢ë© ¢¢®¤-¢ë¢®¤.
)
 
CREATE LT 0xD C, 0xA C, 0xD C, 0xA C, \ line terminator
CREATE LTL 2 , \ line terminator length
 
 
: DOS-LINES ( -- )
0xA0D LT ! 2 LTL !
;
: UNIX-LINES ( -- )
0xA0A LT ! 1 LTL !
;
 
 
: READ-FILE ( c-addr u1 fileid -- u2 ior ) \ 94 FILE
\ à®ç¥áâì u1 ᨬ¢®«®¢ ¢ c-addr ¨§ ⥪ã饩 ¯®§¨æ¨¨ ä ©« ,
\ ¨¤¥­â¨ä¨æ¨à㥬®£® fileid.
\ …᫨ u1 ᨬ¢®«®¢ ¯à®ç¨â ­® ¡¥§ ¨áª«î祭¨©, ior ­®«ì ¨ u2 à ¢¥­ u1.
\ …᫨ ª®­¥æ ä ©«  ¤®á⨣­ãâ ¤® ¯à®ç⥭¨ï u1 ᨬ¢®«®¢, ior ­®«ì
\ ¨ u2 - ª®«¨ç¥á⢮ ॠ«ì­® ¯à®ç¨â ­­ëå ᨬ¢®«®¢.
\ …᫨ ®¯¥à æ¨ï ¯à®¨§¢®¤¨âáï ª®£¤  §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
\ FILE-POSITION à ¢­® §­ ç¥­¨î, ¢®§¢à é ¥¬®¬ã FILE-SIZE ¤«ï ä ©« 
\ ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, ior ¨ u2 ­ã«¨.
\ …᫨ ¢®§­¨ª«  ¨áª«îç¨â¥«ì­ ï á¨âã æ¨ï, â® ior - ®¯à¥¤¥«¥­­ë© ॠ«¨§ æ¨¥©
\ ª®¤ १ã«ìâ â  ¢¢®¤ /¢ë¢®¤ , ¨ u2 - ª®«¨ç¥á⢮ ­®à¬ «ì­® ¯¥à¥¤ ­­ëå ¢
\ c-addr ᨬ¢®«®¢.
\ ¥®¯à¥¤¥«¥­­ ï á¨âã æ¨ï ¢®§­¨ª ¥â, ¥á«¨ ®¯¥à æ¨ï ¢ë¯®«­ï¥âáï, ª®£¤ 
\ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥ FILE-POSITION ¡®«ìè¥ ç¥¬ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
\ FILE-SIZE ¤«ï ä ©« , ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, ¨«¨ âॡ㥬 ï ®¯¥à æ¨ï
\ ¯ëâ ¥âáï ¯à®ç¥áâì ­¥§ ¯¨á ­­ãî ç áâì ä ©« .
\ ®á«¥ § ¢¥à襭¨ï ®¯¥à æ¨¨ FILE-POSITION ¢®§¢à â¨â á«¥¤ãîéãî ¯®§¨æ¨î
\ ¢ ä ©«¥ ¯®á«¥ ¯®á«¥¤­¥£® ¯à®ç¨â ­­®£® ᨬ¢®« .
DUP >R .CODE 0!
R@ .SIZE !
R@ .DATA !
R@ 70 SYS2
EBX@ SWAP
DUP 6 = IF DROP 0 THEN
DUP 0=
IF R@ .FIRST D@
R@ .SIZE @ 0 D+
R@ .FIRST D!
THEN
RDROP
;
 
22 CONSTANT MAX_OPEN_FILES
 
CREATE FILE_STR_BUF FILE_STR 1+ MAX_OPEN_FILES * ALLOT
 
: FALLOC ( -- 0|fid )
FILE_STR_BUF FILE_STR MAX_OPEN_FILES * BOUNDS
BEGIN DUP .NAME @ 0=
IF NIP EXIT THEN
FILE_STR + 2DUP U<
UNTIL 2DROP 0
;
 
: OPEN-FILE ( c-addr u fam -- fileid ior )
\ Žâªàëâì ä ©« á ¨¬¥­¥¬, § ¤ ­­ë¬ áâப®© c-addr u, á ¬¥â®¤®¬ ¤®áâ㯠 fam.
\ ‘¬ëá« §­ ç¥­¨ï fam ®¯à¥¤¥«¥­ ॠ«¨§ æ¨¥©.
\ …᫨ ä ©« ãᯥ譮 ®âªàëâ, ior ­®«ì, fileid ¥£® ¨¤¥­â¨ä¨ª â®à, ¨ ä ©«
\ ¯®§¨æ¨®­¨à®¢ ­ ­  ­ ç «®.
\ ˆ­ ç¥ ior - ®¯à¥¤¥«¥­­ë© ॠ«¨§ æ¨¥© ª®¤ १ã«ìâ â  ¢¢®¤ /¢ë¢®¤ ,
\ ¨ fileid ­¥®¯à¥¤¥«¥­.
DROP
\ FILE_STR
FALLOC DUP
IF
>R
R@ FILE_STR ERASE
R@ .NAME SWAP MOVE
R> 0 EXIT
THEN -1
;
 
: CLOSE-FILE ( fileid -- ior ) \ 94 FILE
\ ‡ ªàëâì ä ©«, § ¤ ­­ë© fileid.
.NAME 0! 0
;
 
 
USER _fp1
USER _fp2
USER _addr
 
 
: READ-LINE ( c-addr u1 fileid -- u2 flag ior ) \ 94 FILE
\ à®ç¥áâì á«¥¤ãîéãî áâப㠨§ ä ©« , § ¤ ­­®£® fileid, ¢ ¯ ¬ïâì
\ ¯®  ¤à¥áã c-addr. —¨â ¥âáï ­¥ ¡®«ìè¥ u1 ᨬ¢®«®¢. „® ¤¢ãå
\ ®¯à¥¤¥«¥­­ëå ॠ«¨§ æ¨¥© ᨬ¢®«®¢ "ª®­¥æ áâப¨" ¬®£ãâ ¡ëâì
\ ¯à®ç¨â ­ë ¢ ¯ ¬ïâì §  ª®­æ®¬ áâப¨, ­® ­¥ ¢ª«îç¥­ë ¢ áç¥â稪 u2.
\ ãä¥à áâப¨ c-addr ¤®«¦¥­ ¨¬¥âì à §¬¥à ª ª ¬¨­¨¬ã¬ u1+2 ᨬ¢®« .
\ …᫨ ®¯¥à æ¨ï ãᯥ譠, flag "¨á⨭ " ¨ ior ­®«ì. …᫨ ª®­¥æ áâப¨
\ ¯®«ã祭 ¤® ⮣® ª ª ¯à®ç¨â ­ë u1 ᨬ¢®«®¢, â® u2 - ç¨á«® ॠ«ì­®
\ ¯à®ç¨â ­­ëå ᨬ¢®«®¢ (0<=u2<=u1), ­¥ áç¨â ï ᨬ¢®«®¢ "ª®­¥æ áâப¨".
\ Š®£¤  u1=u2 ª®­¥æ áâப¨ 㦥 ¯®«ã祭.
\ …᫨ ®¯¥à æ¨ï ¯à®¨§¢®¤¨âáï, ª®£¤  §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
\ FILE-POSITION à ¢­® §­ ç¥­¨î, ¢®§¢à é ¥¬®¬ã FILE-SIZE ¤«ï ä ©« ,
\ ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, flag "«®¦ì", ior ­®«ì, ¨ u2 ­®«ì.
\ …᫨ ior ­¥ ­®«ì, â® ¯à®¨§®è«  ¨áª«îç¨â¥«ì­ ï á¨âã æ¨ï ¨ ior -
\ ®¯à¥¤¥«¥­­ë© ॠ«¨§ æ¨¥© ª®¤ १ã«ìâ â  ¢¢®¤ -¢ë¢®¤ .
\ ¥®¯à¥¤¥«¥­­ ï á¨âã æ¨ï ¢®§­¨ª ¥â, ¥á«¨ ®¯¥à æ¨ï ¢ë¯®«­ï¥âáï, ª®£¤ 
\ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥ FILE-POSITION ¡®«ìè¥ ç¥¬ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
\ FILE-SIZE ¤«ï ä ©« , ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, ¨«¨ âॡ㥬 ï ®¯¥à æ¨ï
\ ¯ëâ ¥âáï ¯à®ç¥áâì ­¥§ ¯¨á ­­ãî ç áâì ä ©« .
\ ®á«¥ § ¢¥à襭¨ï ®¯¥à æ¨¨ FILE-POSITION ¢®§¢à â¨â á«¥¤ãîéãî ¯®§¨æ¨î
\ ¢ ä ©«¥ ¯®á«¥ ¯®á«¥¤­¥£® ¯à®ç¨â ­­®£® ᨬ¢®« .
DUP >R
FILE-POSITION IF 2DROP 0 0 THEN _fp1 ! _fp2 !
1+
OVER _addr !
 
R@ READ-FILE ?DUP IF NIP RDROP 0 0 ROT EXIT THEN
 
DUP >R 0= IF RDROP RDROP 0 0 0 EXIT THEN \ ¡ë«¨ ¢ ª®­æ¥ ä ©« 
_addr @ R@ LT 1+ 1 SEARCH
IF \ ­ ©¤¥­ à §¤¥«¨â¥«ì áâப
DROP _addr @ -
DUP 1+ S>D _fp2 @ _fp1 @ D+ RDROP R> REPOSITION-FILE DROP
DUP _addr @ + 1- C@ 0xD = IF 1- THEN
ELSE \ ­¥ ­ ©¤¥­ à §¤¥«¨â¥«ì áâப
2DROP
R> RDROP \ ¥á«¨ áâப  ¯à®ç¨â ­  ­¥ ¯®«­®áâìî - ¡ã¤¥â ࠧ१ ­ 
THEN
TRUE 0
;
 
: FILE-POSITION ( fileid -- ud ior ) \ 94 FILE
\ ud - ⥪ãé ï ¯®§¨æ¨ï ¢ ä ©«¥, ¨¤¥­â¨ä¨æ¨à㥬®¬ fileid.
.FIRST D@ 0
;
 
: REPOSITION-FILE ( ud fileid -- ior ) \ 94 FILE
\ ¥à¥¯®§¨æ¨®­¨à®¢ âì ä ©«, ¨¤¥­â¨ä¨æ¨àã¥¬ë© fileid, ­  ud.
.FIRST D! 0
;
 
/programs/develop/SPForth/src/KOL/spf_kol_memory.f
0,0 → 1,66
( “¯à ¢«¥­¨¥ ¯ ¬ïâìî.
Windows-§ ¢¨á¨¬ë¥ á«®¢ .
Copyright [C] 1992-1999 A.Cherezov ac@forth.org
¥¢¨§¨ï - ᥭâï¡àì 1999
)
\ 94 MEMORY
 
USER THREAD-HEAP \ åí­¤« 娯  ⥪ã饣® ¯®â®ª 
 
\ VARIABLE USER-OFFS \ ᬥ饭¨¥ ¢ ®¡« á⨠¤ ­­ëå ¯®â®ª ,
\ £¤¥ ᮧ¤ îâáï ­®¢ë¥ ¯¥à¥¬¥­­ë¥
: ERR
\ IF 0 ELSE DUP GetLastError THEN
;
 
: USER-ALLOT ( n -- )
USER-OFFS +!
 
\ ¢ë஢­ï¥¬ ¢ USER-CREATE ~day
\ USER-OFFS @ + \ á ­ ç «  ¯à¨¡ ¢«ï¥¬
\ CELL 1- + [ CELL NEGATE ] LITERAL AND \ ¯®â®¬ ¢ëà ¢­¨¢ ¥¬
\ USER-OFFS !
;
 
: USER-HERE ( -- n )
USER-OFFS @
;
 
: ALLOCATE ( u -- a-addr ior ) \ 94 MEMORY
\  á¯à¥¤¥«¨âì u ¡ ©â ­¥¯à¥à뢭®£® ¯à®áâà ­á⢠ ¤ ­­ëå. “ª § â¥«ì ¯à®áâà ­á⢠
\ ¤ ­­ëå ­¥ ¨§¬¥­ï¥âáï í⮩ ®¯¥à æ¨¥©. ¥à¢®­ ç «ì­®¥ ᮤ¥à¦¨¬®¥ ¢ë¤¥«¥­­®£®
\ ãç á⪠ ¯ ¬ï⨠­¥®¯à¥¤¥«¥­®.
\ …᫨ à á¯à¥¤¥«¥­¨¥ ãᯥ譮, a-addr - ¢ë஢­¥­­ë©  ¤à¥á ­ ç «  à á¯à¥¤¥«¥­­®©
\ ®¡« á⨠¨ ior ­®«ì.
\ …᫨ ®¯¥à æ¨ï ­¥ ¯à®è« , a-addr ­¥ ¯à¥¤áâ ¢«ï¥â ¯à ¢¨«ì­ë©  ¤à¥á ¨ ior -
\ § ¢¨áï騩 ®â ॠ«¨§ æ¨¨ ª®¤ ¢¢®¤ -¢ë¢®¤ .
5 68 SYS3 0 ;
 
: FREE ( a-addr -- ior ) \ 94 MEMORY
\ ‚¥à­ãâì ­¥¯à¥à뢭ãî ®¡« áâì ¯à®áâà ­á⢠ ¤ ­­ëå, ¨­¤¨æ¨à㥬ãî a-addr, á¨á⥬¥
\ ¤«ï ¤ «ì­¥©è¥£® à á¯à¥¤¥«¥­¨ï. a-addr ¤®«¦¥­ ¨­¤¨æ¨à®¢ âì ®¡« áâì
\ ¯à®áâà ­á⢠ ¤ ­­ëå, ª®â®à ï à ­¥¥ ¡ë«  ¯®«ã祭  ¯® ALLOCATE ¨«¨ RESIZE.
\ “ª § â¥«ì ¯à®áâà ­á⢠ ¤ ­­ëå ­¥ ¨§¬¥­ï¥âáï ¤ ­­®© ®¯¥à æ¨¥©.
\ …᫨ ®¯¥à æ¨ï ãᯥ譠, ior ­®«ì. …᫨ ®¯¥à æ¨ï ­¥ ¯à®è« , ior - § ¢¨áï騩 ®â
\ ॠ«¨§ æ¨¨ ª®¤ ¢¢®¤ -¢ë¢®¤ .
5 68 SYS3 DROP 0 ;
 
: RESIZE ( a-addr1 u -- a-addr2 ior ) \ 94 MEMORY
\ ˆ§¬¥­¨âì à á¯à¥¤¥«¥­¨¥ ­¥¯à¥à뢭®£® ¯à®áâà ­á⢠ ¤ ­­ëå, ­ ç¨­ î饣®áï á
\  ¤à¥á  a-addr1, à ­¥¥ à á¯à¥¤¥«¥­­®£® ¯® ALLOCATE ¨«¨ RESIZE, ­  u ¡ ©â.
\ u ¬®¦¥â ¡ëâì ¡®«ìè¥ ¨«¨ ¬¥­ìè¥, 祬 ⥪ã騩 à §¬¥à ®¡« áâ¨.
\ “ª § â¥«ì ¯à®áâà ­á⢠ ¤ ­­ëå ­¥ ¨§¬¥­ï¥âáï ¤ ­­®© ®¯¥à æ¨¥©.
\ …᫨ ®¯¥à æ¨ï ãᯥ譠, a-addr2 - ¢ë஢­¥­­ë©  ¤à¥á ­ ç «  u ¡ ©â
\ à á¯à¥¤¥«¥­­®© ¯ ¬ï⨠¨ ior ­®«ì. a-addr2 ¬®¦¥â, ­® ­¥ ¤®«¦¥­, ¡ëâì ⥬ ¦¥
\ á ¬ë¬, çâ® ¨ a-addr1. …᫨ ®­¨ ­¥®¤¨­ ª®¢ë, §­ ç¥­¨ï, ᮤ¥à¦ é¨¥áï ¢ ®¡« áâ¨
\ a-addr1, ª®¯¨àãîâáï ¢ a-addr2 ¢ ª®«¨ç¥á⢥ ¬¨­¨¬ «ì­®£® ¨§ à §¬¥à®¢ íâ¨å
\ ¤¢ãå ®¡« á⥩. …᫨ ®­¨ ®¤¨­ ª®¢ë, §­ ç¥­¨ï, ᮤ¥à¦ é¨¥áï ¢ ®¡« áâ¨,
\ á®åà ­ïîâáï ¤® ¬¨­¨¬ «ì­®£® ¨§ u ¨«¨ ¯¥à¢®­ ç «ì­®£® à §¬¥à . …᫨ a-addr2 ­¥
\ â®â ¦¥, çâ® ¨ a-addr1, ®¡« áâì ¯ ¬ï⨠¯® a-addr1 ¢®§¢à é ¥âáï á¨á⥬¥
\ ᮣ« á­® ®¯¥à æ¨¨ FREE.
\ …᫨ ®¯¥à æ¨ï ­¥ ¯à®è« , a-addr2 à ¢¥­ a-addr1, ®¡« áâì ¯ ¬ï⨠a-addr1 ­¥
\ ¨§¬¥­ï¥âáï, ¨ ior - § ¢¨áï騩 ®â ॠ«¨§ æ¨¨ ª®¤ ¢¢®¤ -¢ë¢®¤ .
THROW ABORT" RESIZE is't in system"
;
 
 
/programs/develop/SPForth/src/KOL/spf_kol_module.f
0,0 → 1,40
 
: is_path_delimiter ( c -- flag )
DUP [CHAR] \ = SWAP [CHAR] / = OR
;
 
: CUT-PATH ( a u -- a u1 )
\ èç ñòðîêè "path\name" âûäåëèòü ñòðîêó "path\"
OVER +
BEGIN 2DUP <> WHILE DUP C@ is_path_delimiter 0= WHILE 1- REPEAT 1+ THEN
\ DUP 0! \ ~ruv (to anfilat): íå äÎëæíî òóò çàòèðàòü ïîäàííûé áóôåð!
OVER -
;
 
: ModuleName ( -- addr u )
ABORT
;
 
: ModuleDirName ( -- addr u )
ModuleName CUT-PATH
;
 
: +ModuleDirName ( addr u -- addr2 u2 )
2>R
ModuleDirName 2DUP +
2R> DUP >R ROT SWAP 1+ MOVE
R> +
;
 
: +LibraryDirName ( addr u -- addr2 u2 )
\ Äîáàâèòü addr u ê ïîëíûé_ïóòü_ïðèëîæåíèÿ+devel\
2>R
ModuleDirName 2DUP +
S" devel\" ROT SWAP MOVE
6 + 2DUP +
2R> DUP >R ROT SWAP 1+ MOVE
R> +
;
: SOURCE-NAME ( -- a u )
CURFILE @ DUP IF ASCIIZ> ELSE 0 THEN
;
/programs/develop/SPForth/src/KOL/spf_kol_module.f_L
0,0 → 1,159
ZZ=D4
: is_path_delimiter ( c -- flag )
 
5A380F 30 38 5A 00 00 11 69 73 5F 70 61 74 68 5F 64 65 08Z...is_path_de
5A381F 6C 69 6D 69 74 65 72 75 37 5A 00 00 00 00 00 00 limiteru7Z......
5A382F 00 .
 
DUP [CHAR] \ = SWAP [CHAR] / = OR
 
5A3830 89 45 FC 89 45 F8 B8 5C 00 00 00 33 45 F8 83 E8 ‰Eü‰Eø¸\...3Eøƒè
5A3840 01 1B C0 8B 55 FC 89 45 FC 89 55 F8 B8 2F 00 00 ..À‹Uü‰Eü‰Uø¸/..
5A3850 00 33 45 F8 83 E8 01 1B C0 0B 45 FC .3Eøƒè..À.Eü
 
;
 
5A385C C3 Ã
 
 
: CUT-PATH ( a u -- a u1 )
 
5A385D 70 38 5A 00 00 08 43 55 54 2D 50 41 54 48 14 38 p8Z...CUT-PATH.8
5A386D 5A 00 00 Z..
 
\ èç ñòðîêè "path\name" âûäåëèòü ñòðîêó "path\"
OVER +
 
5A3870 89 45 FC 8B 45 00 03 45 FC ‰Eü‹E..Eü
 
BEGIN 2DUP <> WHILE DUP C@ is_path_delimiter 0= WHILE 1- REPEAT 1+ THEN
 
5A3879 90 90 90 8B 55 00 89 45 FC 89 55 F8 33 45 F8 8B ‹U.‰Eü‰Uø3Eø‹
5A3889 45 FC 0F 84 24 00 00 00 89 45 FC 0F B6 00 8D 6D Eü.„$...‰Eü.¶.m
5A3899 FC E8 91 FF FF FF 0B C0 8B 45 00 8D 6D 04 0F 85 üè‘ÿÿÿ.À‹E.m..…
5A38A9 05 00 00 00 8D 40 FF EB CA 8D 40 01 ....@ÿëʍ@.
 
\ DUP 0! \ ~ruv (to anfilat): íå äÎëæíî òóò çàòèðàòü ïîäàííûé áóôåð!
OVER -
 
5A38B5 89 45 FC 8B 45 00 F7 D8 03 45 FC ‰Eü‹E.÷Ø.Eü
 
;
 
5A38C0 C3 Ã
 
 
: ModuleName ( -- addr u )
 
5A38C1 E0 38 5A 00 00 0A 4D 6F 64 75 6C 65 4E 61 6D 65 à8Z...ModuleName
5A38D1 62 38 5A 00 00 00 00 00 00 00 00 00 00 00 00 b8Z............
 
ABORT
 
5A38E0 E8 7B F6 FF FF è{öÿÿ
 
;
 
5A38E5 C3 Ã
 
 
: ModuleDirName ( -- addr u )
 
5A38E6 00 39 5A 00 00 0D 4D 6F 64 75 6C 65 44 69 72 4E .9Z...ModuleDirN
5A38F6 61 6D 65 C6 38 5A 00 00 00 00 ameÆ8Z....
 
ModuleName CUT-PATH
 
5A3900 E8 DB FF FF FF E8 66 FF FF FF èÛÿÿÿèfÿÿÿ
 
;
 
5A390A C3 Ã
 
 
: +ModuleDirName ( addr u -- addr2 u2 )
 
5A390B 30 39 5A 00 00 0E 2B 4D 6F 64 75 6C 65 44 69 72 09Z...+ModuleDir
5A391B 4E 61 6D 65 EB 38 5A 00 00 00 00 00 00 00 00 00 Nameë8Z.........
5A392B 00 00 00 00 00 .....
 
2>R
 
5A3930 E8 CB 94 FF FF è˔ÿÿ
 
ModuleDirName 2DUP +
 
5A3935 E8 C6 FF FF FF 8B 55 00 89 45 FC 89 55 F8 03 45 èÆÿÿÿ‹U.‰Eü‰Uø.E
5A3945 F8 8D 6D FC ømü
 
2R> DUP >R ROT SWAP 1+ MOVE
 
5A3949 E8 D2 94 FF FF 89 45 FC 50 8B 45 FC 8B 55 00 89 èҔÿÿ‰EüP‹Eü‹U.‰
5A3959 45 00 8B 45 04 89 55 04 8B 55 00 89 45 00 8B C2 E.‹E.‰U.‹U.‰E.‹Â
5A3969 8D 40 01 E8 AF A4 FF FF @.诤ÿÿ
 
R> +
 
5A3971 89 45 FC 58 03 45 FC ‰EüX.Eü
 
;
 
5A3978 C3 Ã
 
 
: +LibraryDirName ( addr u -- addr2 u2 )
 
5A3979 A0 39 5A 00 00 0F 2B 4C 69 62 72 61 72 79 44 69  9Z...+LibraryDi
5A3989 72 4E 61 6D 65 10 39 5A 00 00 00 00 00 00 00 00 rName.9Z........
5A3999 00 00 00 00 00 00 00 .......
 
\ Äîáàâèòü addr u ê ïîëíûé_ïóòü_ïðèëîæåíèÿ+devel\
2>R
 
5A39A0 E8 5B 94 FF FF è[”ÿÿ
 
ModuleDirName 2DUP +
 
5A39A5 E8 56 FF FF FF 8B 55 00 89 45 FC 89 55 F8 03 45 èVÿÿÿ‹U.‰Eü‰Uø.E
5A39B5 F8 8D 6D FC ømü
 
S" devel\" ROT SWAP MOVE
 
5A39B9 E8 9E E7 F9 FF 06 64 65 76 65 6C 5C 00 8B 55 00 èžçùÿ.devel\.‹U.
5A39C9 89 45 00 8B 45 04 89 55 04 8B 55 00 89 45 00 8B ‰E.‹E.‰U.‹U.‰E.‹
5A39D9 C2 E8 41 A4 FF FF ÂèA¤ÿÿ
 
6 + 2DUP +
 
5A39DF 89 45 FC B8 06 00 00 00 03 45 FC 8B 55 00 89 45 ‰Eü¸.....Eü‹U.‰E
5A39EF FC 89 55 F8 03 45 F8 8D 6D FC ü‰Uø.Eømü
 
2R> DUP >R ROT SWAP 1+ MOVE
 
5A39F9 E8 22 94 FF FF 89 45 FC 50 8B 45 FC 8B 55 00 89 è"”ÿÿ‰EüP‹Eü‹U.‰
5A3A09 45 00 8B 45 04 89 55 04 8B 55 00 89 45 00 8B C2 E.‹E.‰U.‹U.‰E.‹Â
5A3A19 8D 40 01 E8 FF A3 FF FF @.èÿ£ÿÿ
 
R> +
 
5A3A21 89 45 FC 58 03 45 FC ‰EüX.Eü
 
;
 
5A3A28 C3 Ã
 
: SOURCE-NAME ( -- a u )
 
5A3A29 40 3A 5A 00 00 0B 53 4F 55 52 43 45 2D 4E 41 4D @:Z...SOURCE-NAM
5A3A39 45 7E 39 5A 00 00 00 E~9Z...
 
CURFILE @ DUP IF ASCIIZ> ELSE 0 THEN
 
5A3A40 E8 4F 2B FA FF 8B 00 0B C0 74 07 E8 D0 A6 FF FF èO+úÿ‹..Àt.èЦÿÿ
5A3A50 EB 08 89 45 FC 33 C0 8D 6D FC ë.‰Eü3Àmü
 
;
 
5A3A5A C3 Ã
 
ZZ=D4
/programs/develop/SPForth/src/KOL/spf_kol_sys.f
0,0 → 1,173
(
 
)
 
Code SYS1 ;( n -- n1 )
INT 40H
RET
EndCode
 
Code SYS2 ;( n n1 -- n2 )
MOV EBX, [EBP]
INT 40H
LEA EBP, [EBP+4]
RET
EndCode
 
Code SYS3 ;( n n1 n2 -- n3 )
MOV ECX, [EBP+4]
MOV EBX, [EBP]
INT 40H
LEA EBP, [EBP+8]
RET
EndCode
 
Code SYS4 ;( n n1 n2 n3 -- n4 )
MOV EDX, [EBP+8]
MOV ECX, [EBP+4]
MOV EBX, [EBP]
INT 40H
LEA EBP, [EBP+0CH]
RET
EndCode
 
Code SYS5 ;( n n1 n2 n3 n4 -- n5 )
MOV ESI, [EBP+0CH]
MOV EDX, [EBP+8]
MOV ECX, [EBP+4]
MOV EBX, [EBP]
INT 40H
LEA EBP, [EBP+10H]
RET
EndCode
 
Code SYS6 ;( n n1 n2 n3 n4 n5 -- n6 )
PUSH EDI
MOV EDI, [EBP+10H]
MOV ESI, [EBP+0CH]
MOV EDX, [EBP+8]
MOV ECX, [EBP+4]
MOV EBX, [EBP]
INT 40H
LEA EBP, [EBP+14H]
POP EDI
RET
EndCode
 
VARIABLE reg_struc
 
Code SYSV ;( -- n )
LEA EBP, [EBP-4]
MOV [EBP], EAX
MOV EAX, { ' reg_struc }
PUSH EDI
MOV EDI, [EAX+14H]
MOV ESI, [EAX+10H]
MOV EDX, [EAX+0CH]
MOV ECX, [EAX+8]
MOV EBX, [EAX+4]
MOV EAX, [EAX]
INT 40H
POP EDI
RET
EndCode
 
 
 
80 VALUE SCR_WIDTH
60 VALUE SCR_WIDTH-S
25 VALUE SCR_HEIGHT
 
 
CREATE &AT-XY 0 , 0 ,
CREATE &KEY 0 ,
CREATE &ATRIB 0x0000FFFF ,
 
0x0011000D VALUE >PIC
 
CREATE SCR_BUF SCR_WIDTH SCR_HEIGHT 1+ * ALLOT
 
: AT-XY ( X Y -- )
SWAP 16 LSHIFT + &AT-XY ! ;
 
: AT-XY? ( -- X Y )
&AT-XY 2+ W@ &AT-XY W@ ;
 
: __PAGE-UP
SCR_BUF SCR_WIDTH + SCR_BUF SCR_WIDTH SCR_HEIGHT * CMOVE
SCR_BUF SCR_WIDTH SCR_HEIGHT 1- * + SCR_WIDTH BLANK
AT-XY? 1- 0 MAX AT-XY ;
 
VECT PAGE-UP
 
: ?PAGE-UP ( n -- )
 
&AT-XY 2+ W@ + SCR_WIDTH /MOD SWAP &AT-XY 2+ W!
&AT-XY W@ + SCR_HEIGHT /MOD
IF PAGE-UP DROP SCR_HEIGHT 1- THEN &AT-XY W! ;
 
: SCR_CR
&AT-XY @ 0xFFFF AND 1+ &AT-XY ! 0 ?PAGE-UP ;
 
: SCR_TYPE ( addr len -- )
TUCK SWAP
&ATRIB @
&AT-XY 2+ W@ 0x60000 *
&AT-XY W@ 0xD * +
0x00060018 +
4 SYS5 DROP
\ &AT-XY 2+ +!
?PAGE-UP
;
 
: DRAW_LINS
['] PAGE-UP >BODY @
['] NOOP TO PAGE-UP
AT-XY?
0 0 AT-XY
SCR_BUF SCR_WIDTH SCR_HEIGHT * BOUNDS
DO I SCR_WIDTH SCR_TYPE \ SCR_CR
SCR_WIDTH
+LOOP
AT-XY
TO PAGE-UP ;
 
: _PAGE-UP
draw_window __PAGE-UP
DRAW_LINS
;
 
' _PAGE-UP TO PAGE-UP
 
CREATE LAST_CUR 0 , 0 ,
 
: CORSOR_DROW
0 LAST_CUR 2@ 38 SYS4 DROP
0x00FF00FF
&AT-XY W@ 0xD * 0x21 + DUP 16 LSHIFT +
&AT-XY 2+ W@ 0x6 * 6 + DUP 6 + 16 LSHIFT +
2DUP LAST_CUR 2!
38 SYS4 DROP
;
: REDRAW
draw_window
DRAW_LINS CORSOR_DROW ;
 
: EVENT-CASE
11 SYS1
DUP 1 = IF DROP REDRAW EXIT THEN
DUP 2 = IF DROP 2 SYS1 8 RSHIFT &KEY C! EXIT THEN
3 = IF -1 SYS1 EXIT THEN ;
 
 
0
CELL FIELD .CODE
2 CELLS FIELD .FIRST \ ¯®§¨æ¨ï ¢ ä ©«¥ (¢ ¡ ©â å)
CELL FIELD .SIZE \ ᪮«ìª® ¡ ©â R/W
CELL FIELD .DATA \ 㪠§ â¥«ì ­  ¤ ­­ë¥
222 FIELD .NAME \ ASCIIZ-¨¬ï ä ©« 
CONSTANT FILE_STR
 
: WINDOW
draw_window CC_LINES ;
 
/programs/develop/SPForth/src/KOL/spf_kol_sys.f_L
0,0 → 1,752
ZZ=D4 (
 
)
 
Code SYS1 ;( n -- n1 )
 
59E2C9 E0 E2 59 00 00 04 53 59 53 31 AE E2 59 00 00 00 àâY...SYS1®âY...
59E2D9 00 00 00 00 00 00 00 .......
 
INT 40H
 
59E2E0 CD 40 Í@
 
RET
 
59E2E2 C3 Ã
 
EndCode
 
Code SYS2 ;( n n1 -- n2 )
 
59E2E3 00 E3 59 00 00 04 53 59 53 32 CE E2 59 00 00 00 .ãY...SYS2ÎâY...
59E2F3 00 00 00 00 00 00 00 00 00 00 00 00 00 .............
 
MOV EBX, [EBP]
 
59E300 8B 5D 00 ‹].
 
INT 40H
 
59E303 CD 40 Í@
 
LEA EBP, [EBP+4]
 
59E305 8D 6D 04 m.
 
RET
 
59E308 C3 Ã
 
EndCode
 
Code SYS3 ;( n n1 n2 -- n3 )
 
59E309 20 E3 59 00 00 04 53 59 53 33 E8 E2 59 00 00 00 ãY...SYS3èâY...
59E319 00 00 00 00 00 00 00 .......
 
MOV ECX, [EBP+4]
 
59E320 8B 4D 04 ‹M.
 
MOV EBX, [EBP]
 
59E323 8B 5D 00 ‹].
 
INT 40H
 
59E326 CD 40 Í@
 
LEA EBP, [EBP+8]
 
59E328 8D 6D 08 m.
 
RET
 
59E32B C3 Ã
 
EndCode
 
Code SYS4 ;( n n1 n2 n3 -- n4 )
 
59E32C 40 E3 59 00 00 04 53 59 53 34 0E E3 59 00 00 00 @ãY...SYS4.ãY...
59E33C 00 00 00 00 ....
 
MOV EDX, [EBP+8]
 
59E340 8B 55 08 ‹U.
 
MOV ECX, [EBP+4]
 
59E343 8B 4D 04 ‹M.
 
MOV EBX, [EBP]
 
59E346 8B 5D 00 ‹].
 
INT 40H
 
59E349 CD 40 Í@
 
LEA EBP, [EBP+0CH]
 
59E34B 8D 6D 0C m.
 
RET
 
59E34E C3 Ã
 
EndCode
 
Code SYS5 ;( n n1 n2 n3 n4 -- n5 )
 
59E34F 60 E3 59 00 00 04 53 59 53 35 31 E3 59 00 00 00 `ãY...SYS51ãY...
59E35F 00 .
 
MOV ESI, [EBP+0CH]
 
59E360 8B 75 0C ‹u.
 
MOV EDX, [EBP+8]
 
59E363 8B 55 08 ‹U.
 
MOV ECX, [EBP+4]
 
59E366 8B 4D 04 ‹M.
 
MOV EBX, [EBP]
 
59E369 8B 5D 00 ‹].
 
INT 40H
 
59E36C CD 40 Í@
 
LEA EBP, [EBP+10H]
 
59E36E 8D 6D 10 m.
 
RET
 
59E371 C3 Ã
 
EndCode
 
Code SYS6 ;( n n1 n2 n3 n4 n5 -- n6 )
 
59E372 80 E3 59 00 00 04 53 59 53 36 54 E3 59 00 €ãY...SYS6TãY.
 
PUSH EDI
 
59E380 57 W
 
MOV EDI, [EBP+10H]
 
59E381 8B 7D 10 ‹}.
 
MOV ESI, [EBP+0CH]
 
59E384 8B 75 0C ‹u.
 
MOV EDX, [EBP+8]
 
59E387 8B 55 08 ‹U.
 
MOV ECX, [EBP+4]
 
59E38A 8B 4D 04 ‹M.
 
MOV EBX, [EBP]
 
59E38D 8B 5D 00 ‹].
 
INT 40H
 
59E390 CD 40 Í@
 
LEA EBP, [EBP+14H]
 
59E392 8D 6D 14 m.
 
POP EDI
 
59E395 5F _
 
RET
 
59E396 C3 Ã
 
EndCode
 
VARIABLE reg_struc
 
59E397 AB E3 59 00 00 09 72 65 67 5F 73 74 72 75 63 77 «ãY...reg_strucw
59E3A7 E3 59 00 00 E8 6C 3C FA FF 00 00 00 00 ãY..èl<úÿ....
 
 
Code SYSV ;( -- n )
 
59E3B4 D0 E3 59 00 00 04 53 59 53 56 9C E3 59 00 00 00 ÐãY...SYSVœãY...
59E3C4 00 00 00 00 00 00 00 00 00 00 00 00 ............
 
LEA EBP, [EBP-4]
 
59E3D0 8D 6D FC mü
 
MOV [EBP], EAX
 
59E3D3 89 45 00 ‰E.
 
MOV EAX, { ' reg_struc }
 
59E3D6 B8 AB E3 59 00 ¸«ãY.
 
PUSH EDI
 
59E3DB 57 W
 
MOV EDI, [EAX+14H]
 
59E3DC 8B 78 14 ‹x.
 
MOV ESI, [EAX+10H]
 
59E3DF 8B 70 10 ‹p.
 
MOV EDX, [EAX+0CH]
 
59E3E2 8B 50 0C ‹P.
 
MOV ECX, [EAX+8]
 
59E3E5 8B 48 08 ‹H.
 
MOV EBX, [EAX+4]
 
59E3E8 8B 58 04 ‹X.
 
MOV EAX, [EAX]
 
59E3EB 8B 00 ‹.
 
INT 40H
 
59E3ED CD 40 Í@
 
POP EDI
 
59E3EF 5F _
 
RET
 
59E3F0 C3 Ã
 
EndCode
 
 
 
80 VALUE SCR_WIDTH
 
59E3F1 10 E4 59 00 00 09 53 43 52 5F 57 49 44 54 48 B9 .äY...SCR_WIDTH¹
59E401 E3 59 00 00 00 00 00 00 00 00 00 00 00 00 00 E8 ãY.............è
59E411 27 3C FA FF 50 00 00 00 E8 E6 3C FA FF '<úÿP...èæ<úÿ
 
60 VALUE SCR_WIDTH-S
 
59E41E 40 E4 59 00 00 0B 53 43 52 5F 57 49 44 54 48 2D @äY...SCR_WIDTH-
59E42E 53 F6 E3 59 00 00 00 00 00 00 00 00 00 00 00 00 SöãY............
59E43E 00 00 E8 F7 3B FA FF 3C 00 00 00 E8 B6 3C FA FF ..è÷;úÿ<...è¶<úÿ
 
25 VALUE SCR_HEIGHT
 
59E44E 70 E4 59 00 00 0A 53 43 52 5F 48 45 49 47 48 54 päY...SCR_HEIGHT
59E45E 23 E4 59 00 00 00 00 00 00 00 00 00 00 00 00 00 #äY.............
59E46E 00 00 E8 C7 3B FA FF 19 00 00 00 E8 86 3C FA FF ..èÇ;úÿ....è†<úÿ
 
 
 
CREATE &AT-XY 0 , 0 ,
 
59E47E 8F E4 59 00 00 06 26 41 54 2D 58 59 53 E4 59 00 äY...&AT-XYSäY.
59E48E 00 E8 88 3B FA FF 00 00 00 00 00 00 00 00 .èˆ;úÿ........
 
CREATE &KEY 0 ,
 
59E49C AB E4 59 00 00 04 26 4B 45 59 83 E4 59 00 00 E8 «äY...&KEYƒäY..è
59E4AC 6C 3B FA FF 00 00 00 00 l;úÿ....
 
CREATE &ATRIB 0x0000FFFF ,
 
59E4B4 C7 E4 59 00 00 06 26 41 54 52 49 42 A1 E4 59 00 ÇäY...&ATRIB¡äY.
59E4C4 00 00 00 E8 50 3B FA FF FF FF 00 00 ...èP;úÿÿÿ..
 
 
0x0011000D VALUE >PIC
 
59E4D0 E0 E4 59 00 00 04 3E 50 49 43 B9 E4 59 00 00 00 àäY...>PIC¹äY...
59E4E0 E8 57 3B FA FF 0D 00 11 00 E8 16 3C FA FF èW;úÿ....è.<úÿ
 
 
CREATE SCR_BUF SCR_WIDTH SCR_HEIGHT 1+ * ALLOT
 
59E4EE FF E4 59 00 00 07 53 43 52 5F 42 55 46 D5 E4 59 ÿäY...SCR_BUFÕäY
59E4FE 00 E8 18 3B FA FF 00 00 00 00 00 00 00 00 00 00 .è.;úÿ..........
59E50E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
59E51E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
59E52E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
59ED24 7E6 bytes
 
: AT-XY ( X Y -- )
 
59ED24 40 ED 59 00 00 05 41 54 2D 58 59 F3 E4 59 00 00 @íY...AT-XYóäY..
59ED34 00 00 00 00 00 00 00 00 00 00 00 00 ............
 
SWAP 16 LSHIFT + &AT-XY ! ;
MOV EDX , [EBP ]
MOV [EBP ], EAX
MOV [EBP -4], EDX
MOV EAX , $10
MOV ECX , EAX
MOV EAX , [EBP -4]
SHL EAX , CL
ADD EAX , [EBP ]
LEA EBP , [EBP +4]
CALL @@&AT-XY
MOV EDX , [EBP ]
MOV [EAX ], EDX
MOV EAX , [EBP +4]
LEA EBP , [EBP +8]
RET
 
: AT-XY? ( -- X Y )
 
59ED6C 80 ED 59 00 00 06 41 54 2D 58 59 3F 29 ED 59 00 €íY...AT-XY?)íY.
59ED7C 00 00 00 00 ....
 
&AT-XY 2+ W@ &AT-XY W@ ;
CALL @@&AT-XY
LEA EAX , [EAX +2]
MOVZX EAX , WORD PTR [EAX ]
CALL @@&AT-XY
MOVZX EAX , WORD PTR [EAX ]
RET
 
: __PAGE-UP
 
59ED94 B0 ED 59 00 00 09 5F 5F 50 41 47 45 2D 55 50 71 °íY...__PAGE-UPq
59EDA4 ED 59 00 00 00 00 00 00 00 00 00 00 íY..........
 
SCR_BUF SCR_WIDTH + SCR_BUF SCR_WIDTH SCR_HEIGHT * CMOVE
CALL @@SCR_BUF
CALL @@SCR_WIDTH
ADD EAX , [EBP ]
LEA EBP , [EBP +4]
CALL @@SCR_BUF
CALL @@SCR_WIDTH
CALL @@SCR_HEIGHT
IMUL [EBP ]
LEA EBP , [EBP +4]
CALL @@CMOVE
SCR_BUF SCR_WIDTH SCR_HEIGHT 1- * + SCR_WIDTH BLANK
CALL @@SCR_BUF
CALL @@SCR_WIDTH
CALL @@SCR_HEIGHT
LEA EAX , [EAX -1]
IMUL [EBP ]
ADD EAX , [EBP +4]
LEA EBP , [EBP +8]
CALL @@SCR_WIDTH
CALL @@BLANK
AT-XY? 1- 0 MAX AT-XY ;
CALL @@AT-XY?
LEA EAX , [EAX -1]
MOV [EBP -4], EAX
XOR EAX , EAX
LEA EBP , [EBP -4]
CALL @@MAX
CALL @@AT-XY
RET
 
VECT PAGE-UP
 
59EE1A 30 EE 59 00 00 07 50 41 47 45 2D 55 50 99 ED 59 0îY...PAGE-UP™íY
59EE2A 00 00 00 00 00 00 E8 B3 32 FA FF 60 F0 59 00 E8 ......è³2úÿ`ðY.è
59EE3A C6 32 FA FF Æ2úÿ
 
 
: ?PAGE-UP ( n -- )
 
59EE3E 50 EE 59 00 00 08 3F 50 41 47 45 2D 55 50 1F EE PîY...?PAGE-UP.î
59EE4E 59 00 Y.
 
 
&AT-XY 2+ W@ + SCR_WIDTH /MOD SWAP &AT-XY 2+ W!
CALL @@&AT-XY
LEA EAX , [EAX +2]
MOVZX EAX , WORD PTR [EAX ]
ADD EAX , [EBP ]
LEA EBP , [EBP +4]
CALL @@SCR_WIDTH
MOV ECX , EAX
MOV EAX , [EBP ]
CDQ
IDIV ECX
MOV [EBP ], EDX
MOV EDX , [EBP ]
MOV [EBP ], EAX
MOV EAX , EDX
CALL @@&AT-XY
LEA EAX , [EAX +2]
CALL @@W!
&AT-XY W@ + SCR_HEIGHT /MOD
CALL @@&AT-XY
MOVZX EAX , WORD PTR [EAX ]
ADD EAX , [EBP ]
LEA EBP , [EBP +4]
CALL @@SCR_HEIGHT
MOV ECX , EAX
MOV EAX , [EBP ]
CDQ
IDIV ECX
MOV [EBP ], EDX
IF PAGE-UP DROP SCR_HEIGHT 1- THEN &AT-XY W! ;
OR EAX , EAX
MOV EAX , [EBP ]
LEA EBP , [EBP +4]
JE [OFFSET ?PAGE-UP]
CALL @@PAGE-UP
MOV EAX , [EBP ]
LEA EBP , [EBP +4]
CALL @@SCR_HEIGHT
LEA EAX , [EAX -1]
@59EEC1: CALL @@&AT-XY
CALL @@W!
RET
 
: SCR_CR
 
59EECC E0 EE 59 00 00 06 53 43 52 5F 43 52 43 EE 59 00 àîY...SCR_CRCîY.
59EEDC 00 00 00 00 ....
 
&AT-XY @ 0xFFFF AND 1+ &AT-XY ! 0 ?PAGE-UP ;
CALL @@&AT-XY
MOV EAX , [EAX ]
MOV [EBP -4], EAX
MOV EAX , $FFFF
AND EAX , [EBP -4]
LEA EAX , [EAX +1]
CALL @@&AT-XY
MOV EDX , [EBP ]
MOV [EAX ], EDX
XOR EAX , EAX
LEA EBP , [EBP +4]
CALL @@?PAGE-UP
RET
 
: SCR_TYPE ( addr len -- )
 
59EF0A 20 EF 59 00 00 08 53 43 52 5F 54 59 50 45 D1 EE ïY...SCR_TYPEÑî
59EF1A 59 00 00 00 00 00 Y.....
 
TUCK SWAP
MOV EDX , [EBP ]
MOV [EBP -4], EDX
MOV [EBP ], EAX
MOV EDX , [EBP -4]
MOV [EBP -4], EAX
MOV EAX , EDX
LEA EBP , [EBP -4]
&ATRIB @
CALL @@&ATRIB
MOV EAX , [EAX ]
&AT-XY 2+ W@ 0x60000 *
CALL @@&AT-XY
MOVZX EAX , WORD PTR [EAX +2]
MOV [EBP -4], EAX
MOV EAX , $60000
IMUL [EBP -4]
&AT-XY W@ 0xD * +
CALL @@&AT-XY
MOVZX EAX , WORD PTR [EAX ]
MOV [EBP -4], EAX
MOV EAX , $D
IMUL [EBP -4]
ADD EAX , [EBP ]
LEA EAX , [$60018][EAX ]
0x00060018 +
MOV [EBP ], EAX
MOV EAX , $4
4 SYS5 DROP
CALL @@SYS5
MOV EAX , [EBP ]
LEA EBP , [EBP +4]
\ &AT-XY 2+ +!
?PAGE-UP
CALL @@?PAGE-UP
;
RET
 
: DRAW_LINS
 
59EF84 A0 EF 59 00 00 09 44 52 41 57 5F 4C 49 4E 53 0F  ïY...DRAW_LINS.
59EF94 EF 59 00 00 00 00 00 00 00 00 00 00 ïY..........
 
['] PAGE-UP >BODY @
MOV [EBP -4], EAX
MOV EAX , $59EE30
MOV EAX , [EAX +5]
MOV [EBP -8], EAX
MOV EAX , $59D240
['] NOOP TO PAGE-UP
LEA EBP , [EBP -8]
CALL [OFFSET PAGE-UP]
AT-XY?
CALL @@AT-XY?
0 0 AT-XY
MOV [EBP -4], EAX
MOV [EBP -8], $0
XOR EAX , EAX
LEA EBP , [EBP -8]
CALL @@AT-XY
SCR_BUF SCR_WIDTH SCR_HEIGHT * BOUNDS
CALL @@SCR_BUF
CALL @@SCR_WIDTH
CALL @@SCR_HEIGHT
IMUL [EBP ]
ADD EAX , [EBP +4]
MOV EDX , [EBP +4]
MOV [EBP +4], EAX
MOV EAX , EDX
MOV EDX , $80000000
DO I SCR_WIDTH SCR_TYPE \ SCR_CR
SUB EDX , [EBP +4]
LEA EBX , [EDX ][EAX ]
MOV EAX , [EBP +8]
LEA EBP , [EBP +12]
PUSH , $59F037
PUSH EDX
PUSH EBX
XCHG EAX, EAX
XCHG EAX, EAX
XCHG EAX, EAX
MOV [EBP -4]EAX
MOV EAX , [ESP ]
SUB EAX , [ESP +4]
LEA EBP , [EBP -4]
CALL @@SCR_WIDTH
CALL @@SCR_TYPE
SCR_WIDTH
CALL @@SCR_WIDTH
+LOOP
ADD [ESP ], EAX
MOV EAX , [EBP ]
LEA EBP , [EBP +4]
JNO [OFFSET DRAW_LINS]
LEA ESP , [ESP +12]
AT-XY
CALL @@AT-XY
TO PAGE-UP ;
CALL [OFFSET PAGE-UP]
RET
 
: _PAGE-UP
 
59F042 60 F0 59 00 00 08 5F 50 41 47 45 2D 55 50 89 EF `ðY..._PAGE-UP‰ï
59F052 59 00 00 00 00 00 00 00 00 00 00 00 00 00 Y.............
 
draw_window __PAGE-UP
CALL @@draw_window
CALL @@__PAGE-UP
DRAW_LINS
CALL @@DRAW_LINS
;
RET
 
' _PAGE-UP TO PAGE-UP
 
CREATE LAST_CUR 0 , 0 ,
 
59F070 83 F0 59 00 00 08 4C 41 53 54 5F 43 55 52 47 F0 ƒðY...LAST_CURGð
59F080 59 00 00 E8 94 2F FA FF 00 00 00 00 00 00 00 00 Y..è”/úÿ........
 
 
: CORSOR_DROW
 
59F090 B0 F0 59 00 00 0B 43 4F 52 53 4F 52 5F 44 52 4F °ðY...CORSOR_DRO
59F0A0 57 75 F0 59 00 00 00 00 00 00 00 00 00 00 00 00 WuðY............
 
0 LAST_CUR 2@ 38 SYS4 DROP
MOV [EBP -4], EAX
XOR EAX , EAX
LEA EBP , [EBP -4]
CALL @@LAST_CUR
MOV EDX , [EAX +4]
MOV [EBP -4], EDX
MOV EAX , [EAX ]
MOV [EBP -8], EAX
MOV EAX , $26
MOV EDX , [EBP ]
MOV ECX , [EBP -4]
MOV EBX , [EBP -8]
INT $40
MOV EAX , $FF00FF
LEA EBP , [EBP +4]
0x00FF00FF
&AT-XY W@ 0xD * 0x21 + DUP 16 LSHIFT +
CALL @@&AT-XY
MOVZX EAX , WORD PTR [EAX ]
MOV [EBP -4], EAX
MOV EAX , $D
IMUL [EBP -4]
MOV [EBP -4], EAX
MOV EAX , $21
ADD EAX , [EBP -4]
MOV [EBP -4], EAX
MOV [EBP -8], EAX
MOV EAX , $10
MOV ECX , EAX
MOV EAX , [EBP -8]
SHL EAX , CL
ADD EAX , [EBP -4]
&AT-XY 2+ W@ 0x6 * 6 + DUP 6 + 16 LSHIFT +
CALL @@&AT-XY
MOVZX EAX , WORD PTR [EAX +2]
MOV [EBP -4], EAX
MOV EAX , $6
IMUL [EBP -4]
MOV [EBP -4], EAX
MOV EAX , $6
ADD EAX , [EBP -4]
MOV [EBP -4], EAX
LEA EAX , [EAX +6]
MOV [EBP -8], EAX
MOV EAX , $10
MOV ECX , EAX
MOV EAX , [EBP -8]
SHL EAX , CL
ADD EAX , [EBP -4]
2DUP LAST_CUR 2!
MOV EDX , [EBP ]
MOV [EBP -4], EAX
MOV [EBP -8], EDX
LEA EBP , [EBP -8]
CALL @@LAST_CUR
CALL @@2!
38 SYS4 DROP
MOV [EBP -4], EAX
MOV EAX , $26
MOV EDX , [EBP +4]
MOV ECX , [EBP ]
MOV EBX , [EBP -4]
INT $40
MOV EAX , [EBP +8]
LEA EBP , [EBP +12]
;
RET
: REDRAW
 
59F17A 90 F1 59 00 00 06 52 45 44 52 41 57 95 F0 59 00 ñY...REDRAW•ðY.
59F18A 00 00 00 00 00 00 ......
 
draw_window
CALL @@draw_window
DRAW_LINS CORSOR_DROW ;
CALL @@DRAW_LINS
CALL @@CORSOR_DROW
RET
 
: EVENT-CASE
 
59F1A0 C0 F1 59 00 00 0A 45 56 45 4E 54 2D 43 41 53 45 ÀñY...EVENT-CASE
59F1B0 7F F1 59 00 00 00 00 00 00 00 00 00 00 00 00 00 ñY.............
 
11 SYS1
MOV [EBP -4], EAX
MOV EAX , $B
INT $40
MOV [EBP -8], EAX
DUP 1 = IF DROP REDRAW EXIT THEN
CMP EAX , $1
MOV EAX , [EBP -8]
LEA EBP , [EBP -4]
JNE [OFFSET EVENT-CASE]
MOV EAX , [EBP ]
LEA EBP , [EBP +4]
CALL @@REDRAW
RET
DUP 2 = IF DROP 2 SYS1 8 RSHIFT &KEY C! EXIT THEN
@59F1E6: MOV [EBP -4], EAX
CMP EAX , $2
MOV EAX , [EBP -4]
JNE [OFFSET EVENT-CASE]
MOV EAX , $2
INT $40
MOV [EBP -4], EAX
MOV EAX , $8
MOV ECX , EAX
MOV EAX , [EBP -4]
SHR EAX , CL
CALL @@&KEY
MOV EDX , [EBP ]
MOV [EAX ], DL
MOV EAX , [EBP +4]
LEA EBP , [EBP +8]
RET
3 = IF -1 SYS1 EXIT THEN ;
@59F21A: CMP EAX , $3
MOV EAX , [EBP ]
LEA EBP , [EBP +4]
JNE [OFFSET EVENT-CASE]
MOV [EBP -4], EAX
MOV EAX , $FFFFFFFF
INT $40
LEA EBP , [EBP -4]
RET
@59F235: RET
 
 
0
CELL FIELD .CODE
 
59F236 50 F2 59 00 00 05 2E 43 4F 44 45 A5 F1 59 00 00 PòY....CODE¥ñY..
59F246 00 00 00 00 00 00 00 00 00 00 C3 ..........Ã
 
2 CELLS FIELD .FIRST \ ¯®§¨æ¨ï ¢ ä ©«¥ (¢ ¡ ©â å)
 
59F251 70 F2 59 00 00 06 2E 46 49 52 53 54 3B F2 59 00 pòY....FIRST;òY.
59F261 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 89 ...............‰
59F271 45 FC B8 04 00 00 00 03 45 FC C3 Eü¸.....EüÃ
 
CELL FIELD .SIZE \ ᪮«ìª® ¡ ©â R/W
 
59F27C 90 F2 59 00 00 05 2E 53 49 5A 45 56 F2 59 00 00 òY....SIZEVòY..
59F28C 00 00 00 00 89 45 FC B8 0C 00 00 00 03 45 FC C3 ....‰Eü¸.....EüÃ
 
CELL FIELD .DATA \ 㪠§ â¥«ì ­  ¤ ­­ë¥
 
59F29C B0 F2 59 00 00 05 2E 44 41 54 41 81 F2 59 00 00 °òY....DATAòY..
59F2AC 00 00 00 00 89 45 FC B8 10 00 00 00 03 45 FC C3 ....‰Eü¸.....EüÃ
 
222 FIELD .NAME \ ASCIIZ-¨¬ï ä ©« 
 
59F2BC D0 F2 59 00 00 05 2E 4E 41 4D 45 A1 F2 59 00 00 ÐòY....NAME¡òY..
59F2CC 00 00 00 00 89 45 FC B8 14 00 00 00 03 45 FC C3 ....‰Eü¸.....EüÃ
 
CONSTANT FILE_STR
 
59F2DC F0 F2 59 00 00 08 46 49 4C 45 5F 53 54 52 C1 F2 ðòY...FILE_STRÁò
59F2EC 59 00 00 00 E8 47 2D FA FF F2 00 00 00 Y...èG-úÿò...
 
 
: WINDOW
 
59F2F9 10 F3 59 00 00 06 57 49 4E 44 4F 57 E1 F2 59 00 .óY...WINDOWáòY.
59F309 00 00 00 00 00 00 00 .......
 
draw_window CC_LINES ;
CALL @@draw_window
CALL @@CC_LINES
RET
 
ZZ=D4
/programs/develop/SPForth/src/KOL/.
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property