( تعريب الأنظمة ) :
المقصود بتعريب الأنظمة هو جعل نظام التشغيل يقبل الحروف العربية كمدخلات و مخرجات و هذا هو الأساس لبقية قضايا التعريب.
* الشفرة (الترميز) العربية:
تمثل الحروف العربية داخل الجهاز عن طريق ( ASCII, Unicode )، و كالعادة لم يتفق العرب على شفرة موحدة و كانت لهم جهود لتوحيد
الشفرة في عدة ندوات من اهمها:
1- ندوة تونس عام 1976م.
2- ندوة مصر عام 1977م.
3- ندوة روما بإيطاليا عام 1977م نتج عنها إقتراح شفرة عربية موحدة.
4- ندوة الرباط بالمغرب عام 1982م نتج عنها إقتراح شفرة عربية أخرى تبنتها منظمة ASMO تحت مسمى ASMO449 قدمت للمنظمة
الدولية تحت إسم ISO9032.
- و تم توحيد الشفرة تقريباً على يد Microsoft في MS-Windows.
- ظهرت أكثر من 20 شفرة عربية.
* أسس بناء الشفرة العربية:
1.يجب أن يكون الترميز متسلسل حسب التسلسل الهجائي لسهولة الترتيب.
2.رمز واحد لكل حرف بغض النظر عن موقعة.
3.المحافظة على الرموز اللاتينية و الرموز المتعلقة بها (إذا أردنا المحافظة على ثنائية اللغة).
* المحارف العربية:
ويقصد بها شكل الحرف أثناء طباعته على الشاشة -أشكال الحروف تطرقنا لها في المبحث الأول-.
1. عدد المحارف في اللغة العربية هي [مجموع(كل حرف * عدد أشكالة )].
2. حركات الضبط بالشكل، و هنا يتبادر السؤال:
س:"هل حركات الضبط بالشكل نضع لها شفرة خاصة أم تكون مع الحرف ؟"
ج: نضع لكل حرف شفرة خاصة لسببين هما:
1.عدد حركات الضبط بالشكل قليل. 2.أنها تستخدم مع جميع الأحرف.
- عند إضافة حركات الضبط بالشكل يتحرك المؤشر بمقدار صفر، حيث أنه لا يتحرك عند كتابتها.
3. أضافة بعض المحارف الخاصة مثل: 'ال' و 'لا'.
* و كما هو معروف فإن الآسكي كود ASCII يتكون من واحد بايت فيوجد نوعين من كود الآسكي و هما:
ASCII 7- حيث كود الحرف له 7 بت و الثامن يعتبر Parity Bit لتحقق من الأخطاء.
- ASCII 8 و هذا النوع لا يوجد به Parity Bit.
* بعض أنظمة التشفير العربية:
1. المواصفات العربية ASMO449 تستخدم 7بت.
- غير ثنائية اللغة.
- الحركات وضع لها آسكي خاص.
-بعض الرموز و الأرقام باللغة العربية و البعض الآخر بقي على اللغة الإنجليزية.
2. المواصفات العربية SAMO0662 و تستخدم 8 بت.
- لم تستفد من الجزء ما بعد 128.
- غير ثنائية اللغة.
3. المواصفات العربية ASMO0708 عام 1988م.
- ثنائية اللغة.
4. مايكروسوفت 708 ( مماثلة تقريباً للـ ASMO708 ) و موجهة إلى IBM-DOS.
5. مايكروسوفت 709 ( تطوير 708 ).
6. مايكروسوفت 710 ( تم تجنب حروف الرسم ).
7. النافذة ( شبية بالـ 708 ).
8. IBM-Arabic و لا توجد به حركات الضبط بالشكل.
9. المساعد العربي.
10. المعَّرب ( مدينة الملك عبدالعزيز ).
11. ويندوز العربي.
12. Unicode . ( و لمزيد من الإطلاع على الـ Unicode يمكنك الإطلاع على الموقع www.unicode.org )
* الحروف العربية موجوده في أنظمة التشفير بشكله الأصلي بغض النظر عن موقعة من المقطع، و الذي يغير شكل الحرف
حسب موقعة هو الـ "Context Analyzer"، و الحروف تخزن كما هو مبين بالرسم:
فكما هو مبين بالرسم فإن أشكال الحرف الواحد لها Code واحد و الذي يختار و يتحكم بأشكال الحرف هو الـ Context Analyzer.
*مستويات تعريب الأنظمة:
1. تعريب الشفرات Code Page :
يتم تخزين صفات الحروف في ملفات ثنائية Binary Files تسمى ملفات الـ Code Page Information ذات الإمتداد 'CPI.*' ويوجد
في الجهاز ملف إسمة ega.CPI و هو يتحكم في شكل الحروف على الشاشة و الطابعة و لو تم مسح هذا الملف لن تستطيع
الكتابة على الجهاز.
* تصميم الحروف العربية:
تستخدم فيها احد برامج الـ Font Editor و مهمته هو نقل شكل الحرف من المستخدم إلى الـ CPI.* ، و يعمل للحرف كود
آسكي واحد و له أكثر من شكل كما يحدده الـ Context Analyzer .
في لغة الأسمبلي يوجد الـ Interrupt رقم 10H يدخل و يتحكم في الـ CPI.*
int 10H
لاحظ أن الـ Scan Code يختلف عن الـ ASCII Code فلنأخذ هذا المثال للتوضيح:
لاحظ أن الزر الذي يوجد عليه الحرف 'A' و 'a' له Scan Code واحد و لكن للـ 'A' آسكي مختلف عن آسكي الـ 'a' .
2. تعريب لوحة المفاتيح:
يوجد معالج صغير داخل لوحة المفاتيح يحول النبضة التي تحدث عن الضغط على زر معين إلى Scan Code و حجمة بايت واحد
و بإجراء عملية بسيطة و هي 2 أس 8 يتبين لنا أن بإستطاعتنا تمثيل 256 زر مختلف بها البايت و لكن إذا علمنا أنه عند الضغط
على الزر له Scan Code و عند الرفع له Scan Code سيقل عدد الأزرار الممكن تمثيلها بالبايت الواحد إلى 128 زر.
و نعيد أن الـ Scan Code ليس له علاقة بكود الآسكي و لا بوظيفة الزر.
* يوجد هناك ثلاثة أنواع من الأزرار هي:
1. أزرار قابلة للطباعة و تتأثر بالإستمرار في الضغط مثل الحروف و الأرقام و ... إلخ.
2. أزرار تحكم و لا تتأثر بالإستمرار بالضفط مثل Alt و Shift و ... إلخ.
3. أزرار ذات قيمتين مثل Caps Lock و Insert و Num Lock و ... إلخ.
*طريقة عمل لوحة المفاتيح:
يبين الرسم هذه الميكانيكية:
و بإعادة برمجة الجزء BOIS int 9H و الجزء BOIS int 16H يمكننا التحكم في الأحداث Events:
OnKeyPress
OnKeyDown
OnKeyUp
و هذه الأحداث Events موجوده في أغلب لغات البرمجة المرئية مثل الفجول بيسك و الفجول سي++ و دلفي و سي# و ... إلخ.
كما لا يفوتنا أن التفرقة بواسطة الـ Scan Code بين الضغط على الزر و الرفع منه هو البت الأخير فعند الضغط يكون صفر و عند الرفع
يكون واحد، كما هو مبين بالرسم:
*توزيع الحروف على لوحة المفاتيح:
كان هناك إختلاف كبير حول توزيع الحروف العربية على لوحة المفاتيح حتى جاءت شركة مايكروسوفت Microsoft و وحدتها
نسبياً، و هنا تجدر الإشارة إلى أن توحيد الشفرات أهم بكثير من توحيد لوحة المفاتيح.
و ظهرت مشلكة الحرف 'لا' هل يوضع له كود خاص به أو أن لوحة المفاتيح سترسل 'ا' ثم 'ل' ؟
- كيفية تعريب لوحة المفاتيح:
يتم تعريب لوحة المفاتيح بإعادة برمجة الـ Int 9H بحيث يعيد ربط الـ Scan Code بالحرف أو الـ (ASCII) اللذي نريد بعد التأكد
من أن الوضع هو الوضع العربي، و يتم ذلك بالتحقق من الـ Status Buffer .
ولكن في هذا الوقت ظهرت اللغات المرئية و وجدت API's لتسهل هذه العملية و لكن لتعطي تحكم أقل في برمجتها.
API : Application Programming Interface
3. تعريب الشاشة:
حديثنا في هذا الموضوع هو عن شاشات الـ CRT و ليست شاشات الـ LCD فشاشات الـ LCD لها تقنية خاصة بها.
أنواع الأوضاع في الشاشات:
1. الوضعية النصية Text Mode، و كل حرف له قالب معين و هذا من شأنه أن يجعل له حجم ثابت إما 8×8 أو 8×16.
و بالنظر أن السطر في الشاشة يحمل 80 خانة و الشاشة تحمل 25 سطر فإن 80×25 = 2000 حرف في الشاشة الواحدة.
- العلاقة بين الشاشة و الذاكرة:
يوجد للشاشة ذاكرة و كل ما يكتب على هذه الذاكرة فهو يكتب فوراً على الشاشة، و كل حرف يأخذ بايتين الأول منها يخزن
فيه الحرف نفسة و البايت الآخر تخزن فيه الخصائص Attributes مثل لون الحرف و ... إلخ.
إذاً الشاشة تحمل 2000 حرف و الذاكرة تخزن كل حرف في بايتين إذاً لابد على الأقل أن تكون مساحة ذاكرة الشاشة
4000 بايت على الأقل.
- مشاكل تعريب الشاشة:
1. مشكلة الإتجاة، حيث أن اللغة العربية تكتب من اليمين إلى اليسار.
2. إعتماد الحروف العربية على موقعها من المقطع للتتشكل بالشكل المناسب.
- يوجد عدة حلول لمشكلة الإتجاة و هي:
1. الكتابة في الذاكرة المقابلة للعرض من اليمين إلى اليسار و لذلك لابد من معرفة عناوين الذاكرة و هي مبينة
في الرسم التالي:
ومبين في الرسم معادلة الوصول إلى أول عنوان في السطر n .
- الخوارزم المبسط التالي كتبه الدكتور محمد الأفندي عضو تدريس سابق في جامعة الملك سعود.
int line = 0, col = 79;
unsigned char far *vmem = 0xB800000;
unsigned char far *pos;
pos = vmem + ( 160 * line ) + 2 * col; // الركن العلوي الأيمن
while( (ACode = Read_Arabic_Code()) != EKey ) // EKey = English Key.
{
*pos = ACode;
*(pos+1) = 0x07; // Attribute
col--;
if( col < 0 ) { line++; col = 79; }
pos = vmem + ( 160*line ) + 2*col;
}
و الكود أطول من ذلك و لكن كما قلت هذا الخوارزم المبسط.
- الطريقة الأخرى لتعريب الشاشة:
الطريقة الأخرى لتعريب الشاشة إستفادت من ميزة أن حجم ذاكرة الشاشة أكبر من حجم محتويات الشاشة، ففي
السابق كان حجم ذاكرة الشاشة من 64-512 كيلوبايت بينما حجم محتويات الشاشة 4000 بايت.
هذه الطريقة تستخدم الـ Int 8H و هو الـ Interrupt الخاص بالـ Timer و الذي يعمل عشرات المرات في الثانية.
و طريقة عمل هذا الخوازرم هو كالآتي:
1.التهيئة ( عند تشغيل برنامج التعريب ).
- يقوم بقراءة محتويات ذاكرة العرض الحقيقة و نسخ صورة منها في الـ RAM .
- إجراء عمليات التعريب على الشاشة و تخزينها في ذاكرة العرض الإفتراضية.
عمل Loop للـ int 8H
{
- مقارنة محتويات ذاكرة العرض الحقيقية و نسخ صورة منها في الـ RAM .
إذا لم تتساويا إحفظ من الذاكرة الحقيقة إلى الصورة.
عرب الصورة.
}
و لكن ماذا نعني بكلمة "عرب الصورة" ؟
الجواب هو: برنامج يقوم بحصر الحروف العربية في السطر ثم يقلبها في ذاكرة العرض الإفتراضية.
و مثال ذلك كما في الرسم:
هنا أدخلنا كلمة yes و لكن لن يقوم برنامج التعريب بقلب الكلمة لأنها ليست باللغة العربية.
هنا أدخلنا الحرف 'س' و لكن البرنامج سيقلبها مع نفسها عندئذ لن يحدث شيئ.
الآن سيقارن محتويات الذاكرة الحقيقة مع الإفتراضية و سيقلب الحرفين 'س' و 'ع' بتصبح 'س ع' بدلاً من 'ع س'
و سيقارن محتويات الذاكرة الحقيقة مع الإقتراضية و سيقلب الحروف العربية في الذاكرة الحقيقة بتصبح
'س ع د' بدلاً من 'د ع س' و بهذا واضح أننا تغلبنا على مشكلة الإتجاة في اللغة العربية.
2. الوضعية الرسومية Graphics Mode ، و هو النوع الآخر من الوضعيات و هنا أصبح التعامل على مستوى البكسل Pixel .
من الطبيعي أن الوضعية النصية أسرع من الرسومية و لكن مع تطور المعالجات و تقدمها فإن الفرق أصبح صغير.
- مشاكل أخرى في التعريب:
1.حرفان في خانة واحده في الشاشة مثلاً 'لـا' تقلب إلى 'لا' .
2. حرف في خانتين مثلاً السين و الصاد.
ولهذه المشكلة العديد من الحلول منها تصغير الصاد ليصبح شكلاً صغير جداً مقارنه الحروف الأخرى أو جعلها في خانتين.
3. مشكلة الضبط بالشكل: بحيث يقع فوق الحرف و لا يشوه شكل الحرف نفسة، فمثلاً الفتحة لابد أن تكون فوق
أطول حرف هجائي.
4. ثنائية اللغة و عند كتابة عربية إنجليزي في نفس السطر.
4. تعريب الطابعة:
المشكلة في تعريب الطابعات في أنها غير موحده في طريقة الآداء الوظيفي مثل لوحة المفاتيح و الشاشة بدليل وجود
تعريف خاص لكل طابعة.
للتحكم في الطابعة نستخدم وحده المقاطعة int 17H .
كانوا في السابق يضطرون إلى التغيير من وضع نصي إلى رسومي لطباعة النص العربية.
و لبرمجة الطابعات تستخدم لغة البرمجة: -PCL -Printer Control Language ، و كذلك لغة البرمجة -PJL -Printer Job Language .
5. تعريب الأوامر:
أول محاولة لتعريب أوامر نظام يونكس Unix هو مشروع تخرج الدكتور عبدالملك السلمان و الدكتور عبدالقادر الفنتوخ، و هو
تعريب لنظام أوامر و رسائل يونكس.
فمثلاً بدلاً من الأمر cd أي Change Directory يكتب 'غير' أي غير مجلد.
ساحة النقاش