/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üPEü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üPEü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 |