कंट्रोल लैंग्वेज

नियंत्रण भाषा (सीएल) मूल रूप से आईबीएम द्वारा 38 प्रणाली की नियंत्रण फंक्शन सुविधा के लिए बनाई गई स्क्रिप्टिंग भाषा है और बाद में ओएस (OS)/400 (जिसे अब IBM i के नाम से जाना जाता है) में उपयोग किया जाता था। यह आईबीएम नियंत्रण भाषा से मिलता जुलता है और इसमें कमांड ऑब्जेक्ट्स (*CMD) का सेट होता है, जिसका उपयोग पारंपरिक फंक्शन्स को प्रारंभ करने या उन फंक्शन्स के बारे में सहायता प्राप्त करने के लिए उपयोग किया जाता है। सीएल का उपयोग सीएल प्रोग्राम ( अनावरण स्क्रिप्ट के अनुरूप) बनाने के लिए भी किया जाता है जहां इसके अतिरिक्त कमांड्स को उपयोग में लाया जाता हैं जो प्रोग्राम जैसी कार्यक्षमता (आईएफ/ईएलएसई, घोषणा (कंप्यूटर विज्ञान), फ़ाइल इनपुट इत्यादि) प्रदान करती हैं।

चूंकि CL प्रणाली प्रशासन के लिए स्क्रिप्टिंग भाषा है, इसका उपयोग मुख्य रूप से संकलित प्रोग्राम बनाने के लिए किया जाता है। SBMDBJOB कमांड के माध्यम से व्याख्या की गई CL स्क्रिप्ट का उपयोग वास्तव में अत्यंत सीमित है।

जबकि आईबीएम डेवलपर्स द्वारा प्रोग्रामों को संकलित करने, डेटा का बैकअप लेने के उद्देश्य से इस प्रणाली को कॉन्फ़िगरेशन परिर्वतित करने तथा प्रणाली के ऑब्जेक्ट विवरण को प्रदर्शित करने या उन्हें हटाने जैसे प्रणाली स्तर के कार्यों को करने के लिए हजारों कमांड्स लिखे गए थे, कमांड्स प्रणाली स्तर की चिंताओं तक सीमित नहीं हैं, इसे उपयोगकर्ताओं के अनुप्रयोगों के लिए तैयार किया जाता हैं।

कमांड और प्रोग्राम
पैरामीटर (कंप्यूटर विज्ञान) (कमांड-लाइन लाजिक) सभी पारंपरिक प्रणाली/38 और एएस/400 फंक्शन्स की मुख्य प्रक्रियाओं में परिभाषित हार्ड कोडित सूचियां हैं जो पैरामीटर से बनी होती हैं जो संख्यात्मक, अल्फान्यूमेरिक, बूलियन इत्यादि प्रकार के हो सकते हैं और जिसे क्रम में रखने पर पैरामीटर पारित किया जाता हैं जो विशेषतः महत्वपूर्ण है। यह यूनिक्स और डॉस क्षेत्र से बड़े अंतर में भिन्न हैं जहां यूनिक्स शैल स्क्रिप्ट और सी (प्रोग्रामिंग भाषा) में पैरामीटर सूची वर्ण पॉइंटर्स का सेट या सरणी है और अधिकतर पैरामीटर स्थितित्मक रूप से इस पर निर्भर नहीं करते हैं।

इस समस्या का समाधान डेवलपर द्वारा कमांड ऑब्जेक्ट (* सीएमडी) के द्वारा प्राप्त करना प्रमुख उद्देश्य था। जबकि कमांड्स पर पैरामीटर किसी भी क्रम में निर्दिष्ट किए जा सकते हैं, प्रत्येक पैरामीटर को प्रोग्राम के विशिष्ट क्रम में पारित करने के लिए परिभाषित किया गया है। प्रोग्रामर अन्य बातों के अतिरिक्त, पैरामीटर के डेटा प्रकार, अद्वितीय पैरामीटर नाम, वर्णनात्मक पाठ (संकेत देने के लिए), डिफ़ॉल्ट मान (केवल निष्पादन के समय पैरामीटर निर्दिष्ट नहीं होने पर उपयोग किया जाता है) को भी परिभाषित कर सकता है, यदि मान निश्चित सीमा तक सीमित रहता हैं जैसे सेट या रेंज, तो इस स्थिति में प्रोग्राम को कॉल करने से पहले दर्ज किए गए डेटा को दूसरे मान में परिवर्तन किया जाना आवश्यक होता हैं।

जब उपयोगकर्ता कोई कमांड टाइप करता है या कोई संकेत देता है और इसके बाद एंटर कुंजी दबाता है, तो इसकी सबसे मौलिक कमांड कॉल करने के लिए एकल प्रोग्राम का नाम दे दिया जाता है। कमांड उपयोगकर्ता द्वारा टाइप किए गए सभी पैरामीटर लेता है, और जो उपयोगकर्ता द्वारा टाइप नहीं किया जाता है, और पैरामीटर सूची बनाता है जो प्रोग्राम को कॉल करने पर पास करता है।

सिंटेक्स
अधिक सरलीकृत सीएल कमांड सिंटैक्स के लिए बैकुस-नौर फॉर्म को निम्नानुसार परिभाषित किया जाएगा:

 ::= command-name [] []

 ::=  []

 ::= parameter-name "("  ")" []

 ::=  []

 ::= CL-name |

qualified-CL-name |

"*"special-value |

generic-CL-name"*" |

"'"alphanumeric-value"'" |

numeric-value |

"X'"hexadecimal-value"'"

इसके नाम से समाप्त होने वाले आइटम ऑब्जेक्ट (आईबीएम i) के नामकरण इसकी मुख्य अवधारणाओं का पालन करती हैं, जो सामान्यतः अनुसरण किया जाना आवश्यक होता हैं, जिसका अर्थ है कि इस नाम के अक्षर से प्रारंभ होने वाले और लंबाई में दस वर्णों तक इसे उपयोग में लाया जा सकता है। (सीएल कमांड्स भी केस-संवेदी भाषा हैं।)

विशिष्ट सीएल कमांड का अच्छा उदाहरण नीचे दिया गया 'चेंज प्रोग्राम' (सीएचजीपीजीएम) कमांड है:

CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('My program.')

उपरोक्त कमांड प्रोग्राम को चार पैरामीटर पास कर रहा है जो प्रोग्राम प्रोसेसिंग को परिवर्तित करता है और वे कुछ इस प्रकार हैं:


 * MYPGM: स्थितीय पैरामीटर (PGM), और केवल आवश्यक पैरामीटर। इस स्थिति में यह बदला जा रहा कार्यक्रम का नाम है। स्थितीय पैरामीटर सदैव पहले होते हैं। इस प्रकार नामित पैरामीटर के प्रकट होने के बाद सभी पैरामीटर जो अनुसरण करते हैं, उन्हें नामित पैरामीटर होना चाहिए।
 * ऑप्टिमाइज़ (* पूर्ण): नामित पैरामीटर जो तत्व को निर्दिष्ट करता है जो विशेष मान निर्धारित करते हैं। इस स्थिति में यह प्रोग्राम को पूर्ण रूप से अनुकूलित करने के लिए परिवर्तित कर दिया जाता हैं।
 * RMVOBS(*BLKORD *PRCORD): कई विशेष मूल्यों को निर्दिष्ट करने वाला नामित पैरामीटर (अवलोकनशीलता हटाएं)। इस स्थिति में इसे प्रोग्राम से दो प्रकार के प्रोफाइलिंग डेटा को हटाने के लिए काल करता हैं।
 * 'MY FUNCTION'): एकल अल्फ़ान्यूमेरिक मान निर्दिष्ट करने वाले अन्य नामित पैरामीटर होते हैं। इस स्थिति में यह कार्यक्रम के वर्णनात्मक पाठ को परिवर्तित करता है।

वास्तव में प्रणाली ऊपर बताए गए चार पैरामीटर से कहीं अधिक पैरामीटर पास करेगा। ऐसा इसलिए है क्योंकि शेष सीएचजीपीजीएम कमांड के पैरामीटर निर्दिष्ट नहीं किए गए थे, इसलिए इसके अतिरिक्त डिफ़ॉल्ट मान पारित किए जाते हैं। इस पर प्रत्येक पैरामीटर के लिए, PGM पैरामीटर को छोड़कर, वह डिफ़ॉल्ट *SAME है, जिसका अर्थ है कि इसे परिवर्तित नहीं किया जाता हैं।

संकेत
कमांड टाइप करके और F4 फ़ंक्शन कुंजी दबाकर सभी सीएल कमांड को सीधे कमांड लाइन से या सीएल प्रोग्राम सोर्स कोड के भीतर संकेत दिया जाता है। कमांड से पहले OS/400 में कमांड को टाइप करके भी संकेत दिया जाता है?

(यह इंटरैक्टिव प्रोग्राम में उपयोगी है जो कमांड स्ट्रिंग को इंगित करता है, पहले से ही कुछ मूल्यों में भरा हुआ है।)

इस प्रणाली को पैरामीटर के सेट के साथ स्क्रीन प्रस्तुत किया जाता हैं जिसे प्रोग्राम आवश्यकता होने पर स्वीकार करता है (आवश्यक पैरामीटर सामान्यतः हाइलाइट किए जाते हैं)।

आवश्यक पैरामीटर पहले सूचीबद्ध हैं, और प्रणाली द्वारा आपूर्ति किए गए डिफ़ॉल्ट मान वाले पैरामीटर सबसे अंत में सूचीबद्ध हैं। सभी पैरामीटर देखने के लिए F10 दबाएं।

यदि किसी विकल्प के लिए और चयन की आवश्यकता होती है, तो वे संकेतित होते हैं जब आप उस पैरामीटर के लिए उस मान का चयन करते हैं, जो ऑनस्क्रीन प्रदर्शित होता है।

प्रोग्रामर को यह पता लगाने की अनुमति देने के लिए कि प्रत्येक पैरामीटर के लिए कौन से मान मान्य हैं, प्रोम्पटिंग को और बढ़ाया गया है। संकेत देने के समय ऐसा करने के लिए उपयोगकर्ता कर्सर को संबंधित पैरामीटर फ़ील्ड में ले जाएगा और फिर से F4 दबाया जाएगा। प्रणाली तब आवश्यक इनपुट के प्रकार और स्वीकार्य मूल्यों की उपलब्ध सूची का वर्णन करते हुए स्क्रीन प्रदर्शित करेगा।

एक लंबा नाम दर्ज करने के लिए, या आपको अतिरिक्त मान दर्ज करने की अनुमति देने के लिए सूची का विस्तार करने के लिए, मान के अतिरिक्त धन चिह्न टाइप करें। (जैसा कि सहेजे या पुनर्स्थापित किए जाने वाले ऑब्जेक्ट के नामों को सूचीबद्ध करते समय।)

कमांड हेल्प
कमांड्स पर कर्सर सेंसिटिव हेल्प भी दी जा सकती है लेकिन इसकी जरूरत नहीं है। यदि सहायता प्रदान की गई है, तो कर्सर को वांछित पैरामीटर फ़ील्ड में ले जाकर और F1 (सहायता) दबाकर पैरामीटर के लिए सहायता देख सकते हैं। संपूर्ण कमांड (और इसके सभी पैरामीटर) के लिए सहायता प्राप्त करने के लिए उपयोगकर्ता प्रांप्ट डिस्प्ले पर कहीं भी F1 दबाएंगे और फिर F2 (विस्तारित सहायता) दबाएंगे।

नए कमांड्स बनाना
गैर-प्रणाली प्रोग्राम को कॉल करने के लिए नए कमांड बनाए जा सकते हैं और वे बिल्कुल इनबिल्ट वैरायटी की तरह कार्य करेंगे। कमांड परिभाषा भाषा सीएल प्रोग्रामर गाइड में वर्णित है।

नए कमांड और उनके पैरामीटर के लिए सहायता स्क्रीन बनाना अच्छा विचार है। सभी सहायता स्क्रीन पैनल ग्रुप ऑब्जेक्ट्स (*PNLGRP) का उपयोग करती हैं और इन्हें IBM AS/ में वर्णित UIM भाषा का उपयोग करके बनाया जा सकता है। 400 एप्लिकेशन डिस्प्ले प्रोग्रामिंग मैनुअल।

ऑपरेटिंग प्रणाली के V5R3 की प्रारंभ में सहायता बनाने का नया, अधिक सरल तरीका जोड़ा गया: कमांड चलाएँ GENCMDDOC CMD (MYLIB/MyCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM) कमांड द्वारा वर्णित सभी मापदंडों सहित कंकाल UIM पैनल समूह स्वचालित रूप से उत्पन्न हो जाएगा। परिणाम फ़ाइल को संपादित किया जा सकता है (एसईयू, डब्लूडीएससी, आरडीआई), फिर सीआरटीपीएनएलजीआरपी कमांड के साथ संकलित किया गया है, और अंत में सीएचजीसीएमडी एचएलपीपीएनएलजीआरपी के माध्यम से कमांड से जुड़ा हुआ है।

सही कमांड्स ढूँढना
V7R3 में 2,262 बिल्ट-इन IBM कमांड हैं, लेकिन प्रणाली के कई डिज़ाइनों के कारण उन्हें ढूंढना इतना कठिन नहीं है जो जीवन को सरल बनाते हैं। श्रम बचाने वाले ये डिज़ाइन हैं: मानकीकृत संकेताक्षर, कमांड समूहीकरण मेनू, और कमांड चयन।

मानकीकृत संक्षिप्त रूप
आईबीएम डेवलपर्स ने कमांड नाम बनाने के लिए उपयोग किए गए संक्षेपों को मानकीकृत किया। परिवर्तन जैसी क्रियाओं को सदैव CHG के रूप में प्रदर्शित किया जाता है, DSP के रूप में प्रदर्शित किया जाता है, WRK के रूप में कार्य किया जाता है, CRT के रूप में बनाया जाता है, आदि। प्रोग्राम जैसे विषय सदैव PGM होते हैं, उपयोगकर्ता USR होता है, मॉड्यूल MOD होता है, सर्वर SVR होता है, आदि। और 'VERB' और 'SUBJECT' मेन्यू में प्रणाली पर उपयोग होने वाले सब्जेक्ट, बस GO VERB या GO SUBJECT कमांड दर्ज करें।

इसी तरह, नियंत्रण भाषा प्रोग्रामिंग संक्षिप्त रूप से सीएलपी था, और स्रोत प्रकार तदनुसार सीएलपी था। ILE प्रोग्रामिंग मॉडल की प्रारंभ के साथ, स्रोत प्रकार को CLLE में परिवर्तित कर दिया गया।

कमांड ग्रुपिंग मेन्यू
वर्ब और सब्जेक्ट मेन्यू कमांड ग्रुपिंग मेन्यू का हिस्सा हैं। प्रत्येक तीन (या चार) अक्षर संक्षिप्त नाम के लिए मेनू समर्पित है जो सीएमडी अक्षरों से प्रारंभ होता है। इसलिए सभी CHG कमांड देखने के लिए उपयोगकर्ता GO CMDCHG कमांड को निष्पादित करेगा। प्रोग्राम कमांड के लिए मेन्यू सीएमडीपीजीएम होगा।

कमांड ग्रुपिंग मेन्यू के अतिरिक्त अन्य मेन्यू भी हैं। खाली AS/400 कमांड लाइन पर F4 दबाकर मेन्यूइंग प्रणाली के प्रारंभी बिंदु तक पहुँचा जा सकता है।

कमांड चयन
यदि कोई केवल कमांड का हिस्सा जानता है या यदि तीसरे पक्ष के सॉफ़्टवेयर का उपयोग किया जा रहा है जहां कमांड एएस/400 संक्षिप्त नाम मानक के अनुरूप नहीं हैं तो आप कमांड के उस हिस्से को दर्ज करेंगे जो ज्ञात है, तारांकन चिह्न संलग्न करें (इसे बनाने के लिए) सामान्य), और एंटर दबाएं। इसके बाद प्रणाली जॉब के ऑब्जेक्ट (IBM i)#Library List में कमांड की सूची प्रदर्शित करेगा जो अभी-अभी टाइप किए गए सामान्य नामों से मेल खाता है। इसके बाद कोई भी आवश्यक कमांड्स की तलाश में सूची के माध्यम से पेज कर सकता है और फिर विकल्प 1 का उपयोग करके इसे चुन सकता है।

पृष्ठभूमि में प्रणाली इस कार्य को करने के लिए SLTCMD कमांड का उपयोग कर रहा है। यदि कोई ऑब्जेक्ट (IBM i) में सभी कमांड का चयन करना चाहता है तो इस कमांड को प्रांप्ट करें और विशेष मान *ALL दर्ज करें।

नमूना कोड
निम्नलिखित सीएल प्रोग्रामिंग का नमूना है। कार्यक्रम अंतःक्रियात्मक रूप से जूलियन से एमडीवाई और इसके विपरीत तारीखों को परिवर्तित करता है। परिणाम टर्मिनल की लाइन 24 पर प्रदर्शित होते हैं। यह दो मापदंडों को स्वीकार करता है।  e> पैरामीटर जो कनवर्ट की जाने वाली दिनांक स्ट्रिंग है। यदि जूलियन स्ट्रिंग यह YYNNN प्रारूप में होनी चाहिए जहां YY वर्ष संख्या है और NNN वर्ष की दिन संख्या है। यदि कोई MDY स्ट्रिंग MMDDYY प्रारूप में होनी चाहिए। दूसरा पैरामीटर है   किस प्रकार की तिथि को परिवर्तित किया जाना है। यह 'J' (जूलियन) या 'M' (एमडीवाई) होना चाहिए। उदाहरण के लिए: आज्ञा   जूलियन दिनांक 04180 को 062804 (28 जून, 2004) में परिवर्तित कर देगा। PGM (&IN &TYP) DCL &IN *CHAR 6 DCL &OUT *CHAR 8 DCL &TYP *CHAR 1 IF (&TYP = J) + DO         CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*MDY) + TOFMT(*JUL) TOSEP(*NONE) ENDDO ELSE IF (&TYP = M) + DO         CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*JUL) + TOFMT(*MDY) TOSEP(*NONE) ENDDO SNDPGMMSG MSG('IN=' || &IN || ' OUT=' || &OUT) + MSGTYPE(*COMP)

ENDPGM

यह भी देखें

 * क्यूशेल
 * रेक्स