ΠΡΠΈΠΌΠ΅Ρ 1:
length({{1,2}, {3,4}, {5,6}}) -- 3
ΠΡΠΈΠΌΠ΅Ρ 2:
length("") -- 0
ΠΡΠΈΠΌΠ΅Ρ 3:
length({}) -- 0
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
sequence
lock_file
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
include file.e
i1 = lock_file(fn, i2, s)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Ρ ΡΠ°Π·ΡΠ΅ΡΡΠ½ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π½Π΅ΠΊΠΈΠΉ Π·Π°ΠΏΠΈΡΠ°ΡΡΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΏΠΎΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π² ΡΠ°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ .
lock_file() ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ Π·Π°ΠΏΠΈΡΠ°Π΅Ρ ΠΎΡΠΊΡΡΡΡΠΉ ΡΠ°ΠΉΠ», fn, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΊ ΡΠ°ΠΉΠ»Ρ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΈΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠΈΡΠ΅Ρ Π² Π½Π΅Π³ΠΎ. ΠΠΎΠ΄ Linux/FreeBSD ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° Π·Π°ΠΌΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ i2. (ΠΠΎΠ΄ DOS32 ΠΈ WIN32 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ i2 ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΈΠΏΠ° integer.) ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ shared (ΠΎΠ±ΡΠΈΠΉ) Π·Π°ΠΌΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΡΠΎΡ ΡΠ°ΠΉΠ». ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ exclusive (ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ) Π·Π°ΠΌΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ, ΠΈ ΠΎΡ ΡΡΠ΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠΈΠ΅ Π·Π°ΠΌΠΊΠΈ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π²ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π°ΠΌΠΎΠΊ, ΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π°ΠΌΠΊΠ° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» file.e ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅:
global constant LOCK_SHARED = 1,
LOCK_EXCLUSIVE = 2
ΠΠΎΠ΄ DOS32 ΠΈ WIN32 Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ s. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ s Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠΈΠΏΠ° ΡΡΠ΄ ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΡ: {ΠΏΠ΅ΡΠ²ΡΠΉ_Π±Π°ΠΉΡ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ_Π±Π°ΠΉΡ}. Π ΡΠ΄ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡΡ ΡΡΠ°ΡΡΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ Π·Π°ΠΌΠΎΠΊ. ΠΠ°Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΡΡΠΎΠΉ ΡΡΠ΄ {}, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°ΠΏΠ΅ΡΠ΅ΡΡ Π²Π΅ΡΡ ΡΠ°ΠΉΠ». Π Π΄Π°Π½Π½ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ Π΄Π»Ρ Linux/FreeBSD ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΡ ΡΠ°ΠΉΠ», ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° s Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°Π²Π°ΡΡ {}.
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ, lock_file() Π²ΡΠ΄Π°ΡΡ 1. ΠΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, Π²ΡΠ΄Π°ΡΡΡΡ 0. lock_file() Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΠΏΠΎΠΊΠ° Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΌΡΡ ΡΠ²ΠΎΠΈ Π·Π°ΠΌΠΊΠΈ. ΠΠ°ΠΌ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ Π·Π°ΠΌΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΠΎΠ΄ Linux/FreeBSD ΡΡΠΈ Π·Π°ΠΌΠΊΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ "ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΠ²Π½ΡΠΌΠΈ", ΠΏΠΎΠ΄Π°ΡΠ»ΠΈΠ²ΡΠΌΠΈ Π·Π°ΠΌΠΊΠ°ΠΌΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Π½Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ. ΠΠ½ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΎΡΠΎΠ±ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π²ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Ρ Π±Π΅Π· ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π΅Π³ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎΠ΄ WIN32 ΠΈ DOS32 Π·Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
ΠΠΎΠ΄ DOS32 lock_file() Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ ΠΎΠ±ΡΠΈΠΉ. ΠΠ½Π΅ Windows, ΠΏΠΎΠ΄ ΡΠΈΡΡΠΎΠΉ MS-DOS, ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ΄Π°ΡΡ 0 (Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ).
ΠΡΠΈΠΌΠ΅Ρ:
include misc.e
include file.e
integer v
atom t
v = open("visitor_log", "a") -- ΠΎΡΠΊΡΡΡ Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
t = time()
while not lock_file(v, LOCK_EXCLUSIVE, {}) do
if time() t + 60 then
puts(1, "Π£ΠΆΠ΅ ΠΏΡΠΎΡΠ»Π° ΡΠ΅Π»Π°Ρ ΠΌΠΈΠ½ΡΡΠ° ... Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΠΆΠ΄Π°ΡΡ Π²Π΅ΡΠ½ΠΎ!\n")
abort(1)
end if
sleep(5) -- ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ ΠΈΠ΄ΡΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ
end while
puts(v, "ΠΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ\n")
unlock_file(v, {})
close(v)
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
unlock_file, flush, sleep
lock_memory
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°:
DOS32
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
include machine.e
lock_memory(a, i)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΠ΅Π΄ΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΡΠ°ΡΡΠΎΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ a, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π΄Π»ΠΈΠ½Ρ i, ΠΎΡ ΠΏΠ΅ΡΠ΅ΠΊΠ°ΡΠΊΠΈ Π½Π° Π΄ΠΈΡΠΊ.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½ΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎ Π²ΡΡ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. lock_memory() ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ DOS, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΠ³Π΄Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠ΅ΡΡΡ Π²ΡΡΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΊΠΎΠ΄Ρ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π²ΡΠ³ΡΡΠΆΠ΅Π½Ρ Π½Π° Π΄ΠΈΡΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Π·Π°ΡΠΈΡΠ° Π²ΡΠ΅Ρ ΡΡΠ°ΡΡΠΊΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
demo\dos32\hardint.ex
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
get_vector, set_vector
log
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
x2 = log(x1)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΠ΄Π°ΡΡ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΠΉ Π»ΠΎΠ³Π°ΡΠΈΡΠΌ x1.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊ Π°ΡΠΎΠΌΡ ΠΈΠ»ΠΈ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΡΠ΄Π°. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π»ΠΎΠ³Π°ΡΠΈΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π». ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΡΠ²Π°Π½Π° Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²Π·ΡΡΡ Π»ΠΎΠ³Π°ΡΠΈΡΠΌ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ Π½ΡΠ»Ρ.
ΠΡΠΈΠΌΠ΅Ρ:
a = log(100)
-- a Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ 4.60517
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
sin, cos, tan, sqrt
lower
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
include wildcard.e
x2 = lower(x1)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π°ΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΡΠ΄ Π½Π° Π»Π°ΡΠΈΠ½ΡΠΊΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡΠ΅ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
s = lower("Euphoria")
-- s Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ "euphoria"
a = lower('B')
-- a Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ 'b'
s = lower({"Euphoria", "Programming"})
-- s Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ {"euphoria", "programming"}
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
upper
machine_func
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
x1 = machine_func(a, x)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
Π‘ΠΌ. machine_proc() Π½ΠΈΠΆΠ΅
machine_proc
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
machine_proc(a, x)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΈΠ»ΠΈ Π·Π²ΡΠΊΠΎΠ²ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ. ΠΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π²ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° Euphoria. ΠΡΡΠΌΠΎΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»Π΅ΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠΆΠ΅Π»ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
machine_func
match
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
i = match(s1, s2)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ s1 ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² s2. ΠΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΎΡΡ, Π²ΡΠ΄Π°ΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° s2, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ (ΠΏΠ΅ΡΠ²ΡΠΉ) ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠΉ ΠΎΡΡΠ΅Π·ΠΎΠΊ, ΠΈΠ½Π°ΡΠ΅ Π²ΡΠ΄Π°ΡΡ 0.
ΠΡΠΈΠΌΠ΅Ρ:
location = match("pho", "Euphoria")
-- location Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ 3
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
find, find_from, compare, match_from, wildcard_match
match_from
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
i1 = match_from(s1, s2, i2)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ s1 ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² s2, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ° i2. ΠΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΎΡΡ, Π²ΡΠ΄Π°ΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° s2, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ (ΠΏΠ΅ΡΠ²ΡΠΉ) ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠΉ ΠΎΡΡΠ΅Π·ΠΎΠΊ, ΠΈΠ½Π°ΡΠ΅ Π²ΡΠ΄Π°ΡΡ 0. i2 ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π»ΡΠ±ΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΡ 1 Π΄ΠΎ Π΄Π»ΠΈΠ½Ρ s ΠΏΠ»ΡΡ 1. (Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ s.)
ΠΡΠΈΠΌΠ΅Ρ:
location = match_from("pho", "phoEuphoria", 4)
-- location Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ 6
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
find, find_from, match, compare, wildcard_match
mem_copy
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
mem_copy(a1, a2, i)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΠΎΠΏΠΈΡΡΠ΅Ρ ΡΡΠ°ΡΡΠΎΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ i Π±Π°ΠΉΡΠΎΠ², Ρ Π°Π΄ΡΠ΅ΡΠ° a2 ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ a1.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΠ°ΠΉΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ΄ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ a2 ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°Π΅Ρ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ a1.
mem_copy(a1, a2, i) ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ: poke(a1, peek({a2, i})), Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅.
ΠΡΠΈΠΌΠ΅Ρ:
dest = allocate(50)
src = allocate(100)
poke(src, {1,2,3,4,5,6,7,8,9})
mem_copy(dest, src, 9)
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
mem_set, peek, poke, allocate, allocate_low
mem_set
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
mem_set(a1, i1, i2)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ i2 Π±Π°ΠΉΡΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π°Π΄ΡΠ΅ΡΠ° a1, Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ i1.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΠ»Π°Π΄ΡΠΈΠ΅ 8 Π±ΠΈΡΠΎΠ² i1 Π±ΡΠ΄ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Π°ΠΉΡΠ΅.
mem_set(a1, i1, i2) ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ: poke(a1, repeat(i1, i2)) Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅.
ΠΡΠΈΠΌΠ΅Ρ:
destination = allocate(1000)
mem_set(destination, ' ', 1000)
-- 1000 ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π±Π°ΠΉΡΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ΄ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π² 32
-- (ASCII-ΠΊΠΎΠ΄ Π΄Π»Ρ ' ')
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅:
mem_copy, peek, poke, allocate, allocate_low
message_box
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°:
WIN32
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
include msgbox.e
i = message_box(s1, s2, x)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΠ²ΠΎΠ΄ΠΈΡ ΠΎΠΊΠ½ΠΎ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ s2, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΡΡΡΠΎΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ s1. x ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ. x ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π°ΡΠΎΠΌΠΎΠΌ ΠΈΠ»ΠΈ ΡΡΠ΄ΠΎΠΌ. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΄Π°ΡΡ 0, ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π²ΡΠ²Π΅ΡΡΠΈ ΠΎΠΊΠ½ΠΎ.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ msgbox.e, Π³Π΄Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½ Π΄Π»Ρ x ΠΈ i.
ΠΡΠΈΠΌΠ΅Ρ:
response = message_box("ΠΠ΅Π»Π°Π΅ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ?",
"ΠΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°",
MB_YESNOCANCEL)
if response = IDCANCEL or response = IDNO then
abort(1)
end if
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
demo\win32\email.exw
mouse_events
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°:
DOS32
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
include mouse.e
mouse_events(i)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΌΡΡΠΈΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ get_mouse(). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ get_mouse() Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΡΡ . mouse_events() ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ°ΠΏΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠ½Ρ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
Π₯ΠΎΡΠΎΡΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ, ΠΊΡΠΎΠΌΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ MOVE, ΡΡΠΎΠ±Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠΏΡΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.