تعريب الأنظمة

Spread the love

تعريب الأنظمة

(بواسطة : طلال السبيعي | بتاريخ : 28 يوليو 2004 )

بسم الله الرحمن الرحيم

 

تكلمنا في درسنا السابق عن المبحث الثاني و هو تعريب المصطلحات بشكل عام و في هذا الدرس سوف نتطرق إلى المبحث الثالث وهو:

المبحث الثالث ( تعريب الأنظمة ) :

    المقصود بتعريب الأنظمة هو جعل نظام التشغيل يقبل الحروف العربية كمدخلات و مخرجات و هذا هو الأساس لبقية قضايا التعريب.

    * الشفرة (الترميز) العربية:

        تمثل الحروف العربية داخل الجهاز عن طريق ( 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

                            ولهذه المشكلة العديد من الحلول منها تصغير الصاد ليصبح شكلاً صغير جداً مقارنه الحروف الأخرى أو جعلها في خانتين.

                        3. مشكلة الضبط بالشكل: بحيث يقع فوق الحرف و لا يشوه شكل الحرف نفسة، فمثلاً الفتحة لابد أن تكون فوق

                            أطول حرف هجائي.

                        4. ثنائية اللغة و عند كتابة عربية إنجليزي في نفس السطر.

            4. تعريب الطابعة:

                المشكلة في تعريب الطابعات في أنها غير موحده في طريقة الآداء الوظيفي مثل لوحة المفاتيح و الشاشة بدليل وجود

                تعريف خاص لكل طابعة.

                للتحكم في الطابعة نستخدم وحده المقاطعة int 17H .

                كانوا في السابق يضطرون إلى التغيير من وضع نصي إلى رسومي لطباعة النص العربية.

                و لبرمجة الطابعات تستخدم لغة البرمجة: -PCL -Printer Control Language ، و كذلك لغة البرمجة PJLPrinter Job Language  .

           5. تعريب الأوامر:

                أول محاولة لتعريب أوامر نظام يونكس Unix هو مشروع تخرج الدكتور عبدالملك السلمان و الدكتور عبدالقادر الفنتوخ، و هو

                تعريب لنظام أوامر و رسائل يونكس.

                فمثلاً بدلاً من الأمر cd أي Change Directory يكتب غير أي غير مجلد.

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة