( ¯à ¢«¥¨¥ ¯ ¬ïâìî.
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"
;