Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Euphoria. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΠ΅ руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 22

Автор W Cat

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ:

ПослС ΠΈΠΌΠ΅Π½ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹, Π½ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случая ΠΏΠΎΠ΄ DOS/Windows, Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ диска, Π³Π΄Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C:\

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


sequence s

s = current_dir()

-- s Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ "C:\EUPHORIA\DOC", Ссли Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅


Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅:

dir, chdir, getenv


cursor


ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°:

WIN32, DOS32

Бинтаксис:

include graphics.e

cursor(i)

ОписаниС:

Π—Π°Π΄Π°Ρ‘Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ курсора. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° graphics.e содСрТит Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ константы:


global constant NO_CURSOR = #2000,

UNDERLINE_CURSOR = #0607,

THICK_UNDERLINE_CURSOR = #0507,

HALF_BLOCK_CURSOR = #0407,

BLOCK_CURSOR = #0007


Вторая ΠΈ чСтвСртая ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ (слСва) Π΄Π°ΡŽΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рядов пиксСлов Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ курсора. ΠžΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ†ΠΈΡ„Ρ€Ρ‹ зависит, Π±ΡƒΠ΄Π΅Ρ‚ курсор Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. НапримСр, #0407 Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ с 4-Π³ΠΎ ΠΏΠΎ 7-ΠΎΠΉ ряд пиксСлов.

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ:

Π’ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Ρ… экранных Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… курсор Π½Π΅ отобраТаСтся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² тСкстовых.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


cursor(BLOCK_CURSOR)


Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅:

graphics_mode, text_rows


custom_sort


Бинтаксис:

include sort.e

s2 = custom_sort(i, s1)

ОписаниС:

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ элСмСнты ряда s1, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ) i. Π’Ρ‹Π΄Π°Ρ‘Ρ‚ отсортированный ряд.

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ:

Заданная Π²Π°ΠΌΠΈ заказная ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰Π°Ρ функция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π΄Π²ΡƒΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Euphoria-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ compare(). Она Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ -1, 0 ΠΈΠ»ΠΈ +1.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

demo\csort.ex

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅:

sort, compare, routine_id


date


Бинтаксис:

s = date()

ОписаниС:

Π’Ρ‹Π΄Π°Ρ‘Ρ‚ ряд со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ:


{Π³ΠΎΠ΄, -- начиная с 1900

мСсяц, -- ΡΠ½Π²Π°Ρ€ΡŒ = 1

дСнь, -- дСнь мСсяца, начиная с 1

час, -- ΠΎΡ‚ 0 Π΄ΠΎ 23

ΠΌΠΈΠ½ΡƒΡ‚Π°, -- ΠΎΡ‚ 0 Π΄ΠΎ 59

сСкунда, -- ΠΎΡ‚ 0 Π΄ΠΎ 59

дСнь Π½Π΅Π΄Π΅Π»ΠΈ, -- Π²ΠΎΡΠΊΡ€Π΅ΡΠ΅Π½ΡŒΠ΅ = 1

дСнь Π³ΠΎΠ΄Π°} -- 1 января = 1


ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


now = date()

-- now Ρ€Π°Π²Π½ΠΎ: {95,3,24,23,47,38,6,83}

-- Ρ‚.Π΅. пятница, 24 ΠΌΠ°Ρ€Ρ‚Π° 1995 Π³ΠΎΠ΄Π°, 23 часа 47 ΠΌΠΈΠ½ΡƒΡ‚ 38 сСкунд, 83-ΠΈΠΉ дСнь Π³ΠΎΠ΄Π°


ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ:

Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π°, выдаваСмая для Π³ΠΎΠ΄Π°, являСтся числом Π»Π΅Ρ‚, начиная с 1900, Π° Π½Π΅ послСдними 2-мя Ρ†ΠΈΡ„Ρ€Π°ΠΌΠΈ Π³ΠΎΠ΄Π°. Π’ 2000 Π³ΠΎΠ΄Ρƒ эта Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° составила 100. Π’ 2001 это Π±Ρ‹Π»ΠΎ 101 ΠΈ Ρ‚.Π΄. ЕстСствСнно, часы ΠΈ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ установлСны Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ врСмя ΠΈ Π΄Π°Ρ‚Ρƒ.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅:

time


define_c_func


Бинтаксис:

include dll.e

i1 = define_c_func(x1, x2, s1, i2)

ОписаниС:

Π’Ρ‹Π΄Π°Ρ‘Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π°. АргумСнтами слуТат характСристики Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ i1 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π°Π»Π΅Π΅ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ c_func(), которая ΠΈ запускаСт Π·Π°Π΄Π°Π½Π½ΡƒΡŽ внСшнюю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° исполнСниС ΠΈΠ· Euphoria.

Когда Π²Ρ‹ Π·Π°Π΄Π°Ρ‘Ρ‚Π΅ характСристики Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ x1 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой адрСс систСмной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, содСрТащСй эту Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. АдрСс Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open_dll(). АргумСнт x2 Π·Π°Π΄Π°Ρ‘Ρ‚ имя Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая вас интСрСсуСт. Если define_c_func() Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π°Π΄Π°Π½Π½ΡƒΡŽ Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² качСствС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΎΠ½Π° Π²Ρ‹Π΄Π°Ρ‘Ρ‚ -1. На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Windows Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ символ '+'. Он ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Euphoria, Ρ‡Ρ‚ΠΎ для Π²Ρ‹Π·ΠΎΠ²Π° Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдусмотрСны ΠΏΡ€Π°Π²ΠΈΠ»Π° соглашСния cdecl. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Euphoria считаСт, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π‘ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ соглашСния stdcall.

Когда Π²Ρ‹ Π·Π°Π΄Π°Ρ‘Ρ‚Π΅ характСристики Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π°, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ x1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ пустым рядом, "" ΠΈΠ»ΠΈ {}, Π° x2 - ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ адрСс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π°. Π‘Π°ΠΉΡ‚Ρ‹ машинного ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² участкС памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ allocate(), которая ΠΈ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ адрСс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄Π°Π»Π΅Π΅ для размСщСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π° ΠΈ задания Π΅Ρ‘ характСристик. На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Windows Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ соглашСния stdcall, Π½ΠΎ Ссли Π²Π°ΠΌ вмСсто этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ использованиС ΠΏΡ€Π°Π²ΠΈΠ» cdecl, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ x2 ΠΊΠ°ΠΊ ряд {'+', адрСс} вмСсто ΠΏΠΎΠ΄Π°Ρ‡ΠΈ значСния адрСса ΠΊΠ°ΠΊ Π°Ρ‚ΠΎΠΌΠ°.

АргумСнт s1 прСдставляСт собой список Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. АргумСнт i2 Π·Π°Π΄Π°Ρ‘Ρ‚ Ρ‚ΠΈΠΏ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Ρ‚ΠΈΠΏΠΎΠ² Π‘ΠΈ, содСрТащий ΠΈΡ… опрСдСлСния, находится Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ dll.e, ΠΈ эти ΠΆΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для назначСния Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π°:


global constant C_CHAR = #01000001,

C_UCHAR = #02000001,

C_SHORT = #01000002,

C_USHORT = #02000002,

C_INT = #01000004,

C_UINT = #02000004,

C_LONG = C_INT,

C_ULONG = C_UINT,

C_POINTER = C_ULONG,

C_FLOAT = #03000004,

C_DOUBLE = #03000008


Π‘ΠΈ-функция, характСристики ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π·Π°Π΄Π°Ρ‘Ρ‚Π΅ с использованиСм define_c_func(), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создана с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ транслятора с Euphoria Π½Π° Π‘ΠΈ. Π’ этом случаС Π²Ρ‹ смоТСтС ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠΎΠ² Euphoria, Π° ΠΎΠ½Π° смоТСт Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠΎΠ² Euphoria. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Ρ‚ΠΈΠΏΠΎΠ² Euphoria с ΠΈΡ… опрСдСлСниями находится Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ dll.e:


global constant

E_INTEGER = #06000004,

E_ATOM = #07000004,

E_SEQUENCE= #08000004,

E_OBJECT = #09000004


ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ:

АргумСнты Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ любого цСлочислСнного Ρ‚ΠΈΠΏΠ° Π‘ΠΈ ΠΈ Ρ‚ΠΈΠΏΠ° указатСля (ΠΏΠΎΠΉΠ½Ρ‚Π΅Ρ€Π°) Π‘ΠΈ. Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ этих ΠΆΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‚ΡΡ Π‘ΠΈ-функциями. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности ΠΈΠ»ΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Ρ‚ΠΎ Π² ΠΈΡ… качСствС ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Ρ‚ΠΎΠΌΡ‹ Euphoria, Π° Ссли Π‘ΠΈ-функция Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ эта Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Π΄Π°Π»Π΅Π΅ ΠΊΠ°ΠΊ Π°Ρ‚ΠΎΠΌ Euphoria.

АргумСнты с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, для прСдставлСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… достаточно 4-Ρ… ΠΈΠ»ΠΈ мСньшС Π±Π°ΠΉΡ‚ΠΎΠ², всС ΠΏΠΎΠ΄Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ порядком, поэтому Π½Π΅Ρ‚ нСобходимости Π±Ρ‹Ρ‚ΡŒ слишком ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ, выбирая Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏ для обозначСния 4-Ρ… Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, строгоС Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ со Π·Π½Π°ΠΊΠΎΠΌ ΠΈ Π±Π΅Π· Π·Π½Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Π’ настоящСС врСмя Π½Π΅ сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΠ΄Π°Ρ‡ΠΈ Π² Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ структуры Π‘ΠΈ ΠΏΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ ΠΈΠ»ΠΈ получСния структуры Π‘ΠΈ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ лишь ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ структуру ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²ΠΈΠ΄Π΅ указатСля Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ структуру.

Если Π²Ρ‹ Π½Π΅ заинтСрСсованы Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈ использовании Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π²Π°ΠΌ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠ°Ρ€Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ define_c_proc() ΠΈ c_proc().

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ exw.exe для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ cdecl Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚ΠΈΠΏΠ° с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, такая комбинация ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ обусловлСно особСнностями компилятора Watcom C (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ exw.exe), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСстандартным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ обходится с Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ cdecl.

ΠŸΠΎΠ΄Π°Ρ‡Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ машинного ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ быстрСС, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ c_func(), Π° Π½Π΅ call(), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² этом случаС Π½Π΅Ρ‚ нСобходимости Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΈ atom_to_float64() ΠΈ poke(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² памяти.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ex.exe (DOS) для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ осущСствляСт Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Watcom (Π° эти ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠΆΠ΅ сами ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ матСматичСскому сопроцСссору, Ссли ΠΎΠ½ доступСн), поэтому Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Π°ΡŽΡ‚ΡΡ ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°Ρ€Π΅ цСлочислСнных рСгистров, Π° Π½Π΅ Π² рСгистрах ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Π’Π°ΠΌ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ΄, Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Watcom, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² точности, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄Π°Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


atom user32

integer LoadIcon


-- ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ user32.dll - ΠΎΠ½Π° содСрТит Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ LoadIconA

user32 = open_dll("user32.dll")


-- Π‘ΠΈ-функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π‘ΠΈ ΠΈ Ρ†Π΅Π»ΠΎΠ΅ Π‘ΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

-- Π‘ΠΈ-функция Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ Π‘ΠΈ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

LoadIcon = define_c_func(user32, "LoadIconA",

{C_POINTER, C_INT}, C_INT)

-- ΠœΡ‹ использовали здСсь "LoadIconA", Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ LoadIconA

-- Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ stdcall, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚

-- всС стандартныС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ .dll Π² систСмС WIN32 API.

-- Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° cdecl, ΠΌΡ‹ Π±Ρ‹ использовали "+LoadIconA".


if LoadIcon = -1 then

puts(1, "LoadIconA Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°!\n")

end if


Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅:

euphoria\demo\callmach.ex, c_func, define_c_proc, c_proc, open_dll, platform_r.htm


define_c_proc


Бинтаксис:

include dll.e

i1 = define_c_proc(x1, x2, s1)

ОписаниС:

Π’Ρ‹Π΄Π°Ρ‘Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ машинного ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρƒ Π² качСствС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Euphoria. АргумСнтами слуТат характСристики Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). Π’Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ i1 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π°Π»Π΅Π΅ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ c_proc(), которая ΠΈ запускаСт Π·Π°Π΄Π°Π½Π½ΡƒΡŽ внСшнюю ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° исполнСниС ΠΈΠ· Euphoria ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ.