| terminfo(5) | File formats | terminfo(5) |
نام (NAME)
terminfo - پایگاه داده قابلیتهای پایانه (terminal capability database)
خلاصه دستور (SYNOPSIS)
/usr/share/terminfo/*/*
توضیحات (DESCRIPTION)
Terminfo یک پایگاه داده برای توصیف پایانهها است که توسط برنامههای مبتنی بر صفحه مانند nvi(1)، lynx(1)، mutt(1) و دیگر برنامههای curses، با استفاده از فراخوانیهای سطح بالا به کتابخانههایی مانند curses(3X) به کار میرود. همچنین از طریق فراخوانیهای سطح پایین توسط برنامههای غیر curses که ممکن است مبتنی بر صفحه باشند (مانند clear(1)) یا غیر مبتنی بر صفحه (مانند tabs(1)) استفاده میشود.
Terminfo پایانهها را با ارائهٔ مجموعهای از قابلیتهایی که دارند، با مشخص کردن نحوهٔ انجام عملیات صفحه، و با تعیین نیازمندیهای فاصلهگذاری (padding) و توالیهای مقداردهی اولیه توصیف میکند.
این سند نسخهٔ 6.6 از ncurses (وصلهٔ 20251230) را توصیف میکند.
نحو ورودی terminfo (terminfo Entry Syntax)
ورودیها در terminfo از دنبالهای از فیلدها تشکیل شدهاند:
- هر فیلد با یک کاما “,” پایان مییابد (کاماهای درون متن را میتوان با یک اسلش وارونه گریز داد یا به صورت “\054” نوشت).
- فاصلههای خالی (white space) میان فیلدها نادیده گرفته میشوند.
- نخستین فیلد در یک ورودی terminfo از ستون اول آغاز میشود.
- از خطوط جدید و فاصلههای خالی ابتدای سطر (فاصلهها یا تبها) میتوان برای قالببندی ورودیها جهت خوانایی بهتر استفاده کرد. این موارد از ورودیهای تجزیهشده حذف میشوند.
- گزینههای -f و -W در infocmp برای قالببندی عبارات if-then-else یا اعمال حداکثر پهنای خط به این ویژگی تکیه دارند. شرح پایانهٔ قالببندیشدهٔ حاصل میتواند توسط tic خوانده شود.
- •
- نخستین فیلد برای هر پایانه، نامهایی را مشخص میکند که پایانه با آنها شناخته میشود، که با نویسههای “|” از یکدیگر جدا شدهاند.
- نخستین نام ارائهشده، متداولترین کوتهنوشت برای پایانه (نام اصلی آن) است، آخرین نام ارائهشده باید نامی طولانی باشد که پایانه را به طور کامل مشخص کند (نگاه کنید به longname(3X))، و تمامی نامهای دیگر به عنوان همنامها (نامهای مستعار یا aliases) برای نام پایانهٔ اصلی در نظر گرفته میشوند.
- استاندارد X/Open Curses توصیه میکند که تمام نامها به جز نام آخر باید با حروف کوچک و بدون فاصله باشند؛ نام آخر ممکن است برای خوانایی شامل حروف بزرگ و فاصلهها باشد.
- این پیادهسازی چندان سختگیر نیست؛ حروف بزرگ و کوچک ترکیبی را در نام اصلی و نامهای مستعار مجاز میداند. اگر آخرین نام فاقد فاصلههای درونی باشد، به آن اجازه میدهد تا هم یک نام مستعار و هم یک نام تفصیلی باشد (اما در مورد این ابهام هشدار خواهد داد).
- •
- سطرهایی که با “#” در ستون اول آغاز میشوند، به عنوان توضیح (کامنت) تلقی میگردند.
- در حالی که سطرهای توضیح در هر نقطهای معتبر هستند، خروجی captoinfo و infotocap (نامهای مستعار برای tic) توضیحات را جابهجا میکنند تا فقط میان ورودیها قرار گیرند.
نامهای پایانه (به جز آخرین ورودی تفصیلی) باید با استفاده از قراردادهای زیر انتخاب شوند. قطعهٔ سختافزاری خاصی که پایانه را تشکیل میدهد باید یک نام ریشه داشته باشد، مانند “hp2621”. این نام نباید حاوی خط تیره باشد. حالتهایی که سختافزار میتواند در آنها قرار گیرد، یا اولویتهای کاربر، باید با افزودن یک خط تیره و پسوند حالت نشان داده شوند. بنابراین، یک vt100 در حالت ۱۳۲ ستونی vt100-w خواهد بود. در صورت امکان، پسوندهای زیر باید استفاده شوند:
| پسوند | مثال | معنا |
| -nn | aaa-60 | تعداد خطوط روی صفحه |
| -np | c100-4p | تعداد صفحات حافظه |
| -am | vt100-am | با حاشیههای خودکار (معمولاً پیشفرض) |
| -m | ansi-m | حالت تکرنگ (mono)؛ حذف رنگ |
| -mc | wy30-mc | کوکی جادویی؛ فاصلهها هنگام برجستهسازی |
| -na | c100-na | بدون کلیدهای پیکان (باقی گذاشتن آنها در حالت محلی) |
| -nam | vt100-nam | بدون حاشیههای خودکار |
| -nl | hp2621-nl | بدون خط وضعیت |
| -ns | hp2626-ns | بدون خط وضعیت |
| -rv | c100-rv | ویدئوی معکوس (reverse video) |
| -s | vt100-s | فعالسازی خط وضعیت |
| -vb | wy370-vb | استفاده از زنگ بصری بهجای بوق |
| -w | vt100-w | حالت عریض (بیش از ۸۰ ستون، معمولاً ۱۳۲) |
برای اطلاعات بیشتر در مورد قراردادهای نامگذاری پایانه، صفحهٔ راهنمای term(7) را ببینید.
نحو قابلیتهای terminfo (terminfo Capabilities Syntax)
ورودی terminfo از چندین قابلیت تشکیل شده است، یعنی ویژگیهایی که پایانه دارد، یا روشهایی برای به کار انداختن ویژگیهای پایانه.
پس از فیلد اول (که نام یا نامهای ورودی پایانه را مشخص میکند)، باید یک یا چند فیلد قابلیت وجود داشته باشد. اینها نامهای بولی، عددی یا رشتهای به همراه مقادیر متناظر هستند:
- قابلیتهای بولی زمانی که حضور دارند مقدار درستی (true) و در صورت عدم حضور نادرستی (false) دارند. هیچ مقدار صریحی برای قابلیتهای بولی وجود ندارد.
- قابلیتهای عددی دارای یک “#” در پسِ نام خود هستند، که به دنبال آن یک مقدار عدد صحیح دهدهی بدون علامت میآید.
- قابلیتهای رشتهای دارای یک “=” در پسِ نام خود هستند، که به دنبال آن یک رشته از نویسهها که مقدار قابلیت را میسازند قرار میگیرد.
- قابلیتهای رشتهای را میتوان به چندین خط تقسیم کرد، درست همانطور که فیلدهای تشکیلدهندهٔ یک ورودی پایانه میتوانند به چندین خط تقسیم شوند. در حالی که فاصلهها میان فیلدها نادیده گرفته میشوند، فاصلههای قرارگرفته در درون یک مقدار رشتهای حفظ میشوند، به جز فاصلههای ابتدایی یک سطر.
هر قابلیتی را میتوان لغو (cancel) کرد، یعنی از ورودی پایانه حذف نمود، با قرار دادن “@” در پسِ نام آن بهجای مقدار قابلیت.
پایانههای مشابه (Similar Terminals)
اگر دو پایانهٔ بسیار مشابه وجود داشته باشد، یکی (گونه یا variant) را میتوان به عنوان عیناً همانند دیگری (پایه یا base) با برخی استثناها تعریف کرد. در تعریف گونه، قابلیت رشتهای use را میتوان همراه با نام پایانهٔ پایه آورد:
- قابلیتهایی که پیش از use آورده شدهاند، بر قابلیتهای نوع پایه که توسط use نامگذاری شده است، اولویت دارند (آنها را رونویسی میکنند).
- اگر چندین قابلیت use وجود داشته باشد، آنها به ترتیب معکوس ادغام میشوند. یعنی، راستترین ارجاع use ابتدا پردازش میشود، سپس ارجاع سمت چپ آن، و به همین ترتیب.
- قابلیتهایی که بهطور صریح در ورودی مشخص شدهاند بر قابلیتهایی که از طریق ارجاعات use وارد میشوند اولویت دارند.
یک قابلیت را میتوان با قرار دادن xx@ در سمت چپِ ارجاعِ use که آن را وارد میکند لغو کرد، که در آن xx همان قابلیت است. به عنوان مثال، ورودیِ
2621-nl, smkx@, rmkx@, use=2621,
پایانهٔ 2621-nl را تعریف میکند که فاقد قابلیتهای smkx یا rmkx است، و بنابراین برچسبهای کلیدهای تابعی را هنگام قرار داشتن در حالت بصری روشن نمیکند. این ویژگی برای حالتهای مختلف یک پایانه، یا برای ترجیحات مختلف کاربر مفید است.
ورودیِ گنجاندهشده از طریق use میتواند حاوی قابلیتهای لغو شده باشد، که همان اثری را دارد که گویی آن لغوها درونِ خودِ ورودی پایانهٔ استفادهکننده قرار داشتهاند.
قابلیتهای استاندارد (Standard Capabilities)
جداول قابلیتهایی که ncurses در توصیف نوع پایانهٔ terminfo شناسایی میکند و در دسترسِ کدهای استفادهکننده از terminfo قرار میدهد، در ادامه آمدهاند.
- نام قابلیت نمادی را مشخص میکند که برنامهنویس با استفاده از رابط برنامهنویسی کاربردی (API) terminfo به آن قابلیت دسترسی پیدا میکند.
- کد TI (terminfo) نام کوتاهی است که فرد هنگام تدوین یا بهروزرسانی ورودی نوع پایانه استفاده میکند.
- در صورت امکان، این کدها همانند یا مشابه کدهای استاندارد ANSI X3.64-1979 هستند (که اکنون با ECMA-48 جایگزین شده است، که از نامهای یکسان یا بسیار مشابه استفاده میکند). همچنین معناشناسی آنها برای مطابقت با آن مشخصات در نظر گرفته شده است.
- کدهای terminfo محدودیت سختگیرانهای برای طول ندارند، اما ncurses یک محدودیت غیررسمی ۵ نویسهای را حفظ میکند تا آنها را کوتاه نگه دارد و امکان دهد که تبها در پروندهٔ مبدأ Caps بهخوبی تراز شوند. (با این حال، برخی از کدهای استاندارد از این حد فراتر میروند.)
- کد TC (termcap) کدی است که توسط API متناظر در ncurses استفاده میشود. (برخی از قابلیتها جدید هستند، و نامهایی دارند که از BSD termcap سرچشمه نگرفتهاند.)
- فیلد توضیحات تلاش میکند معنای هر قابلیت را بیان کند.
فیلد توضیحات از چند نشانهگذاری بهره میبرد.
- (P)
- نشان میدهد که میتوان فاصلهگذاری (padding) را مشخص کرد.
- (P*)
- نشان میدهد که فاصلهگذاری ممکن است متناسب با تعداد خطوط خروجیِ تحت تأثیر تغییر کند.
- #i
- نشاندهندهٔ i-امین پارامتر یک قابلیت رشتهای است؛ برنامهنویس باید رشته را به همراه پارامترهای فهرستشده به tparm(3X) ارسال کند.
- اگر در
توضیحات
هیچ
پارامتری
ذکر نشده
باشد،
ارسال رشته
به tparm(3X) ممکن
است رفتار
غیرمنتظرهای
ایجاد کند،
برای نمونه
اگر رشته
شامل
علامتهای
درصد باشد.
| Code | |||
| Boolean Capability Name | TI | TC | Description |
| auto_left_margin | bw | bw | حرکت cub1 از ستون ۰ به آخرین ستون میپیچد |
| auto_right_margin | am | am | پایانه دارای حاشیههای خودکار است |
| no_esc_ctlc | xsb | xb | beehive (کلید f1=escape، کلید f2=ctrl C) |
| ceol_standout_glitch | xhp | xs | حالت برجسته با بازنویسی پاک نمیشود (hp) |
| eat_newline_glitch | xenl | xn | خط جدید پس از ۸۰ ستون نادیده گرفته میشود (concept) |
| erase_overstrike | eo | eo | میتواند روینویسیها را با فاصله پاک کند |
| generic_type | gn | gn | نوع خط عمومی |
| hard_copy | hc | hc | پایانه با نسخهٔ چاپی سخت (hardcopy) |
| has_meta_key | km | km | دارای کلید متا است (یعنی بیت هشتم را تنظیم میکند) |
| has_status_line | hs | hs | دارای خط وضعیت اضافی است |
| insert_null_glitch | in | in | حالت درج میان نویسههای تهی تمایز قائل میشود |
| memory_above | da | da | نمایش ممکن است در بالای صفحه حفظ شود |
| memory_below | db | db | نمایش ممکن است در پایین صفحه حفظ شود |
| move_insert_mode | mir | mi | حرکت در حالت درج ایمن است |
| move_standout_mode | msgr | ms | حرکت در حالت برجسته ایمن است |
| over_strike | os | os | پایانه میتواند روینویسی کند |
| status_line_esc_ok | eslok | es | میتوان از کلید گریز در خط وضعیت استفاده کرد |
| dest_tabs_magic_smso | xt | xt | تبهای مخرب، نویسهٔ جادویی standout (t1061) |
| tilde_glitch | hz | hz | نمیتواند ~ را چاپ کند (Hazeltine) |
| transparent_underline | ul | ul | نویسهٔ زیرخط روینویسی میکند |
| xon_xoff | xon | xo | پایانه از دستتکانی xon/xoff استفاده میکند |
| needs_xon_xoff | nxon | nx | فاصلهگذاری (padding) کار نخواهد کرد، xon/xoff الزامی است |
| prtr_silent | mc5i | 5i | چاپگر بر روی صفحه انعکاس نخواهد داشت |
| hard_cursor | chts | HC | مکاننما بهسختی دیده میشود |
| non_rev_rmcup | nrrmc | NR | دستور smcup اثر rmcup را معکوس نمیکند |
| no_pad_char | npc | NP | نویسهٔ فاصلهگذاری وجود ندارد |
| non_dest_scroll_region | ndscr | ND | ناحیهٔ پیمایش غیرمخرب است |
| can_change | ccc | cc | پایانه میتواند رنگهای موجود را بازتعریف کند |
| back_color_erase | bce | ut | صفحه با رنگ پسزمینه پاک میشود |
| hue_lightness_saturation | hls | hl | پایانه فقط از نشانهگذاری رنگ HLS استفاده میکند (Tektronix) |
| col_addr_glitch | xhpa | YA | فقط حرکت مثبت برای قابلیتهای hpa/mhpa |
| cr_cancels_micro_mode | crxm | YB | استفاده از cr حالت ریز (micro) را خاموش میکند |
| has_print_wheel | daisy | YC | چاپگر برای تغییر مجموعهنویسه نیاز به اپراتور دارد |
| row_addr_glitch | xvpa | YD | فقط حرکت مثبت برای قابلیتهای vpa/mvpa |
| semi_auto_right_margin | sam | YE | چاپ در آخرین ستون باعث بازگشت به ابتدای سطر (cr) میشود |
| cpi_changes_res | cpix | YF | تغییر گام نویسه باعث تغییر وضوح میشود |
| lpi_changes_res | lpix | YG | تغییر گام خط باعث تغییر وضوح میشود |
| Code | |||
| Numeric Capability Name | TI | TC | Description |
| columns | cols | co | تعداد ستونها در یک سطر |
| init_tabs | it | it | تبها در ابتدا در هر # فاصله تنظیم میشوند |
| lines | lines | li | تعداد خطوط روی صفحه یا برگه |
| lines_of_memory | lm | lm | خطوط حافظه اگر > line باشد. ۰ یعنی متغیر است |
| magic_cookie_glitch | xmc | sg | تعداد نویسههای خالی بهجامانده توسط smso یا rmso |
| padding_baud_rate | pb | pb | کمترین نرخ باد که در آن فاصلهگذاری مورد نیاز است |
| virtual_terminal | vt | vt | شمارهٔ پایانهٔ مجازی (CB/unix) |
| width_status_line | wsl | ws | تعداد ستونها در خط وضعیت |
| num_labels | nlab | Nl | تعداد برچسبها روی صفحه |
| label_height | lh | lh | تعداد سطرها در هر برچسب |
| label_width | lw | lw | تعداد ستونها در هر برچسب |
| max_attributes | ma | ma | حداکثر ویژگیهای ترکیبی که پایانه میتواند مدیریت کند |
| maximum_windows | wnum | MW | حداکثر تعداد پنجرههای قابلتعریف |
| max_colors | colors | Co | حداکثر تعداد رنگها روی صفحه |
| max_pairs | pairs | pa | حداکثر تعداد جفترنگها روی صفحه |
| no_color_video | ncv | NC | ویژگیهای ویدئویی که نمیتوان با رنگها استفاده کرد |
قابلیتهای عددی زیر در ساختار term مربوط به SVr4.0 وجود دارند، اما هنوز در صفحهٔ راهنما مستند نشدهاند. آنها همراه با پشتیبانی چاپگر در SVr4 اضافه شدند.
| Code | |||
| Numeric Capability Name | TI | TC | Description |
| buffer_capacity | bufsz | Ya | تعداد بایتهای بافرشده پیش از چاپ |
| dot_vert_spacing | spinv | Yb | فاصلهگذاری پینها بهصورت عمودی بر حسب پین در اینچ |
| dot_horz_spacing | spinh | Yc | فاصلهگذاری نقطهها بهصورت افقی بر حسب نقطه در اینچ |
| max_micro_address | maddr | Yd | حداکثر مقدار در micro_..._address |
| max_micro_jump | mjump | Ye | حداکثر مقدار در parm_..._micro |
| micro_col_size | mcs | Yf | اندازهٔ گام نویسه هنگام قرار داشتن در حالت ریز (micro) |
| micro_line_size | mls | Yg | اندازهٔ گام خط هنگام قرار داشتن در حالت ریز (micro) |
| number_of_pins | npins | Yh | تعداد پینها در سرِ چاپگر |
| output_res_char | orc | Yi | وضوح افقی بر حسب واحد در هر خط |
| output_res_line | orl | Yj | وضوح عمودی بر حسب واحد در هر خط |
| output_res_horz_inch | orhi | Yk | وضوح افقی بر حسب واحد در هر اینچ |
| output_res_vert_inch | orvi | Yl | وضوح عمودی بر حسب واحد در هر اینچ |
| print_rate | cps | Ym | نرخ چاپ بر حسب نویسه در ثانیه |
| wide_char_size | widcs | Yn | اندازهٔ گام نویسه هنگام قرار داشتن در حالت پهن مضاعف |
| buttons | btns | BT | تعداد دکمههای ماوس |
| bit_image_entwining | bitwin | Yo | تعداد پاسها برای هر ردیف تصویر بیتی |
| bit_image_type | bitype | Yp | نوع دستگاه تصویر بیتی |
| Code | |||
| String Capability Name | TI | TC | Description |
| back_tab | cbt | bt | تب رو به عقب (P) |
| bell | bel | bl | سیگنال صوتی (زنگ) (P) |
| carriage_return | cr | cr | بازگشت به ابتدای سطر (P*) (P*) |
| change_scroll_region | csr | cs | تغییر ناحیه به خط 1# تا خط 2# (P) |
| clear_all_tabs | tbc | ct | پاک کردن تمام نقاط توقف تب (P) |
| clear_screen | clear | cl | پاک کردن صفحه و انتقال مکاننما به مبدا (P*) |
| clr_eol | el | ce | پاک کردن تا انتهای خط (P) |
| clr_eos | ed | cd | پاک کردن تا انتهای صفحه (P*) |
| column_address | hpa | ch | موقعیت افقی 1#، مطلق (P) |
| command_character | cmdch | CC | نویسهٔ دستوری قابلتنظیم پایانه در پیشنمونه !? |
| cursor_address | cup | cm | انتقال به سطر 1# ستون 2# |
| cursor_down | cud1 | do | یک خط به پایین |
| cursor_home | home | ho | مبدا مکاننما (اگر بدون cup باشد) |
| cursor_invisible | civis | vi | نامرئی کردن مکاننما |
| cursor_left | cub1 | le | یک فضا به چپ |
| cursor_mem_address | mrcup | CM | آدرسدهی مکاننما وابسته به حافظه، انتقال به سطر 1# ستون 2# |
| cursor_normal | cnorm | ve | بازگرداندن مکاننما به حالت عادی (لغو civis/cvvis) |
| cursor_right | cuf1 | nd | یک فضا به راست |
| cursor_to_ll | ll | ll | انتقال به گوشهٔ پایین سمت چپ |
| cursor_up | cuu1 | up | یک خط به بالا |
| cursor_visible | cvvis | vs | بسیار قابلمشاهده کردن مکاننما |
| delete_character | dch1 | dc | حذف نویسه (P*) |
| delete_line | dl1 | dl | حذف خط (P*) |
| dis_status_line | dsl | ds | غیرفعال کردن خط وضعیت |
| down_half_line | hd | hd | نیم خط به پایین |
| enter_alt_charset_mode | smacs | as | آغاز مجموعه نویسهٔ جایگزین (P) |
| enter_blink_mode | blink | mb | روشن کردن چشمکزن |
| enter_bold_mode | bold | md | روشن کردن حالت پررنگ (bold) |
| enter_ca_mode | smcup | ti | رشته برای آغاز برنامههایی که از cup استفاده میکنند |
| enter_delete_mode | smdc | dm | ورود به حالت حذف |
| enter_dim_mode | dim | mh | روشن کردن حالت کمنور (dim) |
| enter_insert_mode | smir | im | ورود به حالت درج |
| enter_secure_mode | invis | mk | روشن کردن حالت امن (پنهان) |
| enter_protected_mode | prot | mp | روشن کردن حالت حفاظتشده |
| enter_reverse_mode | rev | mr | روشن کردن حالت ویدئوی معکوس |
| enter_standout_mode | smso | so | آغاز حالت برجسته (standout) |
| enter_underline_mode | smul | us | آغاز حالت زیرخطدار |
| erase_chars | ech | ec | پاک کردن 1# نویسه (P) |
| exit_alt_charset_mode | rmacs | ae | پایان مجموعه نویسهٔ جایگزین (P) |
| exit_attribute_mode | sgr0 | me | خاموش کردن تمام ویژگیها |
| exit_ca_mode | rmcup | te | رشته برای پایان برنامههایی که از cup استفاده میکنند |
| exit_delete_mode | rmdc | ed | پایان حالت حذف |
| exit_insert_mode | rmir | ei | پایان حالت درج |
| exit_standout_mode | rmso | se | پایان حالت برجسته (standout) |
| exit_underline_mode | rmul | ue | پایان حالت زیرخطدار |
| flash_screen | flash | vb | فلش زدن قابلمشاهدهٔ صفحه (زنگ بصری) |
| form_feed | ff | ff | تغذیهٔ برگه (form feed) سختکپی (P*) |
| from_status_line | fsl | fs | بازگشت از خط وضعیت |
| init_1string | is1 | i1 | رشتهٔ مقداردهی اولیه پایانه |
| init_2string | is2 | is | رشتهٔ مقداردهی اولیه پایانه |
| init_3string | is3 | i3 | رشتهٔ مقداردهی اولیه پایانه |
| init_file | if | if | نام پروندهٔ مقداردهی اولیه |
| insert_character | ich1 | ic | درج نویسه (P) |
| insert_line | il1 | al | درج سطر (P*) |
| insert_padding | ip | ip | درج فاصلهگذاری پس از نویسهٔ درجشده |
| key_backspace | kbs | kb | کلید پسبر (backspace) |
| key_catab | ktbc | ka | کلید پاک کردن تمام تبها |
| key_clear | kclr | kC | کلید پاک کردن صفحه یا محو کردن |
| key_ctab | kctab | kt | کلید پاک کردن تب |
| key_dc | kdch1 | kD | کلید حذف نویسه |
| key_dl | kdl1 | kL | کلید حذف سطر |
| key_down | kcud1 | kd | کلید پیکان پایین |
| key_eic | krmir | kM | ارسالشده توسط rmir یا smir در حالت درج |
| key_eol | kel | kE | کلید پاک کردن تا انتهای سطر |
| key_eos | ked | kS | کلید پاک کردن تا انتهای صفحه |
| key_f0 | kf0 | k0 | کلید تابعی F0 |
| key_f1 | kf1 | k1 | کلید تابعی F1 |
| key_f10 | kf10 | k; | کلید تابعی F10 |
| key_f2 | kf2 | k2 | کلید تابعی F2 |
| key_f3 | kf3 | k3 | کلید تابعی F3 |
| key_f4 | kf4 | k4 | کلید تابعی F4 |
| key_f5 | kf5 | k5 | کلید تابعی F5 |
| key_f6 | kf6 | k6 | کلید تابعی F6 |
| key_f7 | kf7 | k7 | کلید تابعی F7 |
| key_f8 | kf8 | k8 | کلید تابعی F8 |
| key_f9 | kf9 | k9 | کلید تابعی F9 |
| key_home | khome | kh | کلید مبدا (home) |
| key_ic | kich1 | kI | کلید درج نویسه |
| key_il | kil1 | kA | کلید درج سطر |
| key_left | kcub1 | kl | کلید پیکان چپ |
| key_ll | kll | kH | کلید پایین-چپ (مبدا پایین) |
| key_npage | knp | kN | کلید صفحه بعد |
| key_ppage | kpp | kP | کلید صفحه قبل |
| key_right | kcuf1 | kr | کلید پیکان راست |
| key_sf | kind | kF | کلید پیمایش به جلو |
| key_sr | kri | kR | کلید پیمایش به عقب |
| key_stab | khts | kT | کلید تنظیم تب |
| key_up | kcuu1 | ku | کلید پیکان بالا |
| keypad_local | rmkx | ke | خروج از حالت ارسال صفحهکلید عددی |
| keypad_xmit | smkx | ks | ورود به حالت ارسال صفحهکلید عددی |
| lab_f0 | lf0 | l0 | برچسب کلید تابعی f0 اگر روی کلید f0 نباشد |
| lab_f1 | lf1 | l1 | برچسب کلید تابعی f1 اگر روی کلید f1 نباشد |
| lab_f10 | lf10 | la | برچسب کلید تابعی f10 اگر روی کلید f10 نباشد |
| lab_f2 | lf2 | l2 | برچسب کلید تابعی f2 اگر روی کلید f2 نباشد |
| lab_f3 | lf3 | l3 | برچسب کلید تابعی f3 اگر روی کلید f3 نباشد |
| lab_f4 | lf4 | l4 | برچسب کلید تابعی f4 اگر روی کلید f4 نباشد |
| lab_f5 | lf5 | l5 | برچسب کلید تابعی f5 اگر روی کلید f5 نباشد |
| lab_f6 | lf6 | l6 | برچسب کلید تابعی f6 اگر روی کلید f6 نباشد |
| lab_f7 | lf7 | l7 | برچسب کلید تابعی f7 اگر روی کلید f7 نباشد |
| lab_f8 | lf8 | l8 | برچسب کلید تابعی f8 اگر روی کلید f8 نباشد |
| lab_f9 | lf9 | l9 | برچسب کلید تابعی f9 اگر روی کلید f9 نباشد |
| meta_off | rmm | mo | خروج از حالت متا |
| meta_on | smm | mm | ورود به حالت متا (بیت هشتم روشن) |
| newline | nel | nw | خط جدید (مانند cr و lf) |
| pad_char | pad | pc | نویسهٔ فاصلهگذاری (بهجای تهی) |
| parm_dch | dch | DC | حذف 1# نویسه (P*) |
| parm_delete_line | dl | DL | حذف 1# سطر (P*) |
| parm_down_cursor | cud | DO | پایین بردن مکاننما به اندازهٔ 1# خط (P*) |
| parm_ich | ich | IC | درج 1# نویسه (P*) |
| parm_index | indn | SF | پیمایش به جلو به اندازهٔ 1# سطر (P) |
| parm_insert_line | il | AL | درج 1# سطر (P*) |
| parm_left_cursor | cub | LE | انتقال مکاننما به چپ به اندازهٔ 1# فضا (P*) |
| parm_right_cursor | cuf | RI | انتقال مکاننما به راست به اندازهٔ 1# فضا (P*) |
| parm_rindex | rin | SR | پیمایش به عقب به اندازهٔ 1# سطر (P) |
| parm_up_cursor | cuu | UP | بالا بردن مکاننما به اندازهٔ 1# خط (P*) |
| pkey_key | pfkey | pk | برنامهریزی کلید تابعی 1# برای تایپ رشتهٔ 2# |
| pkey_local | pfloc | pl | برنامهریزی کلید تابعی 1# برای اجرای رشتهٔ 2# بهصورت محلی |
| pkey_xmit | pfx | px | برنامهریزی کلید تابعی 1# برای ارسال رشتهٔ 2# به رایانه |
| print_screen | mc0 | ps | چاپ محتویات صفحه |
| prtr_off | mc4 | pf | خاموش کردن چاپگر |
| prtr_on | mc5 | po | روشن کردن چاپگر |
| repeat_char | rep | rp | تکرار نویسهٔ 1# به تعداد 2# بار (P*) |
| reset_1string | rs1 | r1 | رشتهٔ بازنشانی پایانه |
| reset_2string | rs2 | r2 | رشتهٔ بازنشانی پایانه |
| reset_3string | rs3 | r3 | رشتهٔ بازنشانی پایانه |
| reset_file | rf | rf | نام پروندهٔ بازنشانی پایانه |
| restore_cursor | rc | rc | بازیابی موقعیت مکاننما به آخرین حالت ذخیرهشده |
| row_address | vpa | cv | موقعیت عمودی 1#، مطلق (P) |
| save_cursor | sc | sc | ذخیرهٔ موقعیت فعلی مکاننما (P) |
| scroll_forward | ind | sf | پیمایش متن به بالا (P) |
| scroll_reverse | ri | sr | پیمایش متن به پایین (P) |
| set_attributes | sgr | sa | تعریف ویژگیهای ویدئویی 1# تا 9# (PG9) |
| set_tab | hts | st | تنظیم تب در هر سطر، ستونهای جاری |
| set_window | wind | wi | پنجرهٔ جاری خطوط 1#-2# ستونهای 3#-4# است |
| tab | ht | ta | تب به نقطهٔ توقف تب بعدی |
| to_status_line | tsl | ts | رفتن به خط وضعیت، ستون 1# |
| underline_char | uc | uc | زیرخطدار کردن نویسهٔ جاری و حرکت به راست |
| up_half_line | hu | hu | نیم خط به بالا |
| init_prog | iprog | iP | مسیر برنامه برای مقداردهی اولیه |
| key_a1 | ka1 | K1 | بالا سمت چپ صفحهکلید عددی |
| key_a3 | ka3 | K3 | بالا سمت راست صفحهکلید عددی |
| key_b2 | kb2 | K2 | مرکز صفحهکلید عددی |
| key_c1 | kc1 | K4 | پایین سمت چپ صفحهکلید عددی |
| key_c3 | kc3 | K5 | پایین سمت راست صفحهکلید عددی |
| prtr_non | mc5p | pO | روشن کردن چاپگر به اندازهٔ 1# بایت |
| char_padding | rmp | rP | مانند ip اما هنگام عدم قرارگیری در حالت درج |
| acs_chars | acsc | ac | جفتنویسههای گرافیکی که به نویسههای acs نگاشت میشوند |
| plab_norm | pln | pn | برنامهریزی برچسب 1# برای نمایش رشتهٔ 2# |
| key_btab | kcbt | kB | کلید تب رو به عقب |
| enter_xon_mode | smxon | SX | روشن کردن کنترل جریان xon/xoff |
| exit_xon_mode | rmxon | RX | خاموش کردن کنترل جریان xon/xoff |
| enter_am_mode | smam | SA | روشن کردن حاشیههای خودکار |
| exit_am_mode | rmam | RA | خاموش کردن حاشیههای خودکار |
| xon_character | xonc | XN | نویسهٔ XON |
| xoff_character | xoffc | XF | نویسهٔ XOFF |
| ena_acs | enacs | eA | فعالسازی مجموعه نویسهٔ جایگزین |
| label_on | smln | LO | روشن کردن برچسبهای نرم (soft labels) |
| label_off | rmln | LF | خاموش کردن برچسبهای نرم |
| key_beg | kbeg | @1 | کلید شروع (begin) |
| key_cancel | kcan | @2 | کلید لغو (cancel) |
| key_close | kclo | @3 | کلید بستن (close) |
| key_command | kcmd | @4 | کلید دستور (command) |
| key_copy | kcpy | @5 | کلید رونوشت (copy) |
| key_create | kcrt | @6 | کلید ایجاد (create) |
| key_end | kend | @7 | کلید پایان (end) |
| key_enter | kent | @8 | کلید ورود/ارسال (enter/send) |
| key_exit | kext | @9 | کلید خروج (exit) |
| key_find | kfnd | @0 | کلید جستجو (find) |
| key_help | khlp | %1 | کلید راهنما (help) |
| key_mark | kmrk | %2 | کلید علامتگذاری (mark) |
| key_message | kmsg | %3 | کلید پیام (message) |
| key_move | kmov | %4 | کلید انتقال (move) |
| key_next | knxt | %5 | کلید بعدی (next) |
| key_open | kopn | %6 | کلید باز کردن (open) |
| key_options | kopt | %7 | کلید گزینهها (options) |
| key_previous | kprv | %8 | کلید قبلی (previous) |
| key_print | kprt | %9 | کلید چاپ (print) |
| key_redo | krdo | %0 | کلید انجام مجدد (redo) |
| key_reference | kref | &1 | کلید مرجع (reference) |
| key_refresh | krfr | &2 | کلید بازآوری (refresh) |
| key_replace | krpl | &3 | کلید جایگزینی (replace) |
| key_restart | krst | &4 | کلید راهاندازی مجدد (restart) |
| key_resume | kres | &5 | کلید ازسرگیری (resume) |
| key_save | ksav | &6 | کلید ذخیره (save) |
| key_suspend | kspd | &7 | کلید تعلیق (suspend) |
| key_undo | kund | &8 | کلید واگرد (undo) |
| key_sbeg | kBEG | &9 | کلید شروع تبدیلشده (shifted begin) |
| key_scancel | kCAN | &0 | کلید لغو تبدیلشده (shifted cancel) |
| key_scommand | kCMD | *1 | کلید دستور تبدیلشده (shifted command) |
| key_scopy | kCPY | *2 | کلید رونوشت تبدیلشده (shifted copy) |
| key_screate | kCRT | *3 | کلید ایجاد تبدیلشده (shifted create) |
| key_sdc | kDC | *4 | کلید حذف نویسهٔ تبدیلشده (shifted delete-character) |
| key_sdl | kDL | *5 | کلید حذف سطر تبدیلشده (shifted delete-line) |
| key_select | kslt | *6 | کلید انتخاب (select) |
| key_send | kEND | *7 | کلید پایان تبدیلشده (shifted end) |
| key_seol | kEOL | *8 | کلید پاککردن تا انتهای سطر تبدیلشده |
| key_sexit | kEXT | *9 | کلید خروج تبدیلشده (shifted exit) |
| key_sfind | kFND | *0 | کلید جستجوی تبدیلشده (shifted find) |
| key_shelp | kHLP | #1 | کلید راهنمای تبدیلشده (shifted help) |
| key_shome | kHOM | #2 | کلید مبدا تبدیلشده (shifted home) |
| key_sic | kIC | #3 | کلید درج نویسهٔ تبدیلشده (shifted insert-character) |
| key_sleft | kLFT | #4 | کلید پیکان چپ تبدیلشده (shifted left-arrow) |
| key_smessage | kMSG | %a | کلید پیام تبدیلشده (shifted message) |
| key_smove | kMOV | %b | کلید انتقال تبدیلشده (shifted move) |
| key_snext | kNXT | %c | کلید بعدی تبدیلشده (shifted next) |
| key_soptions | kOPT | %d | کلید گزینههای تبدیلشده (shifted options) |
| key_sprevious | kPRV | %e | کلید قبلی تبدیلشده (shifted previous) |
| key_sprint | kPRT | %f | کلید چاپ تبدیلشده (shifted print) |
| key_sredo | kRDO | %g | کلید انجام مجدد تبدیلشده (shifted redo) |
| key_sreplace | kRPL | %h | کلید جایگزینی تبدیلشده (shifted replace) |
| key_sright | kRIT | %i | کلید پیکان راست تبدیلشده (shifted right-arrow) |
| key_srsume | kRES | %j | کلید ازسرگیری تبدیلشده (shifted resume) |
| key_ssave | kSAV | !1 | کلید ذخیرهٔ تبدیلشده (shifted save) |
| key_ssuspend | kSPD | !2 | کلید تعلیق تبدیلشده (shifted suspend) |
| key_sundo | kUND | !3 | کلید واگرد تبدیلشده (shifted undo) |
| req_for_input | rfi | RF | ارسال پاسخ کد وضعیت بعدی به ترمینال |
| key_f11 | kf11 | F1 | کلید تابعی F11 |
| key_f12 | kf12 | F2 | کلید تابعی F12 |
| key_f13 | kf13 | F3 | کلید تابعی F13 |
| key_f14 | kf14 | F4 | کلید تابعی F14 |
| key_f15 | kf15 | F5 | کلید تابعی F15 |
| key_f16 | kf16 | F6 | کلید تابعی F16 |
| key_f17 | kf17 | F7 | کلید تابعی F17 |
| key_f18 | kf18 | F8 | کلید تابعی F18 |
| key_f19 | kf19 | F9 | کلید تابعی F19 |
| key_f20 | kf20 | FA | کلید تابعی F20 |
| key_f21 | kf21 | FB | کلید تابعی F21 |
| key_f22 | kf22 | FC | کلید تابعی F22 |
| key_f23 | kf23 | FD | کلید تابعی F23 |
| key_f24 | kf24 | FE | کلید تابعی F24 |
| key_f25 | kf25 | FF | کلید تابعی F25 |
| key_f26 | kf26 | FG | کلید تابعی F26 |
| key_f27 | kf27 | FH | کلید تابعی F27 |
| key_f28 | kf28 | FI | کلید تابعی F28 |
| key_f29 | kf29 | FJ | کلید تابعی F29 |
| key_f30 | kf30 | FK | کلید تابعی F30 |
| key_f31 | kf31 | FL | کلید تابعی F31 |
| key_f32 | kf32 | FM | کلید تابعی F32 |
| key_f33 | kf33 | FN | کلید تابعی F33 |
| key_f34 | kf34 | FO | کلید تابعی F34 |
| key_f35 | kf35 | FP | کلید تابعی F35 |
| key_f36 | kf36 | FQ | کلید تابعی F36 |
| key_f37 | kf37 | FR | کلید تابعی F37 |
| key_f38 | kf38 | FS | کلید تابعی F38 |
| key_f39 | kf39 | FT | کلید تابعی F39 |
| key_f40 | kf40 | FU | کلید تابعی F40 |
| key_f41 | kf41 | FV | کلید تابعی F41 |
| key_f42 | kf42 | FW | کلید تابعی F42 |
| key_f43 | kf43 | FX | کلید تابعی F43 |
| key_f44 | kf44 | FY | کلید تابعی F44 |
| key_f45 | kf45 | FZ | کلید تابعی F45 |
| key_f46 | kf46 | Fa | کلید تابعی F46 |
| key_f47 | kf47 | Fb | کلید تابعی F47 |
| key_f48 | kf48 | Fc | کلید تابعی F48 |
| key_f49 | kf49 | Fd | کلید تابعی F49 |
| key_f50 | kf50 | Fe | کلید تابعی F50 |
| key_f51 | kf51 | Ff | کلید تابعی F51 |
| key_f52 | kf52 | Fg | کلید تابعی F52 |
| key_f53 | kf53 | Fh | کلید تابعی F53 |
| key_f54 | kf54 | Fi | کلید تابعی F54 |
| key_f55 | kf55 | Fj | کلید تابعی F55 |
| key_f56 | kf56 | Fk | کلید تابعی F56 |
| key_f57 | kf57 | Fl | کلید تابعی F57 |
| key_f58 | kf58 | Fm | کلید تابعی F58 |
| key_f59 | kf59 | Fn | کلید تابعی F59 |
| key_f60 | kf60 | Fo | کلید تابعی F60 |
| key_f61 | kf61 | Fp | کلید تابعی F61 |
| key_f62 | kf62 | Fq | کلید تابعی F62 |
| key_f63 | kf63 | Fr | کلید تابعی F63 |
| clr_bol | el1 | cb | پاک کردن تا ابتدای خط |
| clear_margins | mgc | MC | پاک کردن حاشیههای چپ و راست نرم |
| set_left_margin | smgl | ML | تنظیم حاشیهٔ نرم چپ در ستون جاری (در BSD termcap وجود ندارد) |
| set_right_margin | smgr | MR | تنظیم حاشیهٔ نرم راست در ستون جاری |
| label_format | fln | Lf | قالب برچسب |
| set_clock | sclk | SC | تنظیم ساعت به زمان 1# ساعت، 2# دقیقه، 3# ثانیه |
| display_clock | dclk | DK | نمایش ساعت |
| remove_clock | rmclk | RC | حذف ساعت |
| create_window | cwin | CW | تعریف پنجرهٔ 1# از 2#,3# تا 4#,5# |
| goto_window | wingo | WG | رفتن به پنجرهٔ 1# |
| hangup | hup | HU | قطع تماس تلفنی |
| dial_phone | dial | DI | شمارهگیری تلفن 1# |
| quick_dial | qdial | QD | شمارهگیری سریع تلفن 1# |
| tone | tone | TO | انتخاب شمارهگیری تن |
| pulse | pulse | PU | انتخاب شمارهگیری پالسی |
| flash_hook | hook | fh | فلش قلاب تلفن |
| fixed_pause | pause | PA | مکث به مدت ۲-۳ ثانیه |
| wait_tone | wait | WA | انتظار برای تن شمارهگیری |
| user0 | u0 | u0 | رشتهٔ کاربر شماره ۰ |
| user1 | u1 | u1 | رشتهٔ کاربر شماره ۱ |
| user2 | u2 | u2 | رشتهٔ کاربر شماره ۲ |
| user3 | u3 | u3 | رشتهٔ کاربر شماره ۳ |
| user4 | u4 | u4 | رشتهٔ کاربر شماره ۴ |
| user5 | u5 | u5 | رشتهٔ کاربر شماره ۵ |
| user6 | u6 | u6 | رشتهٔ کاربر شماره ۶ |
| user7 | u7 | u7 | رشتهٔ کاربر شماره ۷ |
| user8 | u8 | u8 | رشتهٔ کاربر شماره ۸ |
| user9 | u9 | u9 | رشتهٔ کاربر شماره ۹ |
| orig_pair | op | op | بازنشانی جفترنگ پیشفرض به مقادیر اصلی |
| orig_colors | oc | oc | بازنشانی تمام رنگها به مقادیر اصلی |
| initialize_color | initc | Ic | مقداردهی اولیه رنگ 1# به مقادیر (2#,3#,4#) |
| initialize_pair | initp | Ip | مقداردهی اولیه جفترنگ 1# به پیشزمینه=(2#,3#,4#) و پسزمینه=(5#,6#,7#) |
| set_color_pair | scp | sp | تنظیم جفترنگ جاری روی 1# |
| set_foreground | setf | Sf | تنظیم رنگ پیشزمینه 1# |
| set_background | setb | Sb | تنظیم رنگ پسزمینه 1# |
| change_char_pitch | cpi | ZA | تغییر تعداد نویسهها در هر اینچ به 1# |
| change_line_pitch | lpi | ZB | تغییر تعداد خطوط در هر اینچ به 1# |
| change_res_horz | chr | ZC | تغییر وضوح افقی به 1# |
| change_res_vert | cvr | ZD | تغییر وضوح عمودی به 1# |
| define_char | defc | ZE | تعریف یک نویسهٔ 1# به پهنای 2# نقطه، با پایینآمدگی 3# |
| enter_doublewide_mode | swidm | ZF | ورود به حالت پهن مضاعف (double-wide) |
| enter_draft_quality | sdrfq | ZG | ورود به کیفیت پیشنویس (draft) |
| enter_italics_mode | sitm | ZH | فعالسازی حالت ایتالیک |
| enter_leftward_mode | slm | ZI | فعالسازی حرکت به چپ |
| enter_micro_mode | smicm | ZJ | فعالسازی حرکت ریز (micro) |
| enter_near_letter_quality | snlq | ZK | ورود به کیفیت نزدیک به نامه (NLQ) |
| enter_normal_quality | snrmq | ZL | ورود به کیفیت معمولی |
| enter_shadow_mode | sshm | ZM | فعالسازی چاپ سایهدار |
| enter_subscript_mode | ssubm | ZN | فعالسازی حالت زیرنویس |
| enter_superscript_mode | ssupm | ZO | فعالسازی حالت بالانویس |
| enter_upward_mode | sum | ZP | فعالسازی حرکت به بالا |
| exit_doublewide_mode | rwidm | ZQ | خروج از حالت پهن مضاعف |
| exit_italics_mode | ritm | ZR | خروج از حالت ایتالیک |
| exit_leftward_mode | rlm | ZS | خروج از حالت حرکت به چپ |
| exit_micro_mode | rmicm | ZT | خروج از حالت حرکت ریز (micro) |
| exit_shadow_mode | rshm | ZU | خروج از چاپ سایهدار |
| exit_subscript_mode | rsubm | ZV | خروج از حالت زیرنویس |
| exit_superscript_mode | rsupm | ZW | خروج از حالت بالانویس |
| exit_upward_mode | rum | ZX | خروج از حالت حرکت به بالا |
| micro_column_address | mhpa | ZY | مانند column_address در حالت ریز |
| micro_down | mcud1 | ZZ | مانند cursor_down در حالت ریز |
| micro_left | mcub1 | Za | مانند cursor_left در حالت ریز |
| micro_right | mcuf1 | Zb | مانند cursor_right در حالت ریز |
| micro_row_address | mvpa | Zc | مانند row_address در حالت ریز |
| micro_up | mcuu1 | Zd | مانند cursor_up در حالت ریز |
| order_of_pins | porder | Ze | تطابق پینها در سر چاپگر با بیتها در بایت |
| parm_down_micro | mcud | Zf | مانند parm_down_cursor در حالت ریز |
| parm_left_micro | mcub | Zg | مانند parm_left_cursor در حالت ریز |
| parm_right_micro | mcuf | Zh | مانند parm_right_cursor در حالت ریز |
| parm_up_micro | mcuu | Zi | مانند parm_up_cursor در حالت ریز |
| select_char_set | scs | Zj | انتخاب مجموعهنویسه، 1# |
| set_bottom_margin | smgb | Zk | تنظیم حاشیهٔ پایین در خط جاری |
| set_bottom_margin_parm | smgbp | Zl | تنظیم حاشیه پایین در خط 1# یا (در صورت مشخص نشدن smgtp) به اندازهٔ 2# خط از پایین |
| set_left_margin_parm | smglp | Zm | تنظیم حاشیهٔ چپ در ستون 1# |
| set_right_margin_parm | smgrp | Zn | تنظیم حاشیهٔ راست در ستون 1# |
| set_top_margin | smgt | Zo | تنظیم حاشیهٔ بالا در سطر جاری |
| set_top_margin_parm | smgtp | Zp | تنظیم حاشیه بالا در خط 1# |
| start_bit_image | sbim | Zq | آغاز تصویر بیتی در حالت 1# |
| start_char_set_def | scsd | Zr | آغاز تعریف مجموعهنویسهٔ 1#، با 2# نویسه در مجموعه |
| stop_bit_image | rbim | Zs | توقف تصویر بیتی |
| stop_char_set_def | rcsd | Zt | پایان تعریف مجموعهنویسهٔ 1# |
| subscript_characters | subcs | Zu | فهرست نویسههای زیرنویس |
| superscript_characters | supcs | Zv | فهرست نویسههای بالانویس |
| these_cause_cr | docr | Zw | چاپ هر یک از این نویسهها باعث بازگشت به ابتدای سطر (cr) میشود |
| zero_motion | zerom | Zx | بدون حرکت برای چاپ نویسهٔ بعدی |
قابلیتهای رشتهای زیر در ساختار term مربوط به SVr4.0 وجود دارند، اما در ابتدا در صفحهٔ راهنما مستند نشده بودند.
| Code | |||
| String Capability Name | TI | TC | Description |
| char_set_names | csnm | Zy | تولید مورد 1#ـم از فهرست نامهای مجموعهنویسه |
| key_mouse | kmous | Km | رویداد ماوس رخ داده است |
| mouse_info | minfo | Mi | کد وضعیت ماوس خوانده شده است |
| req_mouse_pos | reqmp | RQ | درخواست موقعیت ماوس |
| get_mouse | getm | Gm | curses باید رویدادهای دکمه ماوس را دریافت کند؛ پارامتر 1# مستند نشده است |
| set_a_foreground | setaf | AF | تنظیم رنگ پیشزمینه به 1#، با استفاده از گریز ANSI |
| set_a_background | setab | AB | تنظیم رنگ پسزمینه به 1#، با استفاده از گریز ANSI |
| pkey_plab | pfxl | xl | برنامهریزی کلید تابعی 1# برای تایپ رشتهٔ 2# و نمایش رشتهٔ 3# |
| device_type | devt | dv | نشاندهندهٔ پشتیبانی از زبان و مجموعهکد |
| code_set_init | csin | ci | توالی مقداردهی اولیه برای چندین مجموعهکد |
| set0_des_seq | s0ds | s0 | تغییر به مجموعهکد ۰ (مجموعه EUC 0، اسکی) |
| set1_des_seq | s1ds | s1 | تغییر به مجموعهکد ۱ |
| set2_des_seq | s2ds | s2 | تغییر به مجموعهکد ۲ |
| set3_des_seq | s3ds | s3 | تغییر به مجموعهکد ۳ |
| set_lr_margin | smglr | ML | تنظیم هر دو حاشیهٔ چپ و راست روی 1# و 2#. (ML در termcap بیاسدی وجود ندارد) |
| set_tb_margin | smgtb | MT | تنظیم هر دو حاشیهٔ بالا و پایین روی 1# و 2# |
| bit_image_repeat | birep | Xy | تکرار سلول تصویر بیتی 1# به تعداد 2# بار |
| bit_image_newline | binel | Zz | حرکت به ردیف تصویر بیتی بعدی |
| bit_image_carriage_return | bicr | Yv | حرکت به ابتدای ردیف تصویر بیتی جاری |
| color_names | colornm | Yw | ارائهٔ مورد 1#ـم از فهرست نامهای رنگ |
| define_bit_image_region | defbi | Yx | تعریف ناحیه مستطیلی تصویر بیتی |
| end_bit_image_region | endbi | Yy | پایان ناحیه مستطیلی تصویر بیتی |
| set_color_band | setcolor | Yz | تغییر به نوار روبان شماره 1# |
| set_page_length | slines | YZ | تنظیم طول صفحه به 1# خط |
| display_pc_char | dispc | S1 | نمایش نویسهٔ PC 1# |
| enter_pc_charset_mode | smpch | S2 | ورود به حالت مجموعهنویسهٔ PC |
| exit_pc_charset_mode | rmpch | S3 | خروج از حالت مجموعهنویسهٔ PC |
| enter_scancode_mode | smsc | S4 | ورود به حالت کد اسکن (scancode) |
| exit_scancode_mode | rmsc | S5 | خروج از حالت کد اسکن |
| pc_term_options | pctrm | S6 | گزینههای پایانهٔ PC |
| scancode_escape | scesc | S7 | پیشوند گریز برای کد اسکن |
| alt_scancode_esc | scesa | S8 | پیشوند گریز متناوب برای کد اسکن |
استاندارد XSI Curses این قابلیتهای نسخهٔ چاپی سخت (hardcopy) را اضافه کرد. آنها در برخی از نسخههای بعد از 4.1 از curses متعلق به System V استفاده میشدند، مانند Solaris 2.5 و IRIX 6.x. به جز YI، نامهای termcap در ncurses برای آنها ابداعی است. طبق استاندارد XSI Curses، آنها هیچ نام termcapای ندارند. اگر ورودیهای terminfo کامپایلشدهٔ شما از این موارد استفاده کنند، ممکن است با ورودیهای terminfo در System V پس از SVr4.1 سازگاری باینری نداشته باشند؛ مراقب باشید!
| Code | |||
| String Capability Name | TI | TC | Description |
| enter_horizontal_hl_mode | ehhlm | Xh | ورود به حالت برجستهسازی افقی |
| enter_left_hl_mode | elhlm | Xl | ورود به حالت برجستهسازی چپ |
| enter_low_hl_mode | elohlm | Xo | ورود به حالت برجستهسازی پایین |
| enter_right_hl_mode | erhlm | Xr | ورود به حالت برجستهسازی راست |
| enter_top_hl_mode | ethlm | Xt | ورود به حالت برجستهسازی بالا |
| enter_vertical_hl_mode | evhlm | Xv | ورود به حالت برجستهسازی عمودی |
| set_a_attributes | sgr1 | sA | تعریف مجموعهٔ دوم ویژگیهای ویدئویی 1# تا 6# |
| set_pglen_inch | slength | YI | تنظیم طول صفحه به اندازهٔ 1# صدم اینچ (برخی پیادهسازیها از sL برای termcap استفاده میکنند) |
قابلیتهای تعریفشده توسط کاربر (User-Defined Capabilities)
بخش پیشین قابلیتهای استاندارد را فهرست کرد. برخی از آنها تخصصی هستند، و از قابلیتهایی پشتیبانی میکنند که شبیهسازهای پایانه آنها را پیادهسازی نمیکنند، یا ممکن است هرگز در سختافزارهای تولیدشده تحقق نیافته باشند. گاهی اوقات، شبیهسازها ویژگیهای خاصی دارند که نمایش آنها با استفاده از قابلیتهای استاندارد، دشوار یا ناممکن است.
ncurses این محدودیت را با امکانپذیر ساختن قابلیتهای تعریفشده توسط کاربر برطرف میکند. برنامههای tic و infocmp گزینهٔ -x را برای این منظور ارائه میدهند. هنگامی که -x به کار میرود، tic با قابلیتهای ناشناخته به عنوان قابلیتهای تعریفشده توسط کاربر رفتار میکند. به این معنا که اگر tic با نام قابلیتی روبرو شود که آن را بازنمیشناسد، برنامه نوع قابلیت (بولی، عددی، یا رشتهای) را از نحو مقدار قابلیت استنباط کرده و یک مدخل جدول گسترشیافته برای آن قابلیت میسازد. use_extended_names(3X) این اطلاعات را به صورت مشروط در دسترس برنامهها قرار میدهد. توابع کتابخانهٔ ncurses دادههای قابلیت را در اختیار فراخوانها قرار میدهند، که تفسیر آنها تا حد زیادی بر عهدهٔ برنامهٔ کاربردی است.
- ncurses با قابلیتهای رشتهای تعریفشده توسط کاربر که نام آنها با “k” آغاز میشود به عنوان کلیدهای تابع رفتار میکند.
- انواع قابلیت (بولی، عددی، یا رشتهای) که توسط tic تعیین میشوند، میتوانند از طریق فراخوانیهای موفق tigetflag(3X)، tigetnum(3X) و tigetstr(3X) استنباط شوند.
- اگر نام قابلیت تصادفاً دو نویسهای باشد، آن قابلیت از طریق واسط termcap نیز در دسترس خواهد بود.
اگرچه گفته میشود termcap گسترشپذیر است زیرا هیچ قابلیتی را تحمیل نمیکند، اما در عمل به مواردی محدود شده است که توسط پیادهسازیهای terminfo تعریف شدهاند. به عنوان یک قاعده، تنها قابلیتهای تعریفشده توسط کاربر از نوع بولی و عددی را با برنامههای termcap به کار ببرید تا از سرریز شدن حد ۱۰۲۳ بایتی که توسط پیادهسازیهای termcap و برنامههای آنها فرض میشود، جلوگیری گردد. بهویژه، پشتیبانی از مجموعههای گسترشیافتهٔ کلیدهای تابع (فراتر از ۶۰ کلید شمارهدار و اندک کلیدهای با نام خاص) بهتر است با نامهای طولانیتر موجود در terminfo انجام پذیرد.
کتابخانهٔ ncurses از تعداد اندکی از این قابلیتهای تعریفشده توسط کاربر استفاده میکند، همانطور که در user_caps(5) شرح داده شده است. برای سایر قابلیتهای تعریفشده توسط کاربر، از جمله کلیدهای تابع، به فرم منبع پایگاه داده پایانه، یعنی terminfo.src، زیر عنوان “NCURSES USER-DEFINABLE CAPABILITIES” مراجعه کنید.
یک ورودی نمونه (A Sample Entry)
ورودی زیر که یک پایانهٔ استاندارد ANSI X3.64- (یا ECMA-48-) (از این پس برای اختصار “استاندارد ANSI”) را توصیف میکند، نمونهای شاخص از شکل ظاهری معمول یک ورودی terminfo برای یک پایانهٔ مدرن است.
ansi|ansi/pc-term compatible with color,
am, mc5i, mir, msgr,
colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260
j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303
u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
el1=\E[1K, home=\E[H, hpa=\E[%i%p1%dG, ht=\E[I, hts=\EH,
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J,
indn=\E[%p1%dS, invis=\E[8m, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L,
mc4=\E[4i, mc5=\E[5i, nel=\r\E[S, op=\E[39;49m,
rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, rin=\E[%p1%dT,
rmacs=\E[10m, rmpch=\E[10m, rmso=\E[m, rmul=\E[m,
s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0;10%?%p1%t;7%;
%?%p2%t;4%;
%?%p3%t;7%;
%?%p4%t;5%;
%?%p6%t;1%;
%?%p7%t;8%;
%?%p9%t;11%;m,
sgr0=\E[0;10m, smacs=\E[11m, smpch=\E[11m, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,
ورودیها میتوانند با قرار دادن فاصلهٔ خالی در ابتدای هر سطر به جز سطر نخست، در چندین سطر ادامه یابند. توضیحات (کامنتها) را میتوان در سطرهایی که با “#” آغاز میشوند گنجاند. قابلیتها در terminfo بر سه نوع هستند:
- قابلیتهای بولی که نشان میدهند پایانه دارای یک ویژگی به خصوص است،
- قابلیتهای عددی که اندازهٔ پایانه یا اندازهٔ تأخیرهای خاص را مشخص میکنند، و
- قابلیتهای رشتهای که توالیای را ارائه میدهند که میتوان برای انجام عملیات به خصوص پایانه از آن استفاده کرد.
انواع قابلیتها (Types of Capabilities)
همهٔ قابلیتها دارای نام هستند. برای نمونه، این واقعیت که پایانههای استاندارد ANSI دارای حاشیههای خودکار (automatic margins) (یعنی بازگشت سطر و سطرجدید خودکار با رسیدن به انتهای سطر) هستند، با قابلیت am مشخص میشود. از این رو توصیف ansi شامل am است. قابلیتهای عددی با نویسهٔ “#” و سپس یک مقدار مثبت دنبال میشوند. بدین ترتیب، cols که تعداد ستونهای پایانه را نشان میدهد، مقدار “80” را برای ansi مشخص میکند. مقادیر قابلیتهای عددی را میتوان بر اساس قراردادهای زبان برنامهنویسی C به صورت دهدهی، هشتهشتی، یا شانزدهشانزدهی (مانند 255، 0377 و 0xff یا 0xFF) مشخص کرد.
در نهایت، قابلیتهای با مقدار رشتهای، مانند el (دنبالهٔ پاککردن تا انتهای سطر) با کد دو نویسهای، یک “=”، و سپس رشتهای که به کامای بعدی “,” ختم میشود، مشخص میگردند.
تعدادی توالی گریز در قابلیتهای با مقدار رشتهای برای کدگذاری آسان نویسهها در آن ارائه شده است:
- هر دو مورد \E و \e به یک نویسهٔ ESCAPE نگاشت میشوند،
- ^x به یک control-x برای هر x مناسب نگاشت میشود، و
- توالیهای
\n، \l، \r، \t، \b، \f، و \s
- تولیدکنندهٔ
newline، line-feed، return، tab، backspace، form-feed، و space
- به ترتیب هستند.
استاندارد X/Open Curses مشخص نمیکند که “x مناسب” چه چیزی میتواند باشد. در عمل، آن یک نویسهٔ گرافیکی اسکی چاپپذیر است. حالت خاص “^?” به عنوان DEL (127) تفسیر میشود. در تمامی حالات دیگر، مقدار نویسه به صورت منطقی با 0x1f عملیات “and” میشود، و به کدهای کنترلی اسکی در محدودهٔ ۰ تا ۳۱ نگاشت میگردد.
سایر گریزها عبارتند از:
- \^ برای ^،
- \\ برای \،
- \, برای کاما،
- \: برای :،
- و \0 برای تهی (null).
- \0 مقدار \200 را تولید میکند، که رشته را پایان نمیدهد اما در بیشتر پایانهها در صورت مشخص بودن CS7، مانند یک نویسهٔ null رفتار میکند. به stty(1) مراجعه کنید.
- دلیل این رفتار خاص، حفظ سازگاری باینری فایلهای کامپایلشدهٔ terminfo با سایر پیادهسازیها است؛ برای نمونه سیستمهای SVr4 که این مورد را مستند کردهاند. فایلهای کامپایلشدهٔ terminfo از رشتههای با پایان تهی (null-terminated)، بدون طول مشخص استفاده میکنند. اصلاح این مورد نیازمند قالب باینری جدیدی بود، که با سایر پیادهسازیها کار نمیکرد.
در نهایت، نویسهها را میتوان به صورت سه رقم هشتهشتی پس از یک \ مشخص کرد.
یک تأخیر بر حسب میلیثانیه میتواند در هر جای یک قابلیت رشتهای، درون براکتهای $<..> ظاهر شود، مانند el=\EK$<5>، و نویسههای لایی (padding) توسط tputs(3X) برای تأمین این تأخیر فراهم میشوند.
- تأخیر باید عددی با حداکثر یک رقم اعشار باشد؛ ممکن است پسوندهای “*” یا “/” یا هر دو را به دنبال داشته باشد.
- یک “*” نشان میدهد که لایهگذاری (padding) مورد نیاز متناسب با تعداد سطرهای تحت تأثیر عملیات است، و مقدار دادهشده، لایهگذاری مورد نیاز به ازای هر واحدِ تحت تأثیر است. (در مورد نویسهٔ درج، این ضریب همچنان تعداد سطرهای تحت تأثیر است.)
- به طور معمول، اگر دستگاه دارای قابلیت xon باشد، لایهگذاری جنبهٔ توصیهای دارد؛ برای محاسبهٔ هزینه استفاده میشود اما موجب ایجاد تأخیر نمیگردد.
- •
- یک پسوند “/” نشان میدهد که لایهگذاری اجباری است و تأخیری به میزان میلیثانیهٔ دادهشده را تحمیل میکند، حتی روی دستگاههایی که xon برای نشان دادن کنترل جریان در آنها وجود دارد.
گاهی
اوقات باید
قابلیتهای
منفرد را به
صورت نظر
(توضیح)
درآورد.
برای این
کار، یک
نقطه پیش از
نام قابلیت
قرار دهید.
برای
نمونه، به
دومین ind در
مثال بالا
نگاه کنید.
واکشی شرحهای کامپایلشده (Fetching Compiled Descriptions)
شرحهای پایانه در ncurses در پایگاههای دادهٔ پایانه ذخیره میشوند. این پایگاههای داده که با نام مسیرشان پیدا میشوند، ممکن است به صورت درختهای دایرکتوری یا پایگاههای دادهٔ درهمسازیشده (hashed) پیکربندی شده باشند (به term(5) نگاه کنید)،
کتابخانه از فهرستی از نامهای مسیر که در هنگام کامپایل درون آن تعبیه شده استفاده میکند، که میتوان آنها را توسط متغیرهای محیطی بازنویسی (override) کرد. پیش از آغاز جستجو، ncurses فهرست جستجو را بررسی میکند، و موارد تکراری و مسیرهایی را که هیچ پایگاه داده پایانهای در آنها یافت نمیشود، حذف مینماید. کتابخانهٔ ncurses نخستین شرحی را که از آزمونهای سازگاریاش با موفقیت بگذرد، میخواند.
- ابتدا متغیر محیطی TERMINFO برای یافتن یک پایگاه داده پایانهٔ حاوی شرح پایانه بررسی میشود.
- سپس، ncurses در $HOME/.terminfo به دنبال یک شرح کامپایلشده میگردد.
- این یک ویژگی اختیاری است که ممکن است به طور کامل از کتابخانه حذف شده باشد، یا برای جلوگیری از استفادهٔ تصادفی توسط برنامههای ممتاز محدود شده باشد.
- •
- سپس، اگر متغیر محیطی TERMINFO_DIRS تنظیم شده باشد، ncurses محتوای آن متغیر را به عنوان فهرستی از مسیرهای پایگاههای داده پایانه جداشده با دونقطه برای جستجو تفسیر میکند.
- یک نام مسیر خالی (یعنی اگر متغیر با یک دونقطه آغاز شود یا پایان یابد، یا حاوی دونقطههای مجاور باشد) به عنوان مکان سیستمی /usr/share/terminfo تفسیر میشود.
- •
- در نهایت، ncurses این مکانهای تعبیهشده در زمان کامپایل را جستجو میکند:
- فهرستی از دایرکتوریها (/usr/share/terminfo)، و
- دایرکتوری سیستمی terminfo، یعنی /usr/share/terminfo
متغیر TERMINFO میتواند به جای نام مسیر یک پایگاه داده پایانه، مستقیماً حاوی شرح پایانه باشد. اگر این متغیر با “hex:” یا “b64:” آغاز شود، آنگاه ncurses شرح پایانه را از دادههای کدگذاریشده با هگزادسیمال یا base64 میخواند، و اگر آن شرح با نام مورد نظر مطابقت داشته باشد، از آن استفاده خواهد کرد. این دادههای کدگذاریشده را میتوان با استفاده از گزینهٔ “-Q” در tic یا infocmp تنظیم کرد.
مطالب پیشین به پیکربندی معمول ncurses مربوط میشود، که از شرحهای پایانهٔ آمادهشده در قالب terminfo استفاده میکند. اگرچه termcap بیانگری کمتری دارد، ncurses میتواند برای خواندن شرحهای termcap نیز پیکربندی شود. در آن پیکربندی، این کتابخانه متغیرهای TERMCAP و TERMPATH را (به ترتیب برای محتوا و مسیر جستجو) پس از پایگاه داده پایانهٔ سیستم بررسی میکند.
آمادهسازی شرحها (Preparing Descriptions)
اکنون چگونگی آمادهسازی شرحهای پایانهها را به طور خلاصه شرح میدهیم. کارآمدترین راه برای آمادهسازی یک شرح پایانه، تقلید از شرح یک پایانهٔ مشابه در terminfo و ساخت تدریجی یک شرح با استفاده از شرحهای جزئی در کنار vi یا برنامهای دیگر از برنامههای مبتنی بر صفحه برای بررسی درستی آنهاست. آگاه باشید که یک پایانهٔ بسیار نامتعارف ممکن است کمبودهای موجود در توانایی فایل terminfo برای توصیف آن، یا اشکالات موجود در کد مدیریت صفحهٔ برنامهٔ آزمایش را آشکار سازد.
برای تنظیم دقیق لایهگذاری (padding) مربوط به سطر درج (insert line) (اگر سازندهٔ پایانه آن را مستند نکرده باشد)، یک آزمون دشوار این است که فایلی بزرگ را با سرعت ۹۶۰۰ باود ویرایش کنید، حدود ۱۶ سطر را از میانهٔ صفحه حذف کنید، و سپس کلید “u” را چندین بار به سرعت فشار دهید. اگر پایانه به هم ریخت، معمولاً به لایهگذاری بیشتری نیاز است. آزمون مشابهی را میتوان برای نویسهٔ درج (insert character) به کار برد.
قابلیتهای پایهای (Basic Capabilities)
تعداد ستونها در هر سطر برای پایانه با قابلیت عددی cols مشخص میشود. اگر پایانه یک CRT باشد، آنگاه تعداد سطرهای روی صفحه با قابلیت lines مشخص میشود. اگر پایانه با رسیدن به حاشیهٔ راست به آغاز سطر بعدی بپیچد (wrap around)، باید قابلیت am را داشته باشد. اگر پایانه بتواند صفحهاش را پاک کند و مکاننما را در موقعیت آغازین (home) قرار دهد، این با قابلیت رشتهای clear مشخص میشود. اگر پایانه روچاپ (overstrike) انجام میدهد (به جای پاک کردن یک موقعیت هنگام چاپ روی نویسه) آنگاه باید قابلیت os را داشته باشد. اگر پایانه یک پایانهٔ چاپی بدون واحد تصویر نرم (نمایشگر) باشد، هر دو قابلیت hc و os را به آن بدهید. (os برای پایانههای صفحه ذخیرهساز، مانند سری TEKTRONIX 4010، و نیز پایانههای نسخهٔ چاپی و APL کاربرد دارد.) اگر کدی برای انتقال مکاننما به لبهٔ چپ سطر جاری وجود دارد، آن را به صورت cr مشخص کنید. (معمولاً این carriage return، یعنی control/M خواهد بود.) اگر کدی برای تولید هشدار صوتی (زنگ، بوق و غیره) وجود دارد، آن را به صورت bel مشخص کنید.
اگر کدی برای انتقال مکاننما به اندازهٔ یک موقعیت به چپ وجود دارد (مانند پسبر یا backspace)، آن قابلیت باید به صورت cub1 مشخص شود. به همین ترتیب، کدهای انتقال به راست، بالا و پایین باید به صورت cuf1، cuu1، و cud1 مشخص شوند. این حرکتهای محلی مکاننما نباید متنی را که از روی آن عبور میکنند تغییر دهند؛ برای نمونه، معمولاً نباید از “cuf1= ” استفاده کنید زیرا فاصله، نویسهای را که از روی آن عبور کرده پاک میکند.
یک نکتهٔ بسیار مهم در اینجا این است که حرکتهای محلی مکاننما که در terminfo کدگذاری شدهاند، در لبههای چپ و بالای یک پایانهٔ CRT تعریفنشده هستند. برنامهها هرگز نباید تلاش کنند که در لبهٔ چپ به عقب برگردند (backspace کنند)، مگر اینکه bw داده شده باشد، و هرگز نباید تلاش کنند که به صورت محلی از بالا به بیرون بروند. برای پیمایش متن به سمت بالا، برنامه به گوشهٔ پایین چپ صفحه میرود و رشتهٔ ind (index) را ارسال میکند.
برای پیمایش متن به سمت پایین، برنامه به گوشهٔ بالا چپ صفحه میرود و رشتهٔ ri (reverse index) را ارسال میکند. رشتههای ind و ri هنگامی که در گوشههای مربوط به خود روی صفحه نباشند، تعریفنشده هستند.
نسخههای پارامتردار توالیهای پیمایش عبارتند از indn و rin که همان معنای ind و ri را دارند، با این تفاوت که یک پارامتر دریافت میکنند و به همان تعداد سطر پیمایش انجام میدهند. اینها نیز به جز در لبهٔ مناسب صفحه تعریفنشده هستند.
قابلیت am مشخص میکند که آیا هنگام خروج متن، مکاننما در لبهٔ راست صفحه متوقف میشود یا خیر، اما این امر لزوماً برای یک cuf1 از ستون آخر صدق نمیکند. تنها حرکت محلی که از لبهٔ چپ تعریف شده این است که اگر bw داده شده باشد، آنگاه یک cub1 از لبهٔ چپ به لبهٔ راست سطر پیشین منتقل خواهد شد. اگر bw داده نشده باشد، اثر آن تعریفنشده است. این برای نمونه برای رسم یک جعبه به دور لبهٔ صفحه مفید است. اگر پایانه دارای حاشیههای خودکار قابل انتخاب با سوییچ باشد، فایل terminfo معمولاً فرض میکند که این ویژگی روشن است؛ یعنی am. اگر پایانه دستوری دارد که به ستون نخست سطر بعدی میرود، آن دستور را میتوان به صورت nel (newline) مشخص کرد. مهم نیست که آیا دستور بقیهٔ سطر جاری را پاک میکند یا خیر، بنابراین اگر پایانه فاقد cr و lf باشد، ممکن است همچنان بتوان یک nel کارآمد را از یکی از آنها یا هر دو ساخت.
این قابلیتها برای توصیف پایانههای نسخهٔ چاپی و “glass-tty” کفایت میکنند. بدین ترتیب تلهتایپ مدل ۳۳ به صورت زیر توصیف میشود:
33|tty33|tty|model 33 teletype,
bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,
در حالی که Lear Siegler ADM-3 به این صورت توصیف میشود:
adm3|3|lsi adm3,
am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J,
ind=^J, lines#24,
رشتههای پارامتردار (Parameterized Strings)
آدرسدهی مکاننما و سایر رشتههای نیازمند پارامتر در پایانه توسط یک قابلیت رشتهای پارامتردار توصیف میشوند، همراه با گریزهای شبه-printf مانند %x در آن. برای نمونه، برای آدرسدهی مکاننما، قابلیت cup با استفاده از دو پارامتر مشخص میشود: سطر و ستونی که باید به آن آدرسدهی شود. (سطرها و ستونها از صفر شمارهگذاری میشوند و به صفحهٔ فیزیکی قابل مشاهده توسط کاربر اشاره دارند، نه به هرگونه حافظهٔ نادیدنی.) اگر پایانه دارای آدرسدهی مکاننمای نسبی نسبت به حافظه باشد، میتوان آن را با mrcup نشان داد.
سازوکار پارامتر از یک پشته و کدهای ویژهٔ % برای دستکاری آن استفاده میکند. به طور معمول یک توالی یکی از پارامترها را روی پشته میگذارد (push میکند) و سپس آن را در قالبی چاپ میکند. چاپ کردن (مانند “%d”) یک حالت خاص است. سایر عملیات، از جمله “%t” عملوند خود را از پشته برمیدارند (pop میکنند). باید توجه داشت که اغلب عملیات پیچیدهتری لازم است، برای نمونه در رشتهٔ sgr.
کدگذاریهای % معانی زیر را دارند:
- %%
- خروجی دادن “%”
- %[[:]flags][width[.precision]][doxXs]
- مانند printf(3)، پرچمها عبارتند از [-+#] و فاصله. از یک “:” برای مجاز کردن نویسهٔ بعدی به عنوان پرچم “-” استفاده کنید، تا از تفسیر “%-” به عنوان یک عملگر جلوگیری شود.
- %c
- چاپ pop() مانند %c در printf
- %s
- چاپ pop() مانند %s در printf
- %p[1-9]
- قرار دادن (push) پارامتر iام در پشته
- %P[a-z]
- تنظیم متغیر پویای [a-z] با مقدار pop()
- %g[a-z]
- دریافت متغیر پویای [a-z] و قرار دادن آن در پشته
- %P[A-Z]
- تنظیم متغیر ایستای [a-z] با مقدار pop()
- %g[A-Z]
- دریافت متغیر ایستای [a-z] و قرار دادن آن در پشته
- اصطلاحات “ایستا” (static) و “پویا” (dynamic) گمراهکننده هستند. از نظر تاریخی، اینها صرفاً دو مجموعهٔ متفاوت از متغیرها هستند، که مقادیر آنها بین فراخوانیهای tparm(3X) بازنشانی نمیشود. با این حال، این واقعیت در سایر پیادهسازیها مستند نشده است. تکیه بر آن تأثیر منفی بر سازگاری با سایر پیادهسازیها خواهد گذاشت:
- کتابخانهٔ SVr2 curses از متغیرهای پویا پشتیبانی میکرد. آنها فقط توسط عملگر %P تنظیم میشوند. یک %g برای متغیری مشخص بدون تنظیم اولیهٔ آن با %P نتایج غیرقابل پیشبینی خواهد داد، زیرا متغیرهای پویا یک آرایهٔ محلی مقداردهینشده روی پشته در تابع tparm هستند.
- کتابخانهٔ SVr3.2 curses از متغیرهای ایستا پشتیبانی میکرد. آنها یک آرایه در ساختار TERMINAL (تعریفشده در term.h) هستند، و هنگامی که تابع setupterm دادهها را تخصیص میدهد به طور خودکار صفر میشوند.
- کتابخانهٔ SVr4 curses هیچ بهبود دیگری در ویژگی متغیرهای پویا/ایستا ایجاد نکرد.
- کتابخانهٔ Solaris XPG4 curses تفاوتی میان متغیرهای پویا و ایستا قائل نمیشود. آنها یکی هستند. همانند SVr4 curses، استاندارد XPG4 curses اینها را به طور صریح مقداردهی اولیه نمیکند.
- پیش از نسخهٔ 6.3، ncurses هم متغیرهای پویا و هم ایستا را در حافظهٔ پایدار ذخیره میکرد که با صفر مقداردهی اولیه میشدند.
- با آغاز نسخهٔ 6.3، ncurses متغیرهای ایستا و پویا را به همان شیوهٔ SVr4 ذخیره میکند.
- برخلاف سایر پیادهسازیها، ncurses متغیرهای پویا را پیش از نخستین عملگر %g یا %P صفر میکند.
- مانند SVr2، حوزهٔ (scope) متغیرهای پویا در ncurses درون فراخوانی جاری به tparm است. اگر حافظهٔ پایدار مورد نیاز است از متغیرهای ایستا استفاده کنید.
- %'c'
- ثابت نویسهای c
- %{nn}
- ثابت عدد صحیح nn
- %l
- قرار دادن strlen(pop) در پشته
- %+, %-, %*, %/, %m
- محاسبات ریاضی (%m همان mod است): push(pop() op pop())
- %&, %|, %^
- عملیات بیتی (“and”، “or” و “or” مانعةالجمع [xor]): push(pop() op pop())
- %=, %>, %<
- عملیات منطقی: push(pop() op pop())
- %A, %O
- عملیات منطقی “and” و “or” (برای شرطها)
- %!, %~
- عملیات یگانی (متمم منطقی و بیتی): push(op pop())
- %i
- افزودن ۱ به دو پارامتر نخست (برای پایانههای ANSI)
- %? expr %t thenpart %e elsepart %;
- این ساختار یک if-then-else تشکیل میدهد. بخش %e elsepart اختیاری است. معمولاً بخش %? expr مقداری را روی پشته میگذارد، و %t آن را از پشته برمیدارد و بررسی میکند که آیا غیرصفر (درست) است یا خیر. اگر صفر (نادرست) باشد، کنترل به بخش %e (else) منتقل میشود.
- امکان تشکیل else-ifها به سبک Algol 68 وجود دارد:
- که در آن ci شرطها و bi بدنهها هستند.
- از گزینهٔ -f در tic یا infocmp برای دیدن ساختار if-then-elseها استفاده کنید. برخی رشتهها، برای نمونه sgr هنگامی که در یک سطر نوشته شوند میتوانند بسیار پیچیده باشند. گزینهٔ -f رشته را به چندین سطر میشکند و بخشهای آن را با تورفتگی مرتب میکند.
عملیات دوتایی به صورت پسوندی (postfix) همراه با عملوندها به ترتیب معمول هستند. به این معنا که برای به دست آوردن x-5 باید از “%gx%{5}%-” استفاده کرد. متغیرهای %P و %g در بین ارزیابیهای رشتههای گریز پایدار هستند.
پایانهٔ HP2645 را در نظر بگیرید که برای رفتن به سطر ۳ و ستون ۱۲، نیاز است که \E&a12c03Y همراه با ۶ میلیثانیه لایهگذاری برای آن ارسال شود. ترتیب سطرها و ستونها در اینجا معکوس است، و سطر و ستون به صورت دو رقم چاپ میشوند. شرح پایانهٔ مربوطه به این صورت بیان میشود:
پایانهٔ Microterm ACT-IV نیازمند ارسال سطر و ستون جاری با پیشوند یک ^T است، در حالی که سطر و ستون صرفاً به صورت باینری کدگذاری شدهاند:
پایانههایی که از “%c” استفاده میکنند باید بتوانند مکاننما را به عقب ببرند (cub1)، و مکاننما را یک سطر روی صفحه به بالا ببرند (cuu1). این امر ضروری است زیرا ارسال \n، ^D و \r همیشه ایمن نیست، چرا که سیستم ممکن است آنها را تغییر دهد یا نادیده بگیرد. (روالهای کتابخانه که با terminfo سروکار دارند حالتهای tty را به گونهای تنظیم میکنند که تبها هرگز بسط نیابند، بنابراین ارسال \t ایمن است. مشخص شده است که این مورد برای Ann Arbor 4080 حیاتی است.)
مثال پایانی LSI ADM-3A است، که از سطر و ستونی با آفستِ یک فاصله استفاده میکند، بدین ترتیب:
cup=\E=%p1%' '%+%c%p2%' '%+%c
پس از ارسال “\E=”، این عبارت پارامتر اول را در پشته قرار میدهد، مقدار اسکی فاصله (32) را در پشته میگذارد، آنها را جمع میکند (حاصلجمع را به جای دو مقدار پیشین در پشته قرار میدهد) و آن مقدار را به صورت یک نویسه خروجی میدهد. سپس همین کار برای پارامتر دوم انجام میشود. محاسبات ریاضی پیچیدهتر با استفاده از پشته امکانپذیر است.
حرکات مکاننما (Cursor Motions)
اگر پایانه روشی سریع برای بردن مکاننما به موقعیت آغازین (home) دارد (به بالاترین گوشهٔ سمت چپ صفحه)، آنگاه میتوان این را با home مشخص کرد؛ به همین ترتیب یک راه سریع برای رسیدن به گوشهٔ پایین سمت چپ را میتوان به صورت ll تعیین نمود؛ این ممکن است شامل بالا رفتن با cuu1 از موقعیت آغازین باشد، اما برنامه هرگز نباید خودش این کار را انجام دهد (مگر اینکه ll این کار را انجام دهد) چرا که نمیتواند هیچ فرضی دربارهٔ اثر بالا رفتن از موقعیت آغازین داشته باشد. توجه داشته باشید که موقعیت آغازین (home) همان آدرسدهی به (0,0) است: به گوشهٔ بالا چپ صفحه، نه حافظه. (بنابراین، توالی \EH در پایانههای HP را نمیتوان برای home به کار برد.)
اگر پایانه دارای آدرسدهی مطلق سطر یا ستون مکاننما باشد، میتوان آنها را به صورت قابلیتهای تکپارامتری hpa (موقعیت افقی مطلق یا horizontal position absolute) و vpa (موقعیت عمودی مطلق یا vertical position absolute) مشخص کرد. گاهی این موارد کوتاهتر از توالی عمومیتر دوپارامتری هستند (مانند hp2645) و میتوان آنها را ترجیحاً به جای cup به کار برد. اگر حرکتهای محلی پارامتردار وجود دارند (مانند حرکت به اندازهٔ n فاصله به راست)، میتوان آنها را با cud، cub، cuf، و cuu با یک پارامتر منفرد که نشاندهندهٔ تعداد فاصلهها برای حرکت است مشخص کرد. اینها در درجهٔ نخست زمانی مفید هستند که پایانه فاقد cup باشد، مانند TEKTRONIX 4025.
اگر پایانه هنگام اجرای برنامهای که از این قابلیتها استفاده میکند نیاز به قرار گرفتن در یک حالت خاص دارد، کدهای ورود و خروج از این حالت را میتوان به صورت smcup و rmcup تعیین کرد. این موضوع برای نمونه در پایانههایی مانند Concept با بیش از یک صفحه حافظه پیش میآید. اگر پایانه تنها دارای آدرسدهی مکاننما نسبت به حافظه باشد و نه آدرسدهی نسبت به صفحه، باید پنجرهای به اندازهٔ یک صفحه در پایانه ثابت شود تا آدرسدهی مکاننما به درستی کار کند. این مورد برای TEKTRONIX 4025 نیز استفاده میشود، که در آن smcup نویسهٔ فرمان را روی نویسهٔ مورد استفادهٔ terminfo تنظیم میکند. اگر توالی smcup صفحه را پس از خروجی دادن توالی rmcup به حالت پیشین بازنگرداند (به حالت پیش از خروجی دادن rmcup)، nrrmc را مشخص کنید.
حاشیهها (Margins)
SVr4 (و X/Open Curses) چندین قابلیت رشتهای را برای تنظیم حاشیهها فهرست میکنند. دو مورد برای استفاده با پایانهها، و شش مورد دیگر برای استفاده با چاپگرها در نظر گرفته شده بودند.
- دو قابلیت پایانه فرض میکنند که پایانه ممکن است قابلیت تنظیم حاشیهٔ چپ و/یا راست در موقعیت فعلی ستون مکاننما را داشته باشد.
- قابلیتهای چاپگر فرض میکنند که چاپگر ممکن است دو نوع قابلیت داشته باشد:
- توانایی تنظیم حاشیهٔ بالا و/یا پایین با استفاده از موقعیت فعلی سطر، و
- قابلیتهای پارامتردار برای تنظیم حاشیههای بالا، پایین، چپ و راست با توجه به تعداد خطوط یا ستونها.
در عمل، دستهبندی به “پایانه” و “چاپگر” مناسب نیست:
- •
- پایگاه دادهٔ پایانهٔ AT&T SVr4 چهار بار از smgl برای سختافزار AT&T استفاده میکند.
- سه مورد از این چهار مورد، چاپگر هستند. آنها فاقد توانایی تنظیم حاشیههای چپ/راست با مشخص کردن ستون هستند.
- •
- سایر پایانهها (غیر AT&T) ممکن است از حاشیهها پشتیبانی کنند اما با فرضیاتی متفاوت از AT&T.
- به عنوان نمونه، DEC VT420 از حاشیههای چپ/راست پشتیبانی میکند، اما تنها با استفاده از پارامتر ستون. به عنوان یک پیچیدگی اضافه، VT420 از دو تنظیم برای فعالسازی کامل حاشیههای چپ/راست استفاده میکند (حالت حاشیهٔ چپ/راست، و حالت مبدأ). مورد اول حاشیهها را فعال میکند، که باعث میشود متن چاپشده درون حاشیهها شکسته شود، اما مورد دوم برای جلوگیری از آدرسدهی مکاننما در خارج از آن حاشیهها مورد نیاز است.
- •
- هر دو حاشیهٔ چپ/راست DEC VT420 با یک توالی کنترلی واحد تنظیم میشوند. اگر هر یک حذف شود، حاشیهٔ مربوطه روی لبهٔ چپ یا راست صفحهٔ نمایش تنظیم میشود (بهجای دستنخورده گذاشتن حاشیه).
اینها قابلیتهای مربوط به حاشیه هستند:
| نام | توضیحات |
| smgl | تنظیم حاشیهٔ چپ در ستون فعلی |
| smgr | تنظیم حاشیهٔ راست در ستون فعلی |
| smgb | تنظیم حاشیهٔ پایین در سطر فعلی |
| smgt | تنظیم حاشیهٔ بالا در سطر فعلی |
| smgbp | تنظیم حاشیهٔ پایین در سطر N |
| smglp | تنظیم حاشیهٔ چپ در ستون N |
| smgrp | تنظیم حاشیهٔ راست در ستون N |
| smgtp | تنظیم حاشیهٔ بالا در سطر N |
| smglr | تنظیم هر دو حاشیهٔ چپ و راست به L و R |
| smgtb | تنظیم هر دو حاشیهٔ بالا و پایین به T و B |
هنگام نوشتن برنامهای که از این قابلیتهای رشتهای استفاده میکند، ابتدا باید جفتها بررسی شوند تا مشخص گردد آیا هر دو قابلیت در جفت تنظیم شدهاند یا تنها یکی از آنها تنظیم شده است:
- اگر هر دو قابلیت smglp و smgrp تنظیم شده باشند، هر یک با یک آرگومان منفرد، N، استفاده میشوند که به ترتیب شمارهٔ ستون حاشیهٔ چپ و راست را مشخص میکند.
- اگر هر دو قابلیت smgtp و smgbp تنظیم شده باشند، هر یک به ترتیب برای تنظیم حاشیهٔ بالا و پایین استفاده میشوند:
- smgtp با یک آرگومان منفرد، N، یعنی شمارهٔ سطر حاشیهٔ بالا استفاده میشود.
- smgbp با دو آرگومان، N و M، استفاده میشود که شمارهٔ سطر حاشیهٔ پایین را مشخص میکنند؛ اولی با شمارش از بالای صفحه و دومی با شمارش از پایین. این کار با دو شیوهٔ تعیین حاشیهٔ پایین در چاپگرهای سازندگان مختلف سازگار است.
- هنگام طراحی یک ورودی terminfo برای چاپگری که حاشیهٔ پایین قابل تنظیم دارد، بسته به چاپگر، فقط باید از آرگومان اول یا دوم استفاده شود. هنگام توسعهٔ برنامهای که از smgbp برای تنظیم حاشیهٔ پایین استفاده میکند، باید هر دو آرگومان داده شوند.
برعکس، زمانی که تنها یک قابلیت در جفت تنظیم شده باشد:
- اگر تنها یکی از smglp و smgrp تنظیم شده باشد، آنگاه با دو آرگومان استفاده میشود: شمارهٔ ستون حاشیههای چپ و راست، به همان ترتیب.
- به همین ترتیب، اگر تنها یکی از smgtp و smgbp تنظیم شده باشد، آنگاه با دو آرگومان استفاده میشود که حاشیههای بالا و پایین را، به همان ترتیب، با شمارش از بالای صفحه مشخص میکنند.
- هنگام طراحی یک ورودی terminfo برای چاپگری که نیازمند تنظیم همزمان حاشیههای چپ و راست یا بالا و پایین است، تنها یک قابلیت در جفتهای smglp و smgrp یا smgtp و smgbp باید تعریف شود، و دیگری تعریفنشده باقی بماند.
به جز برای توصیفهای بسیار قدیمی پایانه، مانند مواردی که برای SVr4 توسعه یافتهاند، طرحی که بیان شد باید منسوخ تلقی شود. مجموعهٔ بهبودیافتهای از قابلیتها در اواخر نسخههای SVr4 افزوده شد (smglr و smgtb)، که صریحاً از دو پارامتر برای تنظیم حاشیههای چپ/راست یا بالا/پایین استفاده میکنند.
هنگام تنظیم حاشیهها، مقادیر سطر و ستون مبنای صفر دارند.
قابلیت رشتهای mgc باید تعریف شود. برنامههایی مانند tabs(1) برای بازنشانی تمام حاشیهها به این تکیه میکنند.
پاککردن نواحی (Area Clears)
اگر پایانه بتواند از موقعیت فعلی تا انتهای سطر را پاک کند، در حالی که مکاننما را در جای خود باقی میگذارد، این باید به صورت el داده شود. اگر پایانه بتواند از ابتدای سطر تا موقعیت فعلی (شامل خود آن) را پاک کند، در حالی که مکاننما را در جای خود باقی میگذارد، این باید به صورت el1 داده شود. اگر پایانه بتواند از موقعیت فعلی تا انتهای صفحهٔ نمایش را پاک کند، آنگاه این باید به صورت ed داده شود. Ed تنها از ستون اول یک سطر تعریف میشود. (بنابراین، در صورتی که یک ed واقعی در دسترس نباشد، میتواند با درخواستی برای حذف تعداد زیادی خط شبیهسازی شود.)
درج/حذف خط و حرکات عمودی (Insert/Delete Line and Vertical Motions)
اگر پایانه بتواند یک خط خالی جدید پیش از خطی که مکاننما در آن قرار دارد باز کند، این باید به صورت il1 داده شود؛ این کار تنها از موقعیت نخست یک خط انجام میشود. سپس مکاننما باید در خط خالی جدید ظاهر شود. اگر پایانه بتواند خطی را که مکاننما در آن قرار دارد حذف کند، آنگاه این باید به صورت dl1 داده شود؛ این کار تنها از نخستین موقعیت در خطی که باید حذف شود انجام میپذیرد. نسخههایی از il1 و dl1 که یک پارامتر منفرد میگیرند و به همان تعداد خط درج یا حذف میکنند را میتوان به صورت il و dl مشخص کرد.
اگر پایانه دارای یک ناحیهٔ پیمایش قابل تنظیم باشد (مانند vt100) دستور تنظیم آن را میتوان با قابلیت csr توصیف کرد، که دو پارامتر میگیرد: خطوط بالا و پایین ناحیهٔ پیمایش. متأسفانه، موقعیت مکاننما پس از استفاده از این دستور تعریفنشده است.
میتوان اثر درج یا حذف خط را با استفاده از csr بر روی یک ناحیهٔ بهدرستی انتخابشده به دست آورد؛ دستورهای sc و rc (ذخیره و بازیابی مکاننما) ممکن است برای اطمینان از اینکه رشتهٔ درج/حذف ترکیبی شما مکاننما را جابهجا نمیکند مفید باشند. (توجه داشته باشید که کتابخانهٔ ncurses(3X) این ترکیب را بهطور خودکار انجام میدهد، بنابراین نیازی نیست برای یک ورودی دارای csr رشتههای درج/حذف بسازید).
روش دیگر برای ساخت درج و حذف ممکن است استفاده از ترکیبی از نمایه (index) با ویژگی قفل حافظه موجود در برخی پایانهها باشد (مانند سری HP-700/90، که البته دارای درج/حذف نیز هستند).
درج خطوط در بالا یا پایین صفحه را نیز میتوان در بسیاری از پایانهها بدون درج/حذف خط واقعی، با استفاده از ri یا ind انجام داد، و اغلب حتی در پایانههای دارای آن ویژگیها سریعتر است.
قابلیت بولی non_dest_scroll_region در صورتی باید تنظیم شود که هر پنجرهٔ پیمایش در واقع یک درگاه دید (view port) بر روی یک بوم (canvas) به اندازهٔ صفحه باشد. برای آزمودن این قابلیت، یک ناحیهٔ پیمایش در وسط صفحه ایجاد کنید، مطلبی در خط پایین بنویسید، مکاننما را به بالای ناحیه ببرید، و ri و به دنبال آن dl1 یا ind را اجرا کنید. اگر دادههایی که توسط ri از پایین ناحیه به بیرون پیمایش شده بودند دوباره ظاهر شوند، پیمایش غیرمخرب است. System V و X/Open Curses انتظار دارند که ind، ri، indn و rin پیمایش مخرب را شبیهسازی کنند؛ مستندات آنها هشدار میدهند که csr را تعریف نکنید مگر اینکه این موضوع درست باشد. این پیادهسازی curses انعطافپذیرتر است و در صورت تعریف بودن ndsrc پس از پیمایش پاککردنهای صریح را انجام میدهد.
اگر پایانه توانایی تعریف یک پنجره به عنوان بخشی از حافظه را داشته باشد، که همهٔ دستورها بر آن اثر بگذارند، باید به عنوان رشتهٔ پارامتردار wind مشخص شود. چهار پارامتر به ترتیب عبارتند از: خطوط آغازین و پایانی در حافظه و ستونهای آغازین و پایانی در حافظه.
اگر پایانه بتواند حافظهٔ نمایش را در بالا نگه دارد، آنگاه قابلیت da باید مشخص شود؛ اگر حافظهٔ نمایش را بتوان در پایین نگه داشت، آنگاه db باید داده شود. اینها نشان میدهند که حذف یک خط یا پیمایش ممکن است خطوط غیرخالی را از پایین به بالا بیاورد یا اینکه پیمایش به عقب با ri ممکن است خطوط غیرخالی را به پایین بیاورد.
درج/حذف نویسه (Insert/Delete Character)
در رابطه با درج/حذف نویسه، دو نوع اصلی پایانهٔ هوشمند وجود دارد که میتوان با استفاده از terminfo توصیف کرد. رایجترین عملیات درج/حذف نویسه تنها بر نویسههای روی خط فعلی اثر میگذارند و نویسهها را به طور صلب به بیرون از انتهای خط شیفت میدهند. پایانههای دیگر، مانند Concept 100 و Perkin Elmer Owl، میان فاصلههای تایپشده و تایپنشده بر روی صفحه تمایز قائل میشوند، و هنگام یک درج یا حذف تنها تا یک فاصلهٔ تایپنشده بر روی صفحه شیفت میدهند که یا حذف میشود یا به دو فاصلهٔ تایپنشده گسترش مییابد.
میتوانید نوع پایانهٔ خود را با پاک کردن صفحه و سپس تایپ کردن متن جداشده با حرکات مکاننما مشخص کنید. عبارت “abc def” را با استفاده از حرکات محلی مکاننما (نه فاصلهها) میان “abc” و “def” تایپ کنید. سپس مکاننما را پیش از “abc” قرار دهید و پایانه را در حالت درج بگذارید. اگر تایپ کردن نویسهها باعث شود بقیهٔ خط به طور صلب شیفت یابد و نویسهها از انتها بیرون بیفتند، پایانهٔ شما میان فاصلهها و موقعیتهای تایپنشده تفاوتی قائل نمیشود. اگر با انجام درج، “abc” به سمت “def” شیفت یابد و سپس هر دو با هم دور انتهای خط فعلی بچرخند و به خط بعدی بروند، شما نوع دوم پایانه را دارید، و باید قابلیت in را مشخص کنید که مخفف “insert null” (درج تهی) است.
در حالی که اینها دو ویژگی از نظر منطقی جداگانه هستند (حالت درج تکخطی در برابر چندخطی، و رفتار ویژه با فاصلههای تایپنشده)، ما هیچ پایانهای ندیدهایم که حالت درج آن نتواند با این ویژگی منفرد توصیف شود.
پایگاه دادهٔ Terminfo میتواند هم پایانههایی که دارای حالت درج هستند و هم پایانههایی که یک توالی ساده برای باز کردن موقعیت خالی در خط فعلی ارسال میکنند را توصیف کند. توالی ورود به حالت درج را به عنوان smir مشخص کنید. توالی خروج از حالت درج را به عنوان rmir مشخص کنید. اکنون هر توالی لازم برای ارسال درست پیش از ارسال نویسهای که باید درج شود را به عنوان ich1 مشخص کنید. بیشتر پایانههای دارای حالت درج واقعی، ich1 را مشخص نخواهند کرد؛ پایانههایی که توالیای برای باز کردن یک موقعیت در صفحه ارسال میکنند باید آن را در اینجا مشخص نمایند.
اگر پایانهٔ شما هر دو را دارد، حالت درج معمولاً به ich1 ترجیح داده میشود. از نظر فنی، نباید هر دو را مشخص کنید مگر اینکه پایانه واقعاً نیاز داشته باشد که هر دو به صورت ترکیبی استفاده شوند. بر این اساس، برخی از برنامههای غیر curses در صورت وجود هر دو دچار سردرگمی میشوند؛ نشانهٔ آن تکرار مضاعف نویسهها در یک بهروزرسانی با استفاده از درج است. این الزام اکنون نادر است؛ بیشتر توالیهای ich به smir قبلی نیاز ندارند، و بیشتر حالتهای درج smir به ich1 پیش از هر نویسه نیازی ندارند. بنابراین، curses جدید در واقع فرض میکند که وضعیت چنین است و بسته به مورد از rmir/smir یا ich/ich1 استفاده میکند (اما نه از هر دو). اگر ناچارید برای پایانهای به اندازهٔ کافی قدیمی که به هر دو نیاز دارد، ورودیای بنویسید که تحت curses جدید استفاده شود، توالیهای rmir/smir را در ich1 بگنجانید.
اگر به فاصلهگذاری پس از درج (post insert padding) نیاز است، آن را به عنوان تعداد میلیثانیهها در ip (یک گزینهٔ رشتهای) مشخص کنید. هر توالی دیگری که ممکن است لازم باشد پس از درج یک نویسهٔ منفرد ارسال شود را نیز میتوان در ip مشخص کرد. اگر پایانهٔ شما هم نیازمند قرار گرفتن در یک “حالت درج” است و هم یک کد ویژه پیش از هر نویسهٔ درجشده، آنگاه هر دو smir/rmir و ich1 را میتوان ارائه داد، و هر دو استفاده خواهند شد. قابلیت ich با یک پارامتر، n، اثرات ich1 را n بار تکرار خواهد کرد.
اگر بین نویسههای تایپشده در حالی که در حالت درج نیستید فاصلهگذاری لازم است، این را به عنوان تعداد میلیثانیهها فاصلهگذاری در rmp مشخص کنید.
گاهی لازم است در حین حضور در حالت درج جابهجا شوید تا نویسهها را روی همان خط حذف کنید (برای نمونه، اگر یک تب پس از موقعیت درج وجود داشته باشد). اگر پایانهٔ شما اجازهٔ حرکت در حین حضور در حالت درج را میدهد، میتوانید قابلیت mir را برای سرعت بخشیدن به درج در این حالت مشخص کنید. حذف mir تنها بر سرعت اثر میگذارد. برخی پایانهها (بهویژه پایانههای Datamedia) نباید به دلیل نحوهٔ کارکرد حالت درجشان mir داشته باشند.
در نهایت، میتوانید dch1 را برای حذف یک نویسهٔ منفرد، dch را با یک پارامتر، n، برای حذف n نویسه، و حالت حذف را با ارائهٔ smdc و rmdc جهت ورود به حالت حذف و خروج از آن (هر حالتی که پایانه برای کارکردن dch1 لازم است در آن قرار گیرد) مشخص کنید.
دستوری برای پاک کردن n نویسه (معادل خروجی دادن n فاصله بدون جابهجا کردن مکاننما) میتواند به صورت ech با یک پارامتر مشخص شود.
برجستهسازی، زیرخطدار کردن و زنگهای بصری (Highlighting, Underlining, and Visible Bells)
اگر پایانهٔ شما یک یا چند نوع از ویژگیهای نمایشی را دارد، اینها را میتوان به روشهای گوناگونی نمایش داد. باید یکی از شیوههای نمایش را به عنوان حالت برجسته (standout mode) انتخاب کنید، که قالبی مناسب، با کنتراست بالا و ملایم برای چشمها را جهت برجستهسازی پیامهای خطا و سایر موارد جلبتوجه ارائه میدهد. (اگر حق انتخاب دارید، ویدئوی معکوس بههمراه روشنایی نیمه مناسب است، یا ویدئوی معکوس به تنهایی). توالیهای ورود به حالت برجسته و خروج از آن به ترتیب به صورت smso و rmso داده میشوند. اگر کد تغییر به حالت برجسته یا خروج از آن، یک یا حتی دو فاصلهٔ خالی روی صفحه بر جای بگذارد، همانطور که TVI 912 و Teleray 1061 انجام میدهند، آنگاه xmc باید مشخص شود تا بگوید چند فاصله باقی مانده است.
کدهای شروع زیرخطدار کردن و پایان زیرخطدار کردن را میتوان به ترتیب به صورت smul و rmul مشخص کرد. اگر پایانه کدی برای زیرخطدار کردن نویسهٔ فعلی و جابهجا کردن مکاننما به اندازهٔ یک فاصله به سمت راست دارد، مانند Microterm Mime، این را میتوان به صورت uc ارائه داد.
سایر قابلیتها برای ورود به حالتهای گوناگون برجستهسازی شامل موارد زیر است: blink (چشمکزن) bold (ضخیم یا بسیار روشن) dim (کمنور یا نیمهروشن) invis (خالی یا متن نامرئی) prot (محافظتشده) rev (ویدئوی معکوس) sgr0 (خاموش کردن همهٔ حالتهای ویژگیها) smacs (ورود به حالت مجموعه نویسهٔ جایگزین) و rmacs (خروج از حالت مجموعه نویسهٔ جایگزین). روشن کردن هر یک از این حالتها به تنهایی ممکن است حالتهای دیگر را خاموش کند یا نکند.
اگر توالیای برای تنظیم ترکیبهای اختیاری از حالتها وجود داشته باشد، این باید به صورت sgr (تنظیم ویژگیها) داده شود، که ۹ پارامتر میگیرد. هر پارامتر صفر (0) یا غیرصفر است، بسته به اینکه ویژگی متناظر روشن باشد یا خاموش. این ۹ پارامتر به ترتیب عبارتند از: برجسته (standout)، زیرخط (underline)، معکوس (reverse)، چشمکزن (blink)، کمنور (dim)، ضخیم (bold)، خالی (blank)، محافظتشده (protect)، مجموعه نویسهٔ جایگزین (alternate character set). نیازی نیست همهٔ حالتها توسط sgr پشتیبانی شوند، تنها آنهایی که دستورهای ویژگی جداگانهٔ متناظر برایشان وجود دارد کافی است.
برای نمونه، DEC vt220 از بیشتر حالتها پشتیبانی میکند:
| پارامتر tparm | ویژگی | توالی گریز |
| none | none | \E[0m |
| p1 | standout | \E[0;1;7m |
| p2 | underline | \E[0;4m |
| p3 | reverse | \E[0;7m |
| p4 | blink | \E[0;5m |
| p5 | dim | در دسترس نیست |
| p6 | bold | \E[0;1m |
| p7 | invis | \E[0;8m |
| p8 | protect | استفاده نشده |
| p9 | altcharset | ^O (خاموش) ^N (روشن) |
ما هر توالی گریز را با خاموش کردن هرگونه حالت موجود آغاز میکنیم، زیرا روش سریعی برای تعیین فعال بودن آنها وجود ندارد. حالت برجسته به عنوان ترکیبی از معکوس و ضخیم تنظیم شده است. پایانهٔ vt220 دارای حالت محافظتشده (protect mode) است، اگرچه معمولاً در sgr استفاده نمیشود زیرا از نویسههای روی صفحه در برابر پاککردنهای میزبان محافظت میکند. حالت altcharset نیز متفاوت است از این حیث که بسته به اینکه خاموش یا روشن باشد، یا ^O است یا ^N. اگر همهٔ حالتها روشن شوند، توالی حاصل \E[0;1;4;5;7;8m^N خواهد بود.
برخی از توالیها میان حالتهای گوناگون مشترک هستند. برای نمونه، ;7 زمانی ارسال میشود که p1 یا p3 درست باشد، یعنی اگر هر یک از حالتهای برجسته یا معکوس روشن شوند.
نوشتن توالیهای بالا همراه با وابستگیهای آنها موارد زیر را حاصل میکند:
| توالی | زمان ارسال در خروجی | ترجمهٔ terminfo |
| \E[0 | همیشه | \E[0 |
| ;1 | اگر p1 یا p6 باشد | %?%p1%p6%|%t;1%; |
| ;4 | اگر p2 باشد | %?%p2%|%t;4%; |
| ;5 | اگر p4 باشد | %?%p4%t;5%; |
| ;7 | اگر p1 یا p3 باشد | %?%p1%p3%|%t;7%; |
| ;8 | اگر p7 باشد | %?%p7%t;8%; |
| m | همیشه | m |
| ^N یا ^O | اگر p9 باشد ^N، وگرنه ^O | %?%p9%t^N%e^O%; |
قرار دادن همهٔ اینها با هم در توالی sgr عبارت زیر را به دست میدهد:
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
%?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
به یاد داشته باشید که اگر sgr را مشخص میکنید، باید sgr0 را نیز مشخص نمایید. همچنین، برخی پیادهسازیها بر این امر متکی هستند که در صورت ارائهٔ sgr0 باید sgr نیز مشخص شود، با این وجود لزوماً همهٔ ورودیهای terminfo دارای یک رشتهٔ sgr نیستند. بسیاری از ورودیهای terminfo از ورودیهای termcap مشتق شدهاند که رشتهٔ sgr ندارند. تنها نقص افزودن یک رشتهٔ sgr این است که termcap همچنین فرض میکند که sgr0 از حالت مجموعه نویسهٔ جایگزین خارج نمیشود.
پایانههای دارای اشکال “کوکی جادویی” (magic cookie) (xmc) هنگام دریافت توالیهای تنظیم حالت، “کوکیهای” ویژهای بر جای میگذارند، که بهجای داشتن بیتهای اضافی برای هر نویسه، الگوریتم نمایش را تحت تأثیر قرار میدهند. برخی پایانهها، مانند HP 2621، هنگام رفتن به یک خط جدید یا آدرسدهی مکاننما، بهطور خودکار از حالت برجسته خارج میشوند. برنامههایی که از حالت برجسته استفاده میکنند باید پیش از حرکت مکاننما یا ارسال خط جدید از حالت برجسته خارج شوند، مگر اینکه قابلیت msgr که اطمینان میدهد حرکت در حالت برجسته ایمن است، وجود داشته باشد.
اگر پایانه روشی برای فلاش زدن صفحه جهت نمایش بیصدای خطا دارد (جایگزینی برای زنگ) آنگاه این را میتوان به صورت flash مشخص کرد؛ این دستور نباید مکاننما را جابهجا کند.
اگر مکاننما در زمانی که در خط پایینی نیست نیاز دارد که نسبت به حالت عادی نمایانتر باشد (برای نمونه، تبدیل یک زیرخط غیرچشمکزن به یک بلوک خواناتر یا زیرخط چشمکزن) این توالی را به عنوان cvvis مشخص کنید. اگر روشی برای کاملاً نامرئی کردن مکاننما وجود دارد، آن را به عنوان civis مشخص کنید. قابلیت cnorm باید ارائه شود که اثرات هر دوی این حالتها را باطل میکند.
اگر پایانهٔ شما نویسههای زیرخطدار را به درستی تولید میکند (بدون نیاز به کدهای ویژه) حتی اگر بازنویسی نکند (overstrike)، آنگاه باید قابلیت ul را مشخص کنید. اگر بازنویسی یک نویسه روی نویسهٔ دیگر هر دو نویسه را روی صفحه بر جای میگذارد، قابلیت os را مشخص نمایید. اگر بازنویسیها با یک فاصله قابل پاک شدن باشند، آنگاه این موضوع باید با مشخص کردن eo نشان داده شود.
صفحهکلید عددی و کلیدهای تابعی (Keypad and Function Keys)
اگر پایانه دارای صفحهٔ کلید عددی (کیپد) باشد که هنگام فشردن کلیدها کد مخابره میکند، این اطلاعات را میتوان ارائه داد. توجه داشته باشید که مدیریت پایانههایی که صفحهٔ کلید عددی در آنها تنها به صورت محلی کار میکند امکانپذیر نیست (این امر برای نمونه، در مورد کلیدهای بدون شیفت HP 2621 صدق میکند). اگر صفحهٔ کلید عددی را بتوان برای مخابره کردن یا مخابره نکردن تنظیم کرد، این کدها را به صورت smkx و rmkx مشخص کنید. در غیر این صورت فرض میشود که صفحهٔ کلید عددی همیشه کد مخابره میکند.
کدهای ارسالی توسط کلیدهای پیکان چپ، پیکان راست، پیکان بالا، پیکان پایین و کلید home را میتوان به ترتیب به صورت kcub1، kcuf1، kcuu1، kcud1 و khome مشخص کرد. اگر کلیدهای تابعی مانند f0، f1، ...، f10 وجود دارند، کدهایی که ارسال میکنند را میتوان به صورت kf0, kf1, ..., kf10 ارائه داد. اگر این کلیدها برچسبهایی به جز f0 تا f10 پیشفرض دارند، برچسبها را میتوان به صورت lf0, lf1, ..., lf10 مشخص نمود.
کدهای مخابرهشده توسط برخی کلیدهای ویژهٔ دیگر را میتوان مشخص کرد:
- kll (رفتن به انتهای صفحه یا home down)،
- kbs (پسبر یا backspace)،
- ktbc (پاک کردن تمام تبها)،
- kctab (پاک کردن توقفگاه تب در این ستون)،
- kclr (پاک کردن صفحه یا کلید erase)،
- kdch1 (حذف نویسه)،
- kdl1 (حذف خط)،
- krmir (خروج از حالت درج)،
- kel (پاک کردن تا انتهای خط)،
- ked (پاک کردن تا انتهای صفحه)،
- kich1 (درج نویسه یا ورود به حالت درج)،
- kil1 (درج خط)،
- knp (صفحهٔ بعدی)،
- kpp (صفحهٔ قبلی)،
- kind (پیمایش به جلو/پایین)،
- kri (پیمایش به عقب/بالا)،
- khts (تنظیم توقفگاه تب در این ستون).
علاوه بر این، اگر صفحهٔ کلید عددی دارای یک آرایهٔ ۳ در ۳ از کلیدها شامل چهار کلید پیکان باشد، پنج کلید دیگر را میتوان به صورت ka1، ka3، kb2، kc1 و kc3 مشخص کرد. این کلیدها زمانی مفید هستند که اثرات یک پد جهتدار ۳ در ۳ مورد نیاز باشد.
رشتههای برنامهریزی کلیدهای تابعی را میتوان به صورت pfkey، pfloc و pfx مشخص کرد. رشتهای برای برنامهریزی برچسبهای صفحهٔ نمایش باید به صورت pln مشخص شود. هر یک از این رشتهها دو پارامتر میگیرند: شمارهٔ کلید تابعی برای برنامهریزی (از 0 تا 10) و رشتهای که باید با آن برنامهریزی شود. شمارههای کلید تابعی خارج از این محدوده ممکن است به شیوهای وابسته به پایانه، کلیدهای تعریفنشده را برنامهریزی کنند. تفاوت میان این قابلیتها این است که pfkey باعث میشود فشردن کلید دادهشده همانند تایپ کردن رشتهٔ دادهشده توسط کاربر باشد؛ pfloc باعث میشود رشته توسط پایانه به صورت محلی اجرا شود؛ و pfx باعث میشود رشته به رایانه مخابره شود.
قابلیتهای nlab، lw و lh تعداد برچسبهای صفحهٔ نمایشِ قابل برنامهریزی و پهنا و ارتفاع آنها را تعریف میکنند. اگر دستورهایی برای روشن و خاموش کردن برچسبها وجود دارد، آنها را در smln و rmln مشخص کنید. smln معمولاً پس از یک یا چند توالی pln در خروجی ارسال میشود تا اطمینان حاصل شود که تغییر قابل مشاهده میگردد.
تبها و مقداردهی اولیه (Tabs and Initialization)
تعداد اندکی از قابلیتها تنها برای مدیریت توقفگاههای تب استفاده میشوند.
- اگر پایانه دارای تبهای سختافزاری است، توالی نویسهای را که به توقفگاه تب بعدی پیش میرود، به عنوان مقدار قابلیت رشتهای tab (ht) مشخص کنید (معمولاً Control+I).
- توالی نویسهای را که به توقفگاه تب پیشین عقبنشینی میکند (به سمت چپ حرکت میکند) به عنوان مقدار قابلیت رشتهای back_tab (cbt) مشخص کنید.
- طبق قرارداد، اگر حالتهای پایانه به گونهای پیکربندی شده باشند که تبها به جای پایانه، توسط میزبان بسط یابند، برنامهها حتی در صورت وجود قابلیتهای tab (ht) یا back_tab (cbt) نباید از آنها استفاده کنند، زیرا ممکن است توقفگاههای تب توسط کاربر به درستی تنظیم نشده باشند.
- •
- اگر پایانه هنگام روشن شدن دارای توقفگاههای تب سختافزاری باشد که در هر n سلول نویسه تنظیم شدهاند، n را به عنوان مقدار قابلیت عددی init_tabs (it).
- دستورهای tset و “tput init” وجود قابلیت init_tabs (it) را به این معنا تفسیر میکنند که پایانه مسئول بسط دادن توقفگاه تب است و همچنین آن را به عنوان دستوری برای تنظیم توقفگاههای تب روی مقدار آن در نظر میگیرند. اگر پایانه دارای توقفگاههای تبی باشد که بتوان آنها را در حافظهٔ پایدار ذخیره کرد، شرح نوع terminfo آن میتواند فرض کند که آنها به درستی تنظیم شدهاند.
سایر قابلیتها عبارتاند از:
- is1، is2 و is3، رشتههای مقداردهی اولیه برای پایانه،
- iprog، نام مسیر برنامهای که باید برای مقداردهی اولیهٔ پایانه اجرا شود،
- و if، نام فایلی حاوی رشتههای طولانیِ مقداردهی اولیه.
انتظار میرود این رشتهها پایانه را در حالتهایی سازگار با بقیهٔ شرح terminfo قرار دهند. آنها معمولاً هر بار که کاربر وارد سیستم میشود، توسط گزینهٔ init برنامهٔ tput به پایانه فرستاده میشوند. آنها به ترتیب زیر چاپ خواهند شد:
- اجرای برنامهٔ
- iprog
- ارسال خروجیِ
-
is1 و
is2 - تنظیم حاشیهها با استفاده از
- mgc یا
smglp و smgrp یا
smgl و smgr - تنظیم تبها با استفاده از
- tbc و hts
- چاپ فایل
- if
- و در نهایت ارسال خروجیِ
- is3.
بیشترِ مقداردهی اولیه با is2 انجام میشود. حالتهای ویژهٔ پایانه را میتوان بدون تکرار رشتهها، با قرار دادن توالیهای مشترک در is2 و حالتهای خاص در is1 و is3 تنظیم نمود.
مجموعهای از توالیها که بازنشانی اساسیتری را از یک حالت کاملاً نامشخص انجام میدهند، میتوانند به صورت rs1، rs2، rf و rs3 ارائه شوند، که به ترتیب مشابه is1، is2، if و is3 هستند. این رشتهها توسط گزینهٔ reset در tput، یا توسط برنامهٔ reset (یک نام مستعار برای tset)، که هنگام قفل شدن یا به بنبست رسیدن پایانه استفاده میشود، به خروجی فرستاده میشوند. دستورها معمولاً تنها زمانی در rs1، rs2 rs3 و rf قرار داده میشوند که اثرات آزاردهندهای روی صفحه ایجاد کنند و هنگام ورود به سیستم ضروری نباشند. به عنوان مثال، دستور قرار دادن vt100 در حالت ۸۰ ستونی معمولاً بخشی از is2 خواهد بود، اما باعث یک پرش بصری آزاردهنده در صفحه میشود و از آنجا که پایانه معمولاً از پیش در حالت ۸۰ ستونی قرار دارد، در حالت عادی نیازی به آن نیست.
برنامهٔ reset رشتههایی از جمله iprog و غیره را به همان ترتیب برنامهٔ init مینویسد، با این تفاوت که به جای is1 و غیره از rs1 و غیره استفاده میکند. اگر هر یک از رشتههای قابلیت بازنشانیِ rs1، rs2، rs3 یا rf وجود نداشته باشند، برنامهٔ reset به رشتهٔ قابلیت مقداردهی اولیهٔ متناظر بازمیگردد.
اگر دستورهایی برای تنظیم و پاک کردن توقفگاههای تب وجود داشته باشد، میتوان آنها را به عنوان tbc (پاک کردن همهٔ توقفگاههای تب) و hts (تنظیم یک توقفگاه تب در ستون جاری از هر سطر) ارائه کرد. اگر برای تنظیم تبها توالی پیچیدهتری از آنچه با این دستورها قابل توصیف است نیاز باشد، توالی را میتوان در is2 یا if قرار داد.
دستور tput reset از همان رشتههای قابلیتی استفاده میکند که دستور reset به کار میبرد، اگرچه این دو برنامه (tput و reset) گزینههای خط فرمان متفاوتی را ارائه میدهند.
در عمل، این قابلیتهای terminfo اغلب در مقداردهی اولیهٔ تبها استفاده نمیشوند (اگرچه برای برنامهٔ tabs الزامی هستند):
- •
- تقریباً تمام پایانههای سختافزاری (دستکم آنهایی که از تبها پشتیبانی میکردند) آنها را روی هر هشت ستون مقداردهی اولیه میکردند:
- تنها استثنا سری AT&T 2300 بود که تبها را روی هر پنج ستون تنظیم میکرد.
- بهویژه، سازندگان پایانههای سختافزاری که معمولاً به عنوان الگو برای شبیهسازهای پایانهٔ امروزی استفاده میشوند، مستنداتی ارائه کردند که نشان میداد هشت ستون استاندارد بوده است.
- به همین دلیل، برنامههای مقداردهی اولیهٔ پایانه tput و tset تنها زمانی از قابلیتهای tbc (clear_all_tabs) و hts (set_tab) مستقیماً استفاده میکنند که قابلیت it (init_tabs) روی مقداری غیر از هشت تنظیم شده باشد.
تأخیرها و فاصلهگذاری (Delays and Padding)
بسیاری از پایانههای قدیمیتر و کندتر نه از دستدهی XON/XOFF و نه از DTR پشتیبانی میکنند، از جمله پایانههای نسخهٔ چاپی و برخی CRTهای بسیار قدیمی (برای نمونه DEC VT100ها). این پایانهها ممکن است پس از برخی حرکات مکاننما و تغییرات صفحه، به نویسههای فاصلهگذاری (padding) نیاز داشته باشند.
اگر پایانه برای کنترل جریان از دستدهی xon/xoff استفاده میکند (یعنی هنگامی که بافرهای ورودی آن نزدیک به پر شدن هستند، خودکار ^S را به میزبان بازمیفرستد)، xon را تنظیم کنید. این قابلیت ارسال فاصلهگذاری را متوقف میکند. همچنین میتوانید آن را برای دستگاههای کنسول نگاشتشده در حافظه که عملاً محدودیت سرعت ندارند تنظیم کنید. اطلاعات فاصلهگذاری همچنان باید درج شوند تا روالها بتوانند دربارهٔ هزینههای نسبی تصمیمگیری بهتری داشته باشند، اما نویسههای فاصلهگذاری واقعی مخابره نخواهند شد.
اگر pb (نرخ باود فاصلهگذاری) مشخص شده باشد، فاصلهگذاری در نرخهای باود پایینتر از مقدار pb متوقف میشود. اگر ورودی فاقد نرخ باود فاصلهگذاری باشد، آنگاه ارسال یا عدم ارسال فاصلهگذاری کاملاً توسط xon کنترل میشود.
اگر پایانه به نویسهای غیر از نویسهٔ تهی (صفر) به عنوان پرکننده نیاز دارد، میتوان آن را به صورت pad مشخص کرد. تنها نویسهٔ اول از رشتهٔ pad استفاده میشود.
خطوط وضعیت (Status Lines)
برخی از پایانهها دارای یک “خط وضعیت” اضافی هستند که معمولاً توسط نرمافزارها استفاده نمیشود (و بنابراین در قابلیت lines پایانه شمرده نمیشود).
سادهترین حالت، خط وضعیتی است که مکاننمای آن قابل آدرسدهی است اما بخشی از ناحیهٔ پیمایش اصلی روی صفحه نیست؛ Heathkit H19 دارای خط وضعیتی از این نوع است، همانند یک VT100 با ۲۴ خط و ناحیهٔ پیمایش ۲۳ خطی که در هنگام مقداردهی اولیه تنظیم شده باشد. این وضعیت توسط قابلیت hs نشان داده میشود.
برخی پایانههای دارای خط وضعیت برای دسترسی به خط وضعیت به توالیهای ویژهای نیاز دارند. این موارد را میتوان به صورت یک رشته با تکپارامتر tsl بیان کرد که مکاننما را به ستونی مشخص بر مبنای صفر در خط وضعیت میبرد. قابلیت fsl باید به موقعیتهای مکاننما در صفحهٔ اصلی پیش از آخرین tsl بازگردد. شاید لازم باشد مقادیر رشتهای sc (ذخیرهٔ مکاننما) و rc (بازیابی مکاننما) را در tsl و fsl تعبیه کنید تا این کار انجام شود.
خط وضعیت معمولاً همعرض با عرض پایانه در نظر گرفته میشود. اگر اینگونه نباشد، میتوانید آن را با قابلیت عددی wsl مشخص کنید.
دستوری برای پاک کردن یا خالی کردن خط وضعیت را میتوان با dsl مشخص کرد.
قابلیت بولی eslok مشخص میکند که توالیهای گریز، تبها و غیره طبق معمول در خط وضعیت کار میکنند.
پیادهسازی ncurses هنوز از هیچیک از این قابلیتها استفاده نمیکند. آنها در اینجا مستند شدهاند تا در صورتی که روزی مهم شدند در دسترس باشند.
گرافیکهای خطی (Line Graphics)
بسیاری از پایانهها دارای مجموعهنویسههای جایگزینی هستند که برای رسم فرمها مفیدند. Terminfo و curses پشتیبانی درونی از بیشتر نویسههای ترسیمیِ پشتیبانیشده توسط VT100 را به همراه برخی نویسههای افزودهشده از AT&T 4410v1 دارا هستند. این مجموعهنویسهٔ جایگزین میتواند با قابلیت acsc مشخص شود.
| acsc | ||||
| نام ACS | مقدار | نماد | جایگزین ASCII / نام گلیف | |
| ACS_RARROW | 0x2b | + | > | پیکان رو به راست |
| ACS_LARROW | 0x2c | , | < | پیکان رو به چپ |
| ACS_UARROW | 0x2d | - | ^ | پیکان رو به بالا |
| ACS_DARROW | 0x2e | . | v | پیکان رو به پایین |
| ACS_BLOCK | 0x30 | 0 | # | بلوک مربعی توپر |
| ACS_DIAMOND | 0x60 | ` | + | لوزی |
| ACS_CKBOARD | 0x61 | a | : | تخته شطرنجی (نقطهچین) |
| ACS_DEGREE | 0x66 | f | \ | نماد درجه |
| ACS_PLMINUS | 0x67 | g | # | مثبت/منفی |
| ACS_BOARD | 0x68 | h | # | تختهٔ مربعها |
| ACS_LANTERN | 0x69 | i | # | نماد فانوس |
| ACS_LRCORNER | 0x6a | j | + | گوشهٔ پایین راست |
| ACS_URCORNER | 0x6b | k | + | گوشهٔ بالا راست |
| ACS_ULCORNER | 0x6c | l | + | گوشهٔ بالا چپ |
| ACS_LLCORNER | 0x6d | m | + | گوشهٔ پایین چپ |
| ACS_PLUS | 0x6e | n | + | بعلاوهٔ بزرگ یا تقاطع |
| ACS_S1 | 0x6f | o | ~ | خط پویش ۱ |
| ACS_S3 | 0x70 | p | - | خط پویش ۳ |
| ACS_HLINE | 0x71 | q | - | خط افقی |
| ACS_S7 | 0x72 | r | - | خط پویش ۷ |
| ACS_S9 | 0x73 | s | _ | خط پویش ۹ |
| ACS_LTEE | 0x74 | t | + | اتصال T رو به راست |
| ACS_RTEE | 0x75 | u | + | اتصال T رو به چپ |
| ACS_BTEE | 0x76 | v | + | اتصال T رو به بالا |
| ACS_TTEE | 0x77 | w | + | اتصال T رو به پایین |
| ACS_VLINE | 0x78 | x | | | خط عمودی |
| ACS_LEQUAL | 0x79 | y | < | کوچکتر یا مساوی |
| ACS_GEQUAL | 0x7a | z | > | بزرگتر یا مساوی |
| ACS_PI | 0x7b | { | * | پی یونانی |
| ACS_NEQUAL | 0x7c | | | ! | نامساوی |
| ACS_STERLING | 0x7d | } | f | نماد پوند بریتانیا |
| ACS_BULLET | 0x7e | ~ | o | گلوله (bullet) |
چند نکته در مورد خود جدول صدق میکند:
- استاندارد X/Open Curses به نادرست بیان میکند که نگاشت lantern (فانوس) حرف بزرگ “I” است، گرچه پیادهسازیهای یونیکس از نگاشت حرف کوچک “i” استفاده میکنند.
- پایانهٔ DEC VT100 گرافیک را با استفاده از ویژگی مجموعهنویسهٔ جایگزین پیادهسازی میکرد، که به طور موقت بین حالتها جابهجا میشد و نویسههایی در محدودهٔ 0x60 (96) تا 0x7e (126) (ستون acsc Value در جدول) ارسال میکرد.
- پایانهٔ AT&T نویسههای گرافیکی خارج از این محدوده را اضافه کرد.
- برخی از نویسههای درون این محدوده با VT100 مطابقت ندارند؛ احتمالاً آنها در پایانهٔ AT&T استفاده میشدهاند: تختهٔ مربعها جایگزین نماد newline در VT100 میشود، در حالی که نماد فانوس جایگزین نماد vertical tab در VT100 میگردد. سایر نمادهای VT100 برای نویسههای کنترلی (horizontal tab، carriage return و line-feed) در curses دوباره استفاده نشدهاند.
بهترین روش برای تعریف مجموعهٔ گرافیکی یک دستگاه جدید، افزودن یک ستون به کپیای از این جدول برای پایانهٔ خود است، که نویسهای را مشخص کند که (هنگامی که بین کلیدهای تغییر حالت smacs/rmacs ارسال میشود) به عنوان گرافیک متناظر رندر خواهد شد. سپس جفتنویسههای VT100/پایانهٔ خود را به ترتیب از راست به چپ بخوانید؛ اینها رشتهٔ ACSC را تشکیل میدهند.
مدیریت رنگ (Color Handling)
توابع curses در کتابخانه با نامهای init_pair و init_color به دستکاری جفتهای رنگ و رنگها (مقادیر یا شاخصهای رنگ، مانند “1=red”) که در این بخش مورد بحث قرار میگیرند، میپردازند (برای جزئیات دربارهٔ این توابع و توابع مرتبط، curs_color(3X) را ببینید).
بیشتر پایانههای رنگی در رویکرد خود به مدیریت رنگ، یا “شبیه تکترونیکس” یا “شبیه اچپی” هستند.
- پایانههای شبیه تکترونیکس مجموعهای متشکل از n رنگ را تعریف میکنند (که در آن n معمولاً ۸ است)، و میتوانند رنگهای پیشزمینه و پسزمینهٔ سلول نویسه را به طور مستقل تغییر دهند، و آنها را در n×n جفت رنگ ترکیب کنند. پایانههای استاندارد ANSI شبیه تکترونیکس هستند.
- در پایانههای شبیه اچپی، کاربر باید هر جفت رنگ را به طور جداگانه تنظیم کند؛ پیشزمینه و پسزمینه به طور مستقل قابل تغییر نیستند. حداکثر m جفت رنگ را میتوان از 2×m رنگ مختلف پیکربندی کرد.
برخی از قابلیتهای پایهای مدیریت رنگ مستقل از روش کدگذاری رنگ هستند. قابلیتهای عددی max_colors (colors) و max_pairs (pairs) حداکثر تعداد رنگها و جفتهای رنگی را که دستگاه میتواند همزمان نمایش دهد، مشخص میکنند. قابلیت رشتهای orig_pair (op) (“جفت رنگ اصلی”) رنگهای پیشزمینه و پسزمینه را به مقادیر پیشفرض آنها برای پایانه بازنشانی میکند. قابلیت رشتهای orig_colors (oc) (“رنگهای اصلی”) تمامی رنگها یا جفتهای رنگی را به مقادیر پیشفرض آنها برای پایانه بازنشانی میکند. برخی از انواع پایانهها (از جمله بسیاری از شبیهسازهای پایانهٔ PC) نواحی صفحه را به جای پسزمینهٔ پیشفرض زمان روشن شدن، با رنگ پسزمینهٔ فعلی پاک میکنند؛ اینها باید قابلیت بولی back_color_erase (bce) را اعلام کنند.
در حالی که کتابخانهٔ curses با جفتهای رنگ کار میکند (که نشاندهندهٔ ناتوانی برخی دستگاهها در تنظیم مستقل رنگهای پیشزمینه و پسزمینه است)، قابلیتهای جداگانهای برای تنظیم این ویژگیها وجود دارد:
- برای تغییر رنگ پیشزمینه یا پسزمینهٔ فعلی در یک پایانهٔ نوع تکترونیکس، از setaf (تنظیم پیشزمینهٔ ANSI) و setab (تنظیم پسزمینهٔ ANSI) یا setf (تنظیم پیشزمینه) و setb (تنظیم پسزمینه) استفاده کنید. این قابلیتها یک پارامتر میگیرند که همان شمارهٔ رنگ است. مستندات SVr4 تنها setaf/setab را توصیف میکند؛ پیشنویس XPG4 بیان میدارد که «اگر پایانه از توالیهای گریز ANSI برای تنظیم پسزمینه و پیشزمینه پشتیبانی میکند، آنها باید به ترتیب به صورت setaf و setab کدگذاری شوند».
- اگر پایانه از سایر توالیهای گریز برای تنظیم پسزمینه و پیشزمینه پشتیبانی کند، آنها باید به ترتیب به صورت setf و setb کدگذاری شوند. توابع vidputs و refresh(3X) در صورت تعریف بودن قابلیتهای setaf و setab از آنها استفاده میکنند.
قابلیتهای setaf/setab و setf/setb هر کدام یک آرگومان عددی منفرد میگیرند. مقادیر آرگومان ۰ تا ۷ در setaf/setab به صورت سازگار و قابلحمل به شرح زیر تعریف شدهاند (ستون میانی همان #define نمادین موجود در سرایند کتابخانههای curses یا ncurses است). سختافزار پایانه آزاد است که اینها را به دلخواه خود نگاشت کند، اما مقادیر RGB مکانهای معمول در فضای رنگی را نشان میدهند.
| رنگ | #define | مقدار | RGB | ||
| سیاه | COLOR_BLACK | 0 | 0, | 0, | 0 |
| قرمز | COLOR_RED | 1 | max, | 0, | 0 |
| سبز | COLOR_GREEN | 2 | 0, | max, | 0 |
| زرد | COLOR_YELLOW | 3 | max, | max, | 0 |
| آبی | COLOR_BLUE | 4 | 0, | 0, | max |
| سرخابی | COLOR_MAGENTA | 5 | max, | 0, | max |
| فیروزهای | COLOR_CYAN | 6 | 0, | max, | max |
| سفید | COLOR_WHITE | 7 | max, | max, | max |
مقادیر آرگومان setf/setb از لحاظ تاریخی با نگاشت متفاوتی مطابقت دارند، یعنی:
| رنگ | #define | مقدار | RGB | ||
| سیاه | COLOR_BLACK | 0 | 0, | 0, | 0 |
| آبی | COLOR_BLUE | 1 | 0, | 0, | max |
| سبز | COLOR_GREEN | 2 | 0, | max, | 0 |
| فیروزهای | COLOR_CYAN | 3 | 0, | max, | max |
| قرمز | COLOR_RED | 4 | max, | 0, | 0 |
| سرخابی | COLOR_MAGENTA | 5 | max, | 0, | max |
| زرد | COLOR_YELLOW | 6 | max, | max, | 0 |
| سفید | COLOR_WHITE | 7 | max, | max, | max |
بسیار مهم است که این دو مجموعه از قابلیتهای رنگی با یکدیگر اشتباه گرفته نشوند؛ در غیر این صورت رنگهای قرمز و آبی روی صفحه نمایش جابهجا خواهند شد.
در یک پایانهٔ شبیه اچپی، از scp با پارامتر شمارهٔ جفت رنگ استفاده کنید تا مشخص شود کدام جفت رنگ جاری است.
برخی از پایانهها اجازه میدهند که مقادیر رنگ تغییر داده شوند:
- در یک پایانهٔ شبیه تکترونیکس، ممکن است قابلیت ccc برای نشان دادن اینکه رنگها قابل تغییر هستند وجود داشته باشد. در این صورت، قابلیت initc یک شمارهٔ رنگ (۰ تا colors - 1) و سه پارامتر دیگر را میگیرد که رنگ را توصیف میکنند. این سه پارامتر به طور پیشفرض به صورت مقادیر RGB (قرمز، سبز، آبی / Red, Green, Blue) تفسیر میشوند. اگر قابلیت بولی hls وجود داشته باشد، به جای آن به عنوان شاخصهای HLS (فام، روشنایی، اشباع / Hue, Lightness, Saturation) تفسیر میگردند. محدودهها وابسته به پایانه هستند.
- در یک پایانهٔ شبیه اچپی، initp ممکن است قابلیتی برای تغییر مقدار یک جفت رنگ ارائه دهد. این قابلیت هفت پارامتر میگیرد: یک شمارهٔ جفت رنگ (۰ تا max_pairs - 1)، و دو سهتایی که ابتدا رنگ پسزمینه و سپس رنگ پیشزمینه را توصیف میکنند. بسته به hls، این پارامترها باید (قرمز، سبز، آبی) یا (فام، روشنایی، اشباع) باشند.
در برخی پایانههای رنگی، رنگها با برجستهسازیها تداخل پیدا میکنند. میتوانید این تداخلها را با قابلیت ncv ثبت کنید. این یک ماسک بیتی از ویژگیهایی است که هنگام فعال بودن رنگها نباید استفاده شوند. تطابق با ویژگیهای شناختهشده توسط curses به صورت زیر است:
| ویژگی | بیت | دهدهی | تنظیم توسط |
| A_STANDOUT | 0 | 1 | sgr |
| A_UNDERLINE | 1 | 2 | sgr |
| A_REVERSE | 2 | 4 | sgr |
| A_BLINK | 3 | 8 | sgr |
| A_DIM | 4 | 16 | sgr |
| A_BOLD | 5 | 32 | sgr |
| A_INVIS | 6 | 64 | sgr |
| A_PROTECT | 7 | 128 | sgr |
| A_ALTCHARSET | 8 | 256 | sgr |
| A_HORIZONTAL | 9 | 512 | sgr1 |
| A_LEFT | 10 | 1024 | sgr1 |
| A_LOW | 11 | 2048 | sgr1 |
| A_RIGHT | 12 | 4096 | sgr1 |
| A_TOP | 13 | 8192 | sgr1 |
| A_VERTICAL | 14 | 16384 | sgr1 |
| A_ITALIC | 15 | 32768 | sitm |
برای مثال، در بسیاری از کنسولهای IBM PC، ویژگی زیرخطدار با رنگ پیشزمینهٔ آبی تداخل دارد و در حالت رنگی در دسترس نیست. این پایانهها باید دارای یک قابلیت ncv با مقدار ۲ باشند.
نسخهٔ SVr4 curses هیچ کاری با ncv انجام نمیدهد، اما ncurses آن را شناسایی کرده و خروجی را به نفع رنگها بهینهسازی میکند.
گوناگون (Miscellaneous)
اگر پایانه به نویسهای غیر از نویسهٔ تهی (صفر یا null) به عنوان پرکننده (pad) نیاز داشته باشد، میتوان آن را با pad مشخص کرد. تنها نخستین نویسه از رشتهٔ pad استفاده میشود. اگر پایانه نویسهٔ پرکننده ندارد، npc را مشخص کنید. توجه داشته باشید که ncurses متغیر PC سازگار با termcap را پیادهسازی میکند؛ اگرچه ممکن است برنامه این مقدار را روی چیزی غیر از تهی تنظیم کند، اما ncurses ابتدا npc را آزمایش کرده و در صورتی که پایانه نویسهٔ پرکننده نداشته باشد، از napms استفاده خواهد کرد.
اگر پایانه بتواند نیمخط به بالا یا پایین حرکت کند، این موضوع را میتوان با hu (نیمخط به بالا) و hd (نیمخط به پایین) مشخص کرد. این ویژگی عمدتاً برای بالانویسها و زیرنویسها در پایانههای نسخهٔ چاپی (hard-copy) سودمند است. اگر یک پایانهٔ نسخهٔ چاپی بتواند به صفحهٔ بعدی برود (form feed)، این را با ff (معمولاً control/L) مشخص کنید.
اگر دستوری برای تکرار یک نویسهٔ معین به تعداد دفعات مشخص وجود داشته باشد (جهت صرفهجویی در زمان ارسال شمار زیادی از نویسههای یکسان)، میتوان آن را با رشتهٔ پارامتردار rep نشان داد. پارامتر نخست، نویسهای است که باید تکرار شود و پارامتر دوم تعداد دفعات تکرار آن است. بنابراین، tparm(repeat_char, 'x', 10) همانند “xxxxxxxxxx” خواهد بود.
اگر پایانه دارای نویسهٔ فرمان قابل تنظیم باشد، مانند TEKTRONIX 4025، میتوان آن را با cmdch مشخص کرد. یک نویسهٔ فرمان نمونه (prototype) انتخاب میشود که در تمامی قابلیتها استفاده میگردد. این نویسه در قابلیت cmdch برای شناسایی داده میشود. قرارداد زیر در برخی سیستمهای یونیکس پشتیبانی میشود: محیط برای یافتن یک متغیر CC جستجو میشود، و در صورت یافت شدن، تمام موارد تکرار نویسهٔ نمونه با نویسهٔ موجود در متغیر محیطی جایگزین میشوند.
توصیفهای پایانهای که نشاندهندهٔ نوع مشخصی از یک پایانهٔ شناختهشده نیستند، مانند switch، dialup، patch، و network، باید شامل قابلیت gn (عمومی یا generic) باشند تا برنامهها بتوانند اعلام کنند که روش برقراری ارتباط با پایانه را نمیدانند. (این قابلیت در مورد توصیفهای پایانهٔ مجازی که توالیهای گریز آنها شناخته شده است، صدق نمیکند.)
اگر پایانه یک “کلید متا” داشته باشد که همانند یک کلید تبدیل (shift) عمل کند، و بیت هشتم هر نویسهٔ ارسالشده را یک کند، این موضوع را میتوان با km مشخص کرد. در غیر این صورت، نرمافزار فرض خواهد کرد که بیت هشتم بیت توازن (parity) است و معمولاً پاک خواهد شد. اگر رشتههایی برای روشن و خاموش کردن این “حالت متا” وجود داشته باشند، میتوان آنها را به صورت smm و rmm مشخص کرد.
اگر پایانه خطوط حافظهٔ بیشتری نسبت به آنچه در یک لحظه روی صفحه جا میشود داشته باشد، تعداد خطوط حافظه را میتوان با lm مشخص کرد. مقدار lm#0 نشان میدهد که تعداد خطوط ثابت نیست، اما هنوز حافظهٔ بیشتری نسبت به گنجایش صفحه وجود دارد.
اگر پایانه یکی از پایانههای پشتیبانیشده توسط پروتکل پایانهٔ مجازی یونیکس باشد، شمارهٔ پایانه را میتوان با vt مشخص کرد.
رشتههای رونوشت رسانه (Media copy) که یک چاپگر کمکیِ متصل به پایانه را کنترل میکنند میتوانند به این صورت مشخص شوند: mc0: چاپ محتویات صفحه، mc4: خاموش کردن چاپگر، و mc5: روشن کردن چاپگر. هنگامی که چاپگر روشن است، تمام متن ارسالشده به پایانه به چاپگر نیز فرستاده خواهد شد. این موضوع که آیا متن در هنگام روشن بودن چاپگر روی صفحهٔ نمایش پایانه نیز نشان داده میشود یا خیر، تعریفنشده است. گونهٔ دیگر mc5p یک پارامتر میگیرد، و چاپگر را به تعداد نویسههایی برابر با مقدار آن پارامتر روشن نگه میدارد، سپس چاپگر را خاموش میکند. این پارامتر نباید از 255 فراتر رود. تمام متن، از جمله mc4، در مدتی که یک mc5p برقرار است، به طور شفاف به چاپگر منتقل میشود.
اشکالات و رفتارهای ناهنجار (Glitches and Brain Damage)
پایانههای Hazeltine، که اجازه نمیدهند نویسههای “~” نمایش داده شوند، باید hz را مشخص کنند.
پایانههایی که تغییر خط (line-feed) را بلافاصله پس از شکست خودکار خط am نادیده میگیرند، مانند Concept و vt100، باید xenl را مشخص کنند.
اگر el برای خلاص شدن از حالت برجستهسازی (standout) الزامی باشد (به جای نوشتنِ صِرفِ متن عادی روی آن)، باید xhp داده شود.
پایانههای Teleray، که در آنها نویسههای تب تمامی نویسههایی را که مکاننما از روی آنها میگذرد به نویسهٔ فاصله تبدیل میکنند، باید xt (تبهای مخرب یا destructive tabs) را مشخص کنند. نکته: متغیری که این موضوع را نشان میدهد اکنون “dest_tabs_magic_smso” است؛ در نسخههای قدیمیتر، teleray_glitch بود. این اشکال همچنین به این معنا در نظر گرفته میشود که قرار دادن مکاننما روی یک “کوکی جادویی” (magic cookie) امکانپذیر نیست، و برای پاک کردن حالت برجستهسازی، در عوض استفاده از حذف و درج خط ضروری است. پیادهسازی ncurses این اشکال را نادیده میگیرد.
پایانهٔ Beehive Superbee، که قادر به ارسال صحیح نویسههای گریز (escape) یا control/C نیست، دارای xsb است، که نشان میدهد کلید f1 برای گریز و کلید f2 برای control/C به کار میرود. (تنها برخی از مدلهای Superbee بسته به نسخهٔ ROM این مشکل را دارند.) توجه داشته باشید که در نسخههای قدیمیتر terminfo، این قابلیت “beehive_glitch” نامیده میشد؛ اکنون “no_esc_ctl_c” است.
سایر مشکلات خاص پایانهها ممکن است با افزودن قابلیتهای بیشتری به صورت xx اصلاح شوند.
تلههای ورودیهای طولانی (Pitfalls of Long Entries)
ورودیهای طولانی terminfo بعید است مشکلی ایجاد کنند؛ تا به امروز هیچ ورودیای حتی به حداکثر ۴۰۹۶ بایتیِ جدول رشتههای terminfo نزدیک هم نشده است. متأسفانه، ترجمههای termcap بسیار سختگیرانهتر محدود شدهاند (به ۱۰۲۳ بایت)، بنابراین ترجمههای termcap از ورودیهای طولانی terminfo میتوانند مشکلساز شوند.
صفحات راهنمای 4.3BSD و نسخههای قدیمیتر tgetent به کاربر دستور میدهند که یک بافر ۱۰۲۴ بایتی برای ورودی termcap تخصیص دهد. این ورودی توسط کتابخانهٔ termcap به نویسهٔ تهی (null) ختم میشود، بنابراین حداکثر طول امن برای یک ورودی termcap برابر با 1k-1 (۱۰۲۳) بایت است. بسته به اینکه برنامه و کتابخانهٔ termcap مورد استفاده چه میکنند، و اینکه نوع پایانهٔ مورد جستجوی tgetent در کجای فایل termcap قرار دارد، چندین اتفاق ناگوار ممکن است رخ دهد:
- برخی کتابخانههای termcap یک پیام هشدار چاپ میکنند،
- برخی در صورت یافتن ورودیِ طولانیتر از ۱۰۲۳ بایت خارج میشوند،
- برخی نه خارج میشوند و نه هشدار میدهند، و هیچ کار مفیدی انجام نمیدهند، و
- برخی صرفاً ورودیها را به ۱۰۲۳ بایت کوتاه (truncate) میکنند.
برخی برنامههای کاربردی بیش از ۱ کیلوبایتِ توصیهشده را برای ورودی termcap تخصیص میدهند؛ برخی دیگر این کار را نمیکنند.
هر ورودی termcap دارای دو اندازهٔ مهم مربوط به خود است: پیش از گسترش “tc” و پس از گسترش “tc”. “tc” قابلیتی است که یک ورودی دیگر termcap را به انتهای ورودی فعلی میافزاید تا قابلیتهای آن را اضافه کند. اگر یک ورودی termcap از قابلیت “tc” استفاده نکند، مسلماً هر دو طول یکسان خواهند بود.
طول “پیش از گسترش tc” مهمترین است، زیرا فراتر از صرفاً کاربران آن پایانهٔ خاص اثر میگذارد. این برابر است با طول ورودی همانگونه که در /etc/termcap وجود دارد، منهای جفتهای اسلش وارونه-خط جدید، که tgetent هنگام خواندن آن را حذف میکند. برخی کتابخانههای termcap خط جدید پایانی را نیز حذف میکنند (termcap متعلق به GNU چنین نمیکند). اکنون فرض کنید:
- یک ورودی termcap پیش از گسترش بیش از ۱۰۲۳ بایت طول داشته باشد،
- و برنامه فقط یک بافر ۱ کیلوبایتی تخصیص داده باشد،
- و کتابخانهٔ termcap (مانند مورد موجود در BSD/OS 1.1 و GNU) کل ورودی را صرفنظر از طول آن در بافر بخواند تا ببیند آیا این همان ورودی مورد نظر است یا خیر،
- و tgetent در حال جستجو برای نوع پایانهای باشد که یا همان ورودی طولانی است، یا پس از ورودی طولانی در فایل termcap ظاهر میشود، یا اصلاً در فایل وجود ندارد (به طوری که tgetent مجبور است تمام فایل termcap را جستجو کند).
در این صورت tgetent حافظه و احتمالاً پشتهٔ خود را بازنویسی (overwrite) کرده و به احتمال زیاد موجب تخلیهٔ حافظه (core dump) و فروپاشی برنامه خواهد شد. برنامههایی مانند telnet به طور ویژهای آسیبپذیر هستند؛ برنامههای امروزی telnet مقدارهایی مانند نوع پایانه را به طور خودکار منتقل میکنند. نتایج با یک کتابخانهٔ termcap، مانند سامانههای SunOS 4.1.3 و Ultrix 4.4، که هنگام خواندن یک ورودی بیش از حد طولانی termcap پیامهای هشدار چاپ میکند، تقریباً به همان اندازه نامطلوب است. اگر یک کتابخانهٔ termcap ورودیهای طولانی را کوتاه کند، مانند OSF/1 3.0، در اینجا از فروپاشی مصون خواهد بود اما دادههای نادرستی را برای پایانه بازمیگرداند.
طول “پس از گسترش tc” اثری مشابه موارد فوق خواهد داشت، اما تنها برای افرادی که در عمل TERM را روی آن نوع پایانه تنظیم کردهاند؛ زیرا tgetent گسترش “tc” را تنها پس از یافتن نوع پایانهٔ مورد نظر انجام میدهد، نه در حین جستجو.
به طور خلاصه، یک ورودی termcap که طولانیتر از ۱۰۲۳ بایت باشد میتواند در ترکیبهای گوناگون از کتابخانههای termcap و برنامههای کاربردی، موجب تخلیهٔ حافظه (core dump)، هشدارها یا عملکرد نادرست شود. اگر حتی پیش از گسترش “tc” بیش از حد طولانی باشد، این اثر را حتی برای کاربران برخی دیگر از انواع پایانهها و کاربرانی که متغیر TERM آنها فاقد ورودی termcap است خواهد داشت.
هنگامی که در حالت -C (ترجمه به termcap) باشد، پیادهسازی ncurses از tic(1M) در صورتی که طول ترجمهٔ termcap پیش از tc بیش از حد طولانی باشد، پیامهای هشدار صادر میکند. گزینهٔ -c (بررسی یا check) نیز طولهای حلشده (پس از گسترش tc) را بررسی مینماید.
فایلها (FILES)
- /usr/share/terminfo
- شاخهٔ پایگاه دادهٔ توصیف پایانهٔ کامپایلشده
گسترشها (EXTENSIONS)
جستجو برای توصیفهای پایانه در $HOME/.terminfo و TERMINFO_DIRS توسط پیادهسازیهای قدیمیتر پشتیبانی نمیشود.
برخی پیادهسازیهای curses در SVr4، و تمامی پیادهسازیهای پیش از SVr4، عملگرهای %A و %O را در رشتههای پارامتر تفسیر نمیکنند.
استانداردهای SVr4/XPG4 مشخص نمیکنند که آیا msgr در هنگام قرار داشتن در یک حالتِ مجموعهنویسهٔ جایگزین (alternate-character-set)، اجازهٔ حرکت را میدهد یا خیر (چنین حالتهایی ممکن است از جمله، CR و NL را به نویسههایی نگاشت کنند که موجب حرکتهای محلی نمیشوند). پیادهسازی ncurses مقدار msgr را در حالت ALTCHARSET نادیده میگیرد. این امر این احتمال را به وجود میآورد که یک پیادهسازی XPG4 با تفسیری مخالف، ممکن است نیاز داشته باشد تا قابلیت msgr در ورودیهای terminfo که برای ncurses ساخته شدهاند، غیرفعال (خاموش) باشد.
کتابخانهٔ ncurses درج نویسه و حالتهای درج نویسه را به روشی اندکی غیر استاندارد مدیریت میکند تا به بهرهوری بهتری در بهروزرسانی دست یابد. زیربخش درج/حذف نویسه (Insert/Delete Character) در بالا را ببینید.
جایگزینیهای پارامتر برای set_clock و display_clock در SVr4 یا X/Open Curses مستند نشدهاند. آنها از مستندات پایانهٔ AT&T 505 استنباط شدهاند.
در انتساب قابلیت kmous دقت کنید. کتابخانهٔ ncurses تمایل دارد آن را به عنوان KEY_MOUSE تفسیر کند، جهت استفاده توسط پایانهها و شبیهسازهایی مانند xterm که میتوانند اطلاعات ردیابی موشواره را در جریان ورودیِ صفحهکلید بازگردانند.
استاندارد X/Open Curses اشارهای به حروف مورب (italics) نکرده است. برنامههای با قابلیت حمل باید فرض کنند که قابلیتهای عددی مقدارهای ۱۶ بیتی علامتدار هستند. این شامل قابلیت no_color_video (ncv) نیز میشود. مقدار ماسک 32768 که برای حروف مورب با ncv به کار میرود ممکن است با یک ncv غایب یا لغوشده اشتباه گرفته شود. اگر حروف مورب باید همراه با رنگها کار کنند، مقدار ncv باید مشخص شود، حتی اگر صفر باشد.
پورتهای تجاری مختلف از terminfo و curses از زیرمجموعههای متفاوتی از X/Open Curses و (در برخی موارد) گسترشهای متفاوتی پشتیبانی میکنند. در اینجا خلاصهای آورده شده است، که تا اکتبر ۱۹۹۵ دقیق است، زمانی که پس از آن بازار تجاری یونیکس منقبض شد و تنوع خود را از دست داد.
- سیستمهای SVr4، Solaris، و ncurses از تمام قابلیتهای SVr4 پشتیبانی میکنند.
- سیستم IRIX از مجموعهٔ SVr4 پشتیبانی میکند و یک قابلیت رشتهای گسترشیافتهٔ مستندنشده (set_pglen) را اضافه میکند.
- سیستمهای SVr1 و Ultrix از یک زیرمجموعهٔ محدود از قابلیتهای terminfo پشتیبانی میکنند. قابلیتهای بولی به xon_xoff ختم میشوند؛ قابلیتهای عددی به width_status_line؛ و قابلیتهای رشتهای به prtr_non.
- سیستم HP/UX از زیرمجموعهٔ SVr1 پشتیبانی میکند، بهعلاوهٔ مقدارهای عددی SVr[234] شامل num_labels، label_height، label_width، بهعلاوهٔ کلیدهای تابعی ۱۱ تا ۶۳، بهعلاوهٔ plab_norm، label_on، و label_off، بههمراه شماری از گسترشهای ناسازگار در جدول رشتهها.
- سیستم AIX از زیرمجموعهٔ SVr1 پشتیبانی میکند، بهعلاوهٔ کلیدهای تابعی ۱۱ تا ۶۳، بههمراه شماری از گسترشهای ناسازگار در جدول رشتهها.
- سیستم OSF/1 هم از مجموعهٔ SVr4 و هم از گسترشهای AIX پشتیبانی میکند.
قابلیت حمل (PORTABILITY)
روی اینکه ورودیهای کامپایلشدهٔ (باینری) terminfo میان سیستمهای تجاری یونیکس قابل حمل باشند، حساب نکنید. دستکم دو پیادهسازی از terminfo (پیادهسازیهای مربوط به HP-UX و AIX) پس از SVr1 از دیگر سیستمهای یونیکس System V فاصله گرفتند، و قابلیتهای گسترشیافتهای را به جدول رشتهها افزودند که (در قالب باینری) با گسترشهای بعدی System V و X/Open Curses تداخل پیدا میکنند.
نویسندگان (AUTHORS)
Zeyd M. Ben-Halim، Eric S. Raymond، Thomas E. Dickey. بر پایهٔ pcurses اثر Pavel Curtis.
همچنین ببینید (SEE ALSO)
infocmp(1M)، tabs(1)، tic(1M)، curses(3X)، curs_color(3X)، curs_terminfo(3X)، curs_variables(3X)، printf(3)، term_variables(3X)، term(5)، user_caps(5)
| 2025-08-16 | ncurses 6.6 |