لغة التحكم

لغة التحكم ( CL ) هي لغة برمجة نصية طورتها شركة IBM في الأصل لمرفق برنامج التحكم System /38 [ 1 ] ، واستُخدمت لاحقًا في نظام التشغيل OS/400 (المعروف الآن باسم IBM i). وهي تشبه لغة التحكم في المهام من IBM ، وتتألف من مجموعة من كائنات الأوامر (*CMD) تُستخدم لتشغيل البرامج التقليدية أو للحصول على معلومات حول وظائفها. كما يمكن استخدام CL لإنشاء برامج CL (المماثلة لبرامج shell النصية ) التي تتضمن أوامر إضافية توفر وظائف شبيهة بالبرامج (مثل IF/ELSE، وتعريف المتغيرات ، وإدخال الملفات، وما إلى ذلك).

على الرغم من أن لغة CL هي لغة برمجة نصية لإدارة الأنظمة، إلا أنها تُستخدم بشكل أساسي لإنشاء برامج مُجمّعة. في الواقع، يُعد استخدام نصوص CL المُفسّرة عبر الأمر SBMDBJOB [ 2 ] محدودًا للغاية.

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

الأوامر والبرامج

تُعرَّف المعاملات ( وسائط سطر الأوامر ) في الإجراءات الرئيسية لجميع برامج System/38 وAS/400 التقليدية على أنها قوائم مُبرمجة مسبقًا، تتكون من معاملات قد تكون رقمية أو أبجدية رقمية أو منطقية، وما إلى ذلك، ويُعدّ ترتيب تمرير هذه المعاملات أمرًا بالغ الأهمية. وهذا يختلف اختلافًا جذريًا عن بيئتي Unix و DOS ، حيث تكون قائمة المعاملات في نصوص Unix البرمجية وبرامج C عبارة عن مجموعة أو مصفوفة من مؤشرات الأحرف، وغالبًا ما تكون المعاملات غير مرتبطة بموقعها.

كان حل المطور لهذه المشكلة هو كائن الأمر (*CMD). مع أن معلمات الأمر يمكن تحديدها بأي ترتيب، إلا أن كل معلمة تُمرر إلى البرنامج بترتيب محدد. كما يمكن للمبرمج تحديد، من بين أمور أخرى، نوع بيانات المعلمة ، واسمها الفريد، ونصها الوصفي (للتنبيه)، وقيمتها الافتراضية (التي تُستخدم فقط إذا لم تُحدد المعلمة أثناء التنفيذ)، وما إذا كانت القيم محصورة في مجموعة أو نطاق معين، وما إذا كان ينبغي تغيير البيانات المُدخلة إلى قيمة أخرى قبل استدعاء البرنامج، وما إلى ذلك.

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

بناء الجملة

سيتم تعريف صيغة BNF لبنية أوامر CL المبسطة للغاية على النحو التالي:

< أمر CL > ::= اسم الأمر [ < قائمة المعلمات الموضعية > ] [ < قائمة المعلمات المسماة > ] < قائمة المعلمات الموضعية > ::= < قيمة المعلمة > [ < قائمة المعلمات الموضعية > ] < قائمة المعلمات المسماة > ::= اسم المعلمة "(" < قائمة عناصر المعلمات > ")" [ < قائمة المعلمات المسماة > ] < قائمة عناصر المعلمات > ::= < قيمة المعلمة > [ < قائمة عناصر المعلمات > ] < قيمة المعامل > ::= اسم CL | اسم الفئة المؤهلة | "*"قيمة خاصة | generic-CL-name"*" | "'"قيمة أبجدية رقمية"'" | القيمة العددية | "X""قيمة سداسية عشرية""" 

العناصر المذكورة أعلاه والتي تنتهي بـ "-name" تتبع اصطلاحات تسمية الكائنات ، والتي تعني عمومًا أن الاسم يبدأ بحرف ويمكن أن يصل طوله إلى عشرة أحرف. (أوامر CL غير حساسة لحالة الأحرف أيضًا).

يُعد الأمر التالي مثالاً جيداً على أوامر سطر الأوامر النموذجية: أمر تغيير البرنامج (CHGPGM):

CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('برنامجي.')

يقوم الأمر أعلاه بتمرير أربعة معلمات إلى البرنامج الذي يقوم بمعالجة تغيير البرنامج ، وهي كالتالي:

  • MYPGM: مُعامل موضعي (PGM)، وهو المُعامل الوحيد المطلوب. في هذه الحالة، هو اسم البرنامج الذي يتم تغييره. تأتي المُعاملات الموضعية دائمًا في البداية. بمجرد ظهور مُعامل مُسمى، يجب أن تكون جميع المُعاملات التي تليه مُعاملات مُسماة.
  • OPTIMIZE(*FULL): مُعامل مُسمى يُحدد عنصرًا واحدًا بقيمة خاصة. في هذه الحالة، سيُغير البرنامج ليصبح مُحسَّنًا بالكامل.
  • RMVOBS(*BLKORD *PRCORD): مُعامل مُسمى (إزالة قابلية المراقبة) يُحدد قيمًا خاصة متعددة. في هذه الحالة، يُشير إلى إزالة نوعين من بيانات التنميط من البرنامج.
  • TEXT('My program.'): مُعامل مُسمى آخر يُحدد قيمة أبجدية رقمية واحدة. في هذه الحالة، يُغير النص الوصفي للبرنامج.

في الواقع، سيمرّر النظام معلمات أكثر بكثير من المعلمات الأربع المذكورة أعلاه. والسبب هو أن بقية معلمات أمر CHGPGM لم تُحدد، لذا سيتم تمرير القيم الافتراضية بدلاً منها. بالنسبة لكل معلمة في هذا الأمر، باستثناء معلمة PGM، فإن القيمة الافتراضية هي *SAME ، أي لا تُغيرها.

التحفيز

يمكن استدعاء جميع أوامر CL مباشرةً من سطر الأوامر أو من داخل مصدر برنامج CL بكتابة الأمر والضغط على مفتاح الوظيفة F4 . كما يمكن استدعاء أمر OS/400 بكتابة علامة استفهام (  ?) قبل الأمر. (يفيد هذا في البرامج التفاعلية التي تعرض سلسلة أوامر مُسبقًا بعد إدخال بعض القيم).

ثم يعرض النظام شاشة تحتوي على مجموعة المعلمات التي يقبلها/يتطلبها البرنامج (عادة ما يتم تمييز المعلمات المطلوبة).

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

تم تحسين خاصية التوجيه لتمكين المبرمج من معرفة القيم الصالحة لكل مُعامل. وللقيام بذلك أثناء التوجيه، يُحرك المستخدم المؤشر إلى حقل المُعامل المطلوب ويضغط على F4 مرة أخرى. عندها يعرض النظام شاشة توضح نوع الإدخال المطلوب وقائمة بالقيم المسموح بها.

لإدخال اسم أطول، أو لتوسيع القائمة للسماح لك بإدخال قيم إضافية، اكتب علامة زائد بدلاً من القيمة. (كما هو الحال عند سرد أسماء العناصر المراد حفظها أو استعادتها).

مساعدة الأوامر

يمكن أيضًا توفير مساعدة حساسة للمؤشر للأوامر، ولكنها ليست إلزامية. إذا توفرت مساعدة، يمكنك عرض مساعدة لمعامل معين بتحريك المؤشر إلى حقل المعامل المطلوب والضغط على F1 (مساعدة). للحصول على مساعدة للأمر بأكمله (وجميع معاملاته)، يضغط المستخدم على F1 في أي مكان على شاشة العرض، ثم يضغط على F2 (مساعدة موسعة).

إنشاء أوامر جديدة

يمكن إنشاء أوامر جديدة لاستدعاء برامج غير تابعة للنظام، وستعمل هذه الأوامر تمامًا مثل الأوامر المدمجة. يُشرح دليل مبرمج لغة تعريف الأوامر ( CL) في دليل المبرمج .

من المستحسن إنشاء شاشات مساعدة للأوامر الجديدة ومعاملاتها. تستخدم جميع شاشات المساعدة كائنات مجموعة اللوحات (*PNLGRP)، ويمكن إنشاء هذه الكائنات باستخدام لغة UIM الموضحة في دليل برمجة عرض تطبيقات IBM AS/400 .

ابتداءً من الإصدار V5R3 من نظام التشغيل، تمت إضافة طريقة جديدة وأبسط بكثير لإنشاء ملفات المساعدة: تشغيل الأمر

GENCMDDOC CMD(MYLIB/MYCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM)

سيتم إنشاء مجموعة لوحة UIM هيكلية تلقائيًا تتضمن جميع المعلمات الموضحة في الأمر. يمكن تعديل ملف النتائج (seu، wdsc، rdi)، ثم تجميعه باستخدام الأمر CRTPNLGRP، وأخيرًا ربطه بالأمر عبر CHGCMD HLPPNLGRP().

إيجاد الأمر الصحيح

يحتوي الإصدار V7R3 من نظام IBM على 2262 أمرًا مدمجًا، [ 3 ] ولكن العثور عليها ليس بالأمر الصعب بفضل العديد من ميزات النظام التي تُسهّل العمل. ومن هذه الميزات الموفرة للجهد: الاختصارات الموحدة، وقوائم تجميع الأوامر، واختيار الأوامر.

الاختصارات الموحدة

قام مطورو IBM بتوحيد الاختصارات المستخدمة لإنشاء أسماء الأوامر. تُكتب الأفعال مثل " تغيير" دائمًا بـ CHG ، و " عرض" بـ DSP ، و "عمل" بـ WRK ، و "إنشاء" بـ CRT ، وهكذا. أما المواضيع مثل "برنامج" فتُكتب دائمًا بـ PGM ، و "مستخدم" بـ USR ، و" وحدة " بـ MOD ، و "خادم" بـ SVR ، وهكذا. يمكنك الاطلاع على جميع الأفعال والمواضيع المستخدمة في النظام من خلال قائمتي "الفعل " و "المواضيع "، وذلك بإدخال الأمر GO VERB أو GO SUBJECT.

وبالمثل، تم اختصار "برمجة لغة التحكم" إلى CLP، وكان نوع المصدر تبعًا لذلك CLP. ومع إدخال نموذج برمجة ILE، تم تغيير نوع المصدر إلى "CLLE". [ 4 ]

قوائم تجميع الأوامر

تُعدّ قائمتي الفعل والموضوع جزءًا مما يُسمى قوائم تجميع الأوامر. لكل اختصار من ثلاثة (أو أربعة) أحرف، توجد قائمة مخصصة له تبدأ بالأحرف CMD . لذا، لعرض جميع أوامر CHG ، يُنفّذ المستخدم الأمر GO CMDCHG. أما بالنسبة لأوامر البرامج ، فتكون القائمة CMDPGM.

توجد قوائم أخرى إلى جانب قوائم تجميع الأوامر. ويمكن الوصول إلى نقطة البداية لنظام القوائم بالضغط على F4 في سطر أوامر فارغ .

اختيار الأمر

إذا كنت تعرف جزءًا فقط من الأمر، أو إذا كنت تستخدم برنامجًا تابعًا لجهة خارجية لا تتوافق أوامره مع معيار اختصارات AS/400، فعليك إدخال الجزء المعروف من الأمر، وإضافة علامة النجمة (*) (لجعله عامًا)، ثم الضغط على مفتاح الإدخال. سيعرض النظام بعد ذلك قائمة بالأوامر في مكتبة المهمة التي تتطابق مع الأسماء العامة التي أدخلتها. يمكنك حينها تصفح القائمة بحثًا عن الأمر المطلوب، ثم تحديده باستخدام الخيار 1.

يستخدم النظام في الخلفية الأمر SLTCMD لتنفيذ هذه الوظيفة. إذا أردت تحديد جميع الأوامر في مكتبة ، فاطلب هذا الأمر وأدخل القيمة الخاصة *ALL.

نموذج التعليمات البرمجية

فيما يلي مثال على برمجة CL. يقوم البرنامج بتحويل التواريخ بشكل تفاعلي من نظام جوليان إلى نظام MDY والعكس. تُعرض النتائج في السطر 24 من نافذة الأوامر. يقبل البرنامج مُعاملين: الأول &INهو سلسلة التاريخ المراد تحويلها. إذا كانت سلسلة جوليان، فيجب أن تكون بالصيغة YYNNN، حيث YY هو رقم السنة وNNN هو رقم اليوم. أما إذا كانت سلسلة MDY، فيجب أن تكون بالصيغة MMDDYY. المُعامل الثاني هو &TYPنوع التاريخ المراد التحويل إليه، ويجب أن يكون 'J' (جوليان) أو 'M' (MDY). على سبيل المثال: CALL PGM(ICVTDATC) PARM('04180' 'M')سيُحوّل الأمر التاريخ الجولياني 04180 إلى 062804 (28 يونيو 2004).

PGM (&IN &TYP) DCL &IN *CHAR 6 DCL &OUT *CHAR 8 DCL &TYP *CHAR 1 إذا كان (&TYP = J) + يفعل CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*MDY) + TOFMT(*JUL) TOSEP(*NONE) إندو وإلا إذا كان (&TYP = M) + يفعل CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*JUL) + TOFMT(*MDY) TOSEP(*NONE) إندو SNDPGMMSG MSG('IN=' || &IN || ' OUT=' || &OUT) + MSGTYPE(*COMP) ENDPGM 

انظر أيضاً

مراجع

  1. "دليل مرجعي للغة التحكم في نظام IBM System/38" (ملف PDF) . شركة IBM. 10-09-1982 . تاريخ الاسترجاع: 24-03-2021 .
  2. itjungle.com
  3. IBM.com
  4. مايرز، برايان (1997). برمجة لغة التحكم لنظام AS/400 ( الطبعة الثانية). دار نشر شارع 29. رقم ISBN  9781882419760.