Scroll to navigation

term(5) تنسيقات الملفات term(5)

الاسم

term - وصف طرفية terminfo مُجمّع

الوصف

يُجمّع tic(1) وصف نوع طرفية terminfo، ويقرؤه setupterm(3NCURSES). قد يُخزّن الوصف المُجمّع في ملف أو في قاعدة بيانات تضم، من المحتمل، العديد من هذه الأوصاف. علاوة على ذلك، قد يكون الوصف المُجمّع بأحد تنسيقين: أحدهما مشابه لما يستخدمه System V، وتنسيق أحدث وقابل للتوسع يستخدمه ncurses حصريًا.

موقع التخزين

تُوضع أوصاف terminfo المُجمّعة تحت الدليل /etc/terminfo. يُحدّد أحد الإعدادين عند بناء مكتبات ncurses.

شجرة أدلة
يُستخدم نظام ذو مستويين لتجنب البحث الخطي في دليل نظام يونكس ضخم: /etc/terminfo/c/name حيث name هو اسم الطرفية، و c هو الحرف الأول من name. بالتالي، يوجد الوصف المُجمّع لنوع الطرفية “act4” في الملف /etc/terminfo/a/act4. تُنفّذ المرادفات لنفس الطرفية عبر روابط متعددة لنفس الملف المُجمّع.
قاعدة بيانات مجزأة
باستخدام واجهة برمجة تطبيقات قاعدة بيانات بيركلي، يُخزّن نوعان من السجلات: بيانات terminfo بنفس التنسيق المخزن في شجرة الأدلة مع استخدام اسم النوع الرئيس للطرفية كمفتاح، وسجلات تحتوي فقط على أسماء مستعارة تشير إلى الاسم الرئيس.
إذا بُنيت لكتابة قواعد بيانات مجزأة، سيظل بإمكان ncurses قراءة قواعد بيانات terminfo المنظمة كشجرة أدلة، لكن لا يمكنها كتابة مدخلات في شجرة الأدلة. يمكنها كتابة (أو إعادة كتابة) مدخلات في قاعدة البيانات المجزأة.
تميز ncurses بين الحالتين في متغيري البيئة TERMINFO و TERMINFO_DIRS بافتراض وجود شجرة أدلة للمدخلات التي تقابل دليلاً موجودًا، وقاعدة بيانات مجزأة في الحالات الأخرى.

تنسيق التخزين الموروث

اختير التنسيق ليكون متماثلاً على جميع الأجهزة. يُفترض أن عرض البايت ثماني بتات على الأقل، لكن لا توضع افتراضات حول ترتيب البتات أو امتداد الإشارة.

ينقسم الملف إلى ستة أجزاء:

(أ)
الترويسة،
(ب)
أسماء الطرفية،
(ج)
الأعلام المنطقية،
(د)
الأرقام،
(هـ)
السلاسل النصية، و
(و)
جدول السلاسل النصية.

يبدأ قسم الترويسة الملف. يحتوي هذا القسم على ستة أعداد صحيحة قصيرة بالتنسيق الموضح أدناه. هذه الأعداد هي

(1) الرقم السحري
(ثُماني 0432)؛
(2) الحجم،
بالبايتات، لقسم أسماء الطرفية؛
(3) عدد البايتات في قسم الأعلام المنطقية؛
(4) عدد الأعداد الصحيحة القصيرة في قسم الأرقام؛
(5) عدد الإزاحات
(أعداد صحيحة قصيرة) في قسم السلاسل النصية؛
(6) الحجم،
بالبايتات، لـ جدول السلاسل النصية.

تكون الإمكانات في أقسام الأعلام المنطقية، و الأرقام، و السلاسل النصية بنفس الترتيب الموجود في ملف الترويسة term.h.

الأعداد الصحيحة القصيرة مُشار إليها، في النطاق من -32768 إلى 32767، وتُخزّن بتنسيق طرفية الصغير (little-endian).

الأرقام في وصف الطرفية، سواء كانت مدخلات في جدول الأرقام أو السلاسل النصية، هي أعداد صحيحة موجبة. تُعامل الأعلام المنطقية كأعداد صحيحة موجبة بحجم بايت واحد. في كل حالة، تمثل تلك الأعداد الصحيحة الموجبة إمكانية طرفية. يستخدم مُجمّع الطرفية tic أعدادًا صحيحة سالبة لمعالجة الحالات التي لا تتوفر فيها الإمكانية:

إذا كانت الإمكانية غائبة عن هذه الطرفية، يخزن tic القيمة -1 في الجدول المقابل.
تُمثّل القيمة الصحيحة -1 بواسطة بايتين هما 0377، 0377.
تُمثّل القيم المنطقية الغائبة بالبايت 0 (خطأ).
إذا أُلغيت إمكانية من هذه الطرفية، يخزن tic القيمة -2 في الجدول المقابل.
تُمثّل القيمة الصحيحة -2 بواسطة بايتين هما 0377، 0376.
تُمثّل القيمة المنطقية -2 بالبايت 0376.
القيم السالبة الأخرى غير قانونية.

يأتي قسم أسماء الطرفية بعد الترويسة. ويحتوي على السطر الأول من وصف terminfo، الذي يسرد الأسماء المختلفة للطرفية، مفصولة بحرف “|“. ينتهي قسم أسماء الطرفية بحرف ASCII NUL.

يحتوي قسم الأعلام المنطقية على بايت واحد لكل علم. تكون الإمكانات المنطقية إما 1 أو 0 (صواب أو خطأ) وفقًا لما إذا كانت الطرفية تدعم الإمكانية المعطاة أم لا.

بين قسم الأعلام المنطقية وقسم الأرقام، سيُدرج بايت صفري، إذا لزم الأمر، لضمان بدء قسم الأرقام عند بايت زوجي. هذا من بقايا بنية PDP-11 الموجهة بالكلمة، والتي صُممت أصلاً لتجنب المصائد الناجمة عن عنونة كلمة عند حدود بايت فردية. تُحاذى جميع الأعداد الصحيحة القصيرة عند حدود كلمة قصيرة.

قسم الأرقام مشابه لقسم الأعلام المنطقية. تشغل كل إمكانية بايتين، وتُخزّن كعدد صحيح قصير بتنسيق طرفية الصغير.

قسم السلاسل النصية مشابه أيضًا. تُخزّن كل إمكانية كعدد صحيح قصير. تكون قيمة الإمكانية فهرسًا في جدول السلاسل النصية.

جدول السلاسل النصية هو القسم الأخير. ويحتوي على جميع قيم إمكانات السلاسل النصية المشار إليها في قسم السلاسل النصية. تنتهي كل سلسلة نصية بـ null. تُخزّن الأحرف الخاصة بتدوين ^X أو \c في شكلها المُفسّر، وليس في تمثيل الطباعة. تُخزّن معلومات الحشو $<nn> ومعلومات المعامل %x سليمة في شكلها غير المُفسّر.

تنسيق التخزين الممتد

يصف القسم السابق التنسيق الثنائي التقليدي لـ terminfo. مع بعض التغييرات الطفيفة في الإزاحات (انظر القابلية للنقل)، يُستخدم نفس التنسيق الثنائي في جميع أنظمة يونكس الحديثة. يستخدم كل نظام مجموعة قياسية من الإمكانات المنطقية أو الرقمية أو السلاسل.

تدعم مكتبات وتطبيقات ncurses التنسيق الثنائي الممتد لـ terminfo، مما يسمح للمستخدمين بتعريف إمكانات تُحمّل عند التشغيل. هذا الامتداد متاح بفضل حقيقة أن التطبيقات الأخرى تتوقف عن قراءة بيانات terminfo عندما تصل إلى نهاية الحجم المعطى في الترويسة. تتحقق ncurses من الحجم، وإذا تجاوز الحجم المحدد في الترويسة، تواصل التحليل وفقًا لمخططها الخاص.

أولاً، تقرأ الترويسة الممتدة (5 أعداد صحيحة قصيرة):

(1)
عدد الإمكانات المنطقية الممتدة
(2)
عدد الإمكانات الرقمية الممتدة
(3)
عدد إمكانات السلاسل النصية الممتدة
(4)
عدد العناصر في جدول السلاسل النصية الممتد
(5)
حجم جدول السلاسل النصية الممتد بالبايتات

تتضمن قيم العدد والحجم لجدول السلاسل النصية الممتد أسماء الإمكانات الممتدة بالإضافة إلى قيم الإمكانات الممتدة.

باستخدام الأعداد والأحجام، تخصص ncurses مصفوفات وتقرأ البيانات للإمكانات الممتدة بنفس الترتيب كمعلومات الترويسة.

يحتوي جدول السلاسل النصية الممتد على قيم لإمكانات السلاسل النصية. بعد نهاية هذه القيم، يحتوي على الأسماء لكل من الإمكانات الممتدة بالترتيب: المنطقية، والرقمية، والسلسلة النصية.

عن طريق تخزين أوصاف الطرفية بهذه الطريقة، تتمكن ncurses من توفير قاعدة بيانات مفيدة للتطبيقات الموروثة، بالإضافة إلى توفير بيانات للتطبيقات التي تتطلب معلومات عن نوع الطرفية أكثر مما كان متوقعًا من X/Open Curses. انظر user_caps(5) للحصول على نظرة عامة على الطريقة التي تستخدم بها ncurses هذه المعلومات الممتدة.

يمكن للتطبيقات التي تتعامل مع بيانات الطرفية استخدام التعريفات الموصوفة في terminfo_variables(3NCURSES) التي تربط أسماء الإمكانات الطويلة بأعضاء هيكل TERMTYPE.

تنسيق الأرقام الممتد

في بعض الأحيان، لا تكون الأعداد الصحيحة المُشار إليها بحجم 16 بت كبيرة بما يكفي. قدمت ncurses 6.1 تنسيقًا جديدًا عن طريق إجراء بعض التغييرات على التنسيق الموروث:

  • رقم سحري مختلف (ثُماني 01036)
  • تغيير نوع مصفوفة الأرقام من أعداد صحيحة مُشار إليها بحجم 16 بت إلى أعداد صحيحة مُشار إليها بحجم 32 بت.

للحفاظ على التوافق، تقدم المكتبة نفس هياكل البيانات للمستخدمين المباشرين لهيكل TERMTYPE كما في التنسيقات السابقة. ومع ذلك، لا يمكن لذلك تزويد المستدعِين بالأرقام الممتدة. تستخدم المكتبة هيكل بيانات مماثلاً ولكنه مخفي TERMTYPE2 لتوفير البيانات لدوال terminfo.

الملفات

/etc/terminfo
قاعدة بيانات أوصاف الطرفية المجمّعة

القابلية للنقل

setupterm

لاحظ أنه من الممكن لـ setupterm أن يتوقع مجموعة مختلفة من الإمكانات عما هو موجود فعليًا في الملف. فإما أن قاعدة البيانات حُدّثت منذ إعادة تجميع setupterm (مما يؤدي إلى مدخلات إضافية غير معروفة في الملف) أو أن البرنامج أعيد تجميعه حديثًا عما كانت عليه قاعدة البيانات (مما يؤدي إلى مدخلات مفقودة). يجب أن يكون الروتين setupterm مستعدًا لكلا الاحتمالين - وهذا هو سبب تضمين الأرقام والأحجام. أيضًا، يجب دائمًا إضافة الإمكانات الجديدة في نهاية قوائم الإمكانات المنطقية والرقمية وسلاسل النصوص.

التنسيق الثنائي

لا تحدد X/Open Curses تنسيقًا لقاعدة بيانات terminfo. استخدم System V curses شجرة أدلة من الملفات الثنائية، ملف واحد لكل وصف طرفية.

على الرغم من الاستخدام المتسق لأرقام طرفية الصغير والتنسيق الواصف لنفسه، فليس من الحكمة الاعتماد على قابلية نقل مدخلات terminfo الثنائية بين إصدارات يونكس التجارية. المشكلة هي وجود ثلاثة إصدارات على الأقل من terminfo (تحت HP-UX، و AIX، و OSF/1) كل منها انحرف عن System V terminfo بعد SVr1، وأضاف إمكانات ممتدة إلى جدول السلاسل التي (في التنسيق الثنائي) تتعارض مع امتدادات System V و X/Open Curses. انظر terminfo(5) لمناقشة تفصيلية لقضايا توافق مصدر terminfo.

هذا التنفيذ متوافق مبدئيًا مع التنسيق الثنائي لـ terminfo المستخدم من قبل Solaris curses، باستثناء بعض التفاصيل قليلة الاستخدام حيث وُجد أن الأخير لا يطابق X/Open Curses. يمكن مطابقة التنسيق المستخدم من قبل إصدارات يونكس الأخرى عبر بناء ncurses بخيارات ضبط مختلفة.

الرموز السحرية

الرقم السحري في ملف terminfo ثنائي هو أول 16 بت (بايتين). بالإضافة إلى جعله أكثر موثوقية للمكتبة للتحقق من أن الملف هو terminfo، تستخدمه أدوات مساعدة مثل file(1) أيضًا لمعرفة تنسيق الملف. عرّف System V أكثر من رقم سحري واحد، منها 0433 و 0435 كتفريغ للشاشة (انظر scr_dump(5)). يستخدم هذا التنفيذ 01036 كامتداد لهذا التسلسل، ولكن ببايت عالي الرتبة مختلف لتجنب الارتباك.

هيكل TERMTYPE

يُوفّر الوصول المباشر إلى هيكل TERMTYPE للتطبيقات الموروثة. يجب أن تستخدم التطبيقات القابلة للنقل tigetflag(3NCURSES) والدوال ذات الصلة لقراءة إمكانات الطرفية.

أسماء طرفية بحالات أحرف مختلطة

يستخدم عدد صغير من أوصاف الطرفية أحرفًا كبيرة في أسمائها. إذا كان نظام الملفات الأساسي يتجاهل الفرق بين الأحرف الكبيرة والصغيرة، فإن ncurses تمثل “الحرف الأول“ من اسم الطرفية المستخدم كمستوى متوسط في شجرة أدلة بصيغة ست عشرية (من حرفين).

الحدود

تخزن ncurses أوصاف الطرفية المُجمّعة في ثلاثة تنسيقات ذات صلة، موصوفة في الأقسام الفرعية

  • تنسيق التخزين الموروث، و
  • تنسيق التخزين الممتد، و
  • تنسيق الأرقام الممتد.

يختلف تنسيق التخزين الموروث وتنسيق الأرقام الممتد بأنواع الإمكانات الرقمية التي يمكن تخزينها (على سبيل المثال، أعداد صحيحة 16 بت مقابل 32 بت). يضيف تنسيق التخزين الممتد الذي قدمته ncurses 5.0 بيانات إلى أي من هذين التنسيقين.

تطبق بعض القيود:

  • لا يمكن أن تتجاوز إجمالي المدخلات المُجمّعة 4096 بايت في التنسيق الموروث.
  • لا يمكن أن تتجاوز إجمالي المدخلات المُجمّعة 32768 بايت في التنسيق الممتد.
  • لا يمكن أن يتجاوز حقل الاسم 128 بايت.

تقتصر المدخلات المُجمّعة على 32768 بايت لأن الإزاحات في جدول السلاسل النصية تستخدم أعدادًا صحيحة بحجم بايتين. كان من الممكن للتنسيق الموروث دعم مدخلات بحجم 32768 بايت، لكنه كان مقتصرًا على 4096 بايت لصفحة ذاكرة افتراضية.

أمثلة

إليك وصف terminfo لـ Lear-Siegler ADM-3، وهي طرفية مبكرة شائعة وإن كانت بسيطة للغاية.


adm3a|lsi adm3a,
am,
cols#80, lines#24,
bel=^G, clear=\032$<1>, cr=^M, cub1=^H, cud1=^J,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
home=^^, ind=^J,

يتبع ذلك تفريغ ست عشري لوصف طرفيتها المُجمّع (بالتنسيق الموروث).

0000 1a 01 10 00 02 00 03 00 82 00 31 00 61 64 6d 33 ........ ..1.adm3
0010 61 7c 6c 73 69 20 61 64 6d 33 61 00 00 01 50 00 a|lsi ad m3a...P.
0020 ff ff 18 00 ff ff 00 00 02 00 ff ff ff ff 04 00 ........ ........
0030 ff ff ff ff ff ff ff ff 0a 00 25 00 27 00 ff ff ........ ..%.'...
0040 29 00 ff ff ff ff 2b 00 ff ff 2d 00 ff ff ff ff ).....+. ..-.....
0050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0120 ff ff ff ff ff ff 2f 00 07 00 0d 00 1a 24 3c 31 ....../. .....$<1
0130 3e 00 1b 3d 25 70 31 25 7b 33 32 7d 25 2b 25 63 >..=%p1% {32}%+%c
0140 25 70 32 25 7b 33 32 7d 25 2b 25 63 00 0a 00 1e %p2%{32} %+%c....
0150 00 08 00 0c 00 0b 00 0a 00 ........ .

المؤلفون

Thomas E. Dickey
تنسيق terminfo الممتد لـ ncurses 5.0
دعم قاعدة البيانات المجزأة لـ ncurses 5.6
دعم الأرقام الممتدة لـ ncurses 6.1

Eric S. Raymond
وثّق تنسيق terminfo الموروث (المستخدم من قبل pcurses).

انظر أيضًا

ncurses(3NCURSES), terminfo(3NCURSES), terminfo(5), user_caps(5)

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

16 أغسطس 2025 ncurses 6.6