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

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

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

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

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

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

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

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

इसके नाम से समाप्त होने वाले आइटम ऑब्जेक्ट (आईबीएम 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) लाइब्रेरी सूची में कमांड की सूची प्रदर्शित करेगा जो अभी-अभी टाइप किए गए सामान्य नामों से मेल खाता है। इसके बाद कोई भी आवश्यक कमांड्स की तलाश में सूची के माध्यम से पेज कर सकता है और फिर विकल्प 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

यह भी देखें

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