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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Linux. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 125

Автор Майкл ДТонсон

Одной ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SLtt_get_terminfo() являСтся установка физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° экрана Π² соотвСтствии с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ количСствС строк ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ хранится, соотвСтствСнно, Π² SLtt_Screen_Rows ΠΈ SLtt_Screen_Cols. Π₯отя Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹, Π² настоящСС врСмя ΡˆΠΈΡ€ΠΎΠΊΡƒΡŽ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π»ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹ с измСняСмыми Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, xterms). ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, принятому ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Для компСнсации этой нСточности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° S-Lang позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ исходныС значСния SLtt_Screen_Rows ΠΈ SLtt_Screen_Cols послС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SLtt_get_terminfo(). Π’ систСмС Unix Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° всСгда ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ TIOCGWINSZ управлСния Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ, которая ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описана Π² Π³Π»Π°Π²Π΅ 16.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ управлСния экраном Π² S-Lang ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто:

void SLsmg_init_smg(void);

SLsmg_init_smg()

24.2.2. ОбновлСниС экрана

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ SLsmg смогут Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π½Π° физичСском Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SLsmg_refresh(). Π­Ρ‚Π° функция Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния, Π° обновляСт физичСский Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ рисования Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π½Π° экранС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΅Π΅ послСднСго Π²Ρ‹Π·ΠΎΠ²Π°.

24.2.3. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора

Как ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, курсор Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ S-Lang для обозначСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, принятой ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, для Π²Π²ΠΎΠ΄Π° тСкста ΠΈ для подсказки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ S-Lang ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ курсор с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

extern void SLsmg_gotorc(int row, int column);

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» экрана опрСдСляСтся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (0, 0), Π° Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» β€” (SLtt_Screen_Rows - 1, SLtt_Screen_Cols - 1).

24.2.4. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ управлСния экраном

Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ SLsmg, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ S-Lang ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС ΠΎΠ± этом, послС Ρ‡Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° освободит Π±ΡƒΡ„Π΅Ρ€Ρ‹ ΠΈ восстановит состояниС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ курсор Π²Π½ΠΈΠ· экрана ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ дисплСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смог ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

24.2.5. Π‘ΠΊΠ΅Π»Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ управлСния экраном

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая сначала ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ возмоТности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ S-Lang для управлСния экраном, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ…. Π₯отя эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия, ΠΎΠ½Π° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ основы использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй SLsmg Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ S-Lang.

 1: /* slinit.с */

 2:

 3: #include <slang/slang.h>

 4: #include <stdio.h>

 5: #include <sys/ioctl.h>

 6: #include <termios.h>

 7:

 8: int main(void) {

 9:  struct winsize ws;

10:

11:  /* ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ stdout */

12:  if (ioctl(1, TIOCGWINSZ, &ws)) {

13:   perror("сбой ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π°");

14:   return 1;

15:  }

16:

17:  SLtt_get_terminfo();

18:

19:  SLtt_Screen_Rows = ws.ws_row;

20:  SLtt_Screen_Cols = ws.ws_col;

21:

22:  SLsmg_init_smg();

23:

24:  /* здСсь находится ядро ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ */

25:

26:  SLsmg_gotorc(SLtt_Screen_Rows - 1, 0);

27:  SLsmg_refresh();

28:  SLsmg_reset_smg();

29:  SLang_reset_tty();

30:

31:  return 0;

32: }

24.2.6. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€ΠΎΠ² символов

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ VT100, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ достаточно Ρ‚ΠΎΡ‡Π½ΠΎ эмулируСт консоль Linux) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π° Π½Π°Π±ΠΎΡ€Π° символов. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ISO-8859-1 ΠΈΠ»ΠΈ Π΅ΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ; Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… символов. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° S-Lang позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ‚Π΅Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для вычСрчивания символов.

void SLsmg_set_char_set(int useAlternate)

Если Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SLsmg_set_char_set() Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π½Π° экранС Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹Π΅ символы, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° символов. Если Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SLsmg_set_char_set() Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‚ΠΎ это ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, вслСдствиС Ρ‡Π΅Π³ΠΎ Π½Π° экранС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ символы.

S-Lang опрСдСляСт Π½Π°Π±ΠΎΡ€ символичСских ΠΈΠΌΠ΅Π½ для Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… символов, входящих Π² Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€. Π’ Ρ‚Π°Π±Π». 24.1 пСрСчислСны доступныС Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ символы ΠΈ ΠΈΠΌΠ΅Π½Π° S-Lang для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ….


Π’Π°Π±Π»ΠΈΡ†Π° 24.1. Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ символы

Π“Π»ΠΈΡ„ БимволичСская константа ─ SLSMG_HLINE_CHAR β”‚ SLSMG_VLINE_CHAR β”Œ SLSMG_ULCORN_CHAR ┐ SLSMG_URCORN_CHAR β”” SLSMG_LLCORN_CHAR β”˜ SLSMG_LRCORN_CHAR ─ SLSMG_RTEE_CHAR β”œ SLSMG_LTEE_CHAR ┬ SLSMG_UTEE_CHAR β”΄ SLSMG_DTEE_CHAR β”Ό SLSMG_PLUS_CHAR

24.2.7. Π—Π°ΠΏΠΈΡΡŒ Π½Π° экран

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ строки Π½Π° экран ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ S-Lang ΠΌΠΎΠΆΠ½ΠΎ нСсколькими Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами, ΡΡƒΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°. Π”Π°Π»Π΅Π΅ приводится ΠΏΠΎΠ»Π½Ρ‹ΠΉ список Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для этой Ρ†Π΅Π»ΠΈ.

void SLsmg_write_char(char ch);

void SLsmg_write_string(char * str);

void SLsmg_write_nchars(char * chars, int length);

void SLsmg_write_nstring(char * str, int length);

void SLsmg_printf(char * format, ...);

void SLsmg_vprintf(char * format, va_list args);

void SLsmg_write_wrapped_string(char * str, int row, int column, int height,

int width, int fill);

КаТдая ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ SLsmg_write_wrapped_string(), записываСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ строку Π² Π±ΡƒΡ„Π΅Ρ€ экрана[170] Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΈ Π½Π°Π±ΠΎΡ€ символов. Однако всС ΠΎΠ½ΠΈ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊΡƒΡŽ строку Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ информация Π±ΡƒΠ΄Π΅Ρ‚ записана, курсор пСрСмСстится Π² ΠΊΠΎΠ½Π΅Ρ† Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ для этого области, ΠΊΠ°ΠΊ ΠΈ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. Π›ΡŽΠ±Π°Ρ строка, выходящая Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ края экрана, усСкаСтся, Π° Π½Π΅ пСрСносится Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ строку. Π₯отя этот способ отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΎΠ½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° полноэкранных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСкст, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку, искаТаСт содСрТимоС экрана.

SLsmg_write_char() Π‘Ρ€Π΅Π΄ΠΈ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° экран это самая простая функция. Она записываСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ символ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ курсор. SLsmg_write_string() Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡƒΡŽ Π΅ΠΉ строку. SLsmg_write_nchars() Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран символы length, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ chars. Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΊΠΎΠ½Ρ†Π° строки NULL игнорируСтся β€” Ссли ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½, выводится комбинация '\0' ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ послС окончания строки. SLsmg_write_nstring() Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран Π½Π΅ Π±ΠΎΠ»Π΅Π΅ length символов ΠΈΠ· str. Если str содСрТит ΠΌΠ΅Π½Π΅Π΅ length символов, ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ пространство заполняСтся ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ. SLsmg_printf() Как ΠΌΠΎΠΆΠ½ΠΎ ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf(), форматируя ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для форматирования. ПослС этого Π½Π° экран выводится сформатированная строка. SLsmg_vprintf() Подобно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ vfprintf() ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘. Π­Ρ‚Π° функция ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° va_arg, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для форматирования ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π—Π°Ρ‚Π΅ΠΌ Π½Π° экран выводится сформатированная строка. SLsmg_write_wrapped_string() Π₯отя S-Lang отсСкаСт строки, Π° Π½Π΅ пСрСносит ΠΈΡ… Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки, ΠΎΠ½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для записи строк, пСрСнСсСнных Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ экрана. Ѐункция SLsmg_write_wrapped_string() записываСт строку str Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, которая начинаСтся Π² row ΠΈ column ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ height ΠΈ width. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ эта ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° осущСствляСт пСрСнос Π³Ρ€Π°Π½ΠΈΡ† слов, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ \n ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку. Если послСдний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ fill ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ каТдая строка Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΠΎ всСй ΡˆΠΈΡ€ΠΈΠ½Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ области, Π° ΠΏΡ€ΠΈ нСобходимости Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

24.2.8. РисованиС Π»ΠΈΠ½ΠΈΠΉ ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²