آر بي جي RPG هي لغة برمجة عالية المستوى للتطبيقات الخاصة بالأعمال. الأحرف الأولى التي تصف اسم البرنامج ترمز إلى المعنى " مولد برنامج التقرير". وشركة IBM هي صانعة البرنامج والبائع الرئيسي له، ولكن اللغة متاحة أيضا من مصنعي أجهزة كمبيوتر رئيسية أخرى وأجهزة الكمبيوتر الضخمة ومنهم يونيسيس Unisys. النسخة الأخيرة من آر بي جي هي آر بي جي 4 RPG IV (وتعرف ب ILE RPG) وهي على خوادم باور آي الخاصة بIBM، وهي ترث النظام آي من سمات بيئة اللغة المتكاملة مثل وظائف النماذج الأصلية وإجراءاتها والروابط الديناميكية والثابتة والوصول إلى مكتبات لغة سي الروتينية، ومكاتب الرابط الديناميكي والشفرة الوحدوية المتكررة أو المعاد إدخالها.
نظرة عامة
تعرف لغة آر بي جي (التي تعرف أيضا باسم آر بي جي فور وRPGLE) بأنها لغة برمجة مألوفة لمنصة IBM Power i. وقد صنعت خصيصا كأداة لكتابة التقارير لIBM401 في بداية الستينات، وقد تطورت آر بي جي منذ هذا الوقت إلى لغة HLL مكافئة هي كوبول وبي إل آي
يبدأ برنامج آر بي جي بخصائص الملف، وعمل قائمة بكل الملفات ليتم كتابتها أو قراءتها من أو تحديثها، يلي ذلك مواصفات التعرف على البيانات والتي تتضمن عناصر البرنامج مثل هياكل البيانات والمصفوفات
ذات الأبعاد كما لو كانت قسم "تخزين العمل" من برنامج كوبول أو بيانات فار في برنامج باسكال
. يتبع ذلك مواصفات حسابية تحتوي على أصل الشفرة الفعلي. يمكن ا، يتبع ذلك مواصفات النواتج التي يمكن استخدامها لتحديد نموذج الملفات أو التقارير الأخرى. عبر الملفات البديلة، يمكن لبعض التقارير وهياكل البيانات أن يتم تحديدها خارجيا، وتقريبا عبر إزالة الحاجة لتسليم مواصفات مدخل الشفرة وناتجها.
في الأيام الأولى من آر بي جي، كانت تعرف نقطة قوتها الحقيقية بدورة البرنامج: يقوم كل برنامج آر بي جي بالعمل عبر حلقة ضمنية يمكن من خلالها تطبيق البرنامج على كل سجل من سجلات الملف. في هذا الوقت، يمكن مقارنة كل سجل (بطاقة مثقوبة فردية) مع كل سطر في البرنامج والذي سيقوم بالعمل على السجل أو لا وذلك اعتمادا على ما إذا كان هذا السطر ذو "مؤشر" يكون "عاملا" أو "غير فعالا" – من بين مجموعة من المتغيرات المنطقية مرقمة بالأعداد من 01-99 لأغراض يحددها المستخدم، أو مجموعات أخرى أصغر وذلك اعتمادا على التدوين، المجال أو وظائف معالجة التقارير.
وبديلا لذلك فإن الشفرة يمكن أن تجعل أي برنامج تفاعلي مستمر في العمل حتى يتوقف بوضوح.
واليوم يتجنب معظم مبرمجي آر بي جي استخدام هذه الدورة لصالح التحكم في فيض تدفق البرنامج بهياكل حلقية قياسية. إن مفهوم انكسارات المستوى وسجلات التطابق فريد بالنسبة للغة آر بي جي تو. وقد تطور في البداية مع قارئات بطاقات في الذهن. أما آر بي جي ثري فيضيف بعض المقومات الشيقة ولكن لغة آر بي جي الأصلية يصعب هزيمتها على افتراض أن المطور يمتلك كافة المقومات والسمات المتاحة.
التاريخ
تعد لغة آر بي جي واحدة من اللغات التي صنعت من أجل آلات ثقب البطاقات التي لا تزال شائعة الاستخدام في يومنا الحالي وهذا لأن اللغة قد تطورت بصورة ملحوظة مع مرور الوقت. وقد طورتها شركة IBM عام 1959. وق كان مسمى "مولد برنامج التقرير" مسمى وصفي لغرض اللغة : وهو توليد تقارير من ملفات البيانات بما في ذلك تقارير السجلات والتقارير الإجمالية الفرعية.
وقد كانت لغة فارجو (fourteen o-one Automatic Report Generation Operation أو عملية توليد التقارير 1401 الأوتوماتيكية) هي اللغة السابقة لآر بي جي في IBM 1401. وقد استهدفت كلا اللغتين تسهيل الانتقال إلى جهاز تسجيل الوحدات الآلي المجدول IBM للفنيين إلى أجهزة الكمبيوتر الجديدة.
وقد كان فنيو الأجهزة المجدولة معتادين على أسلاك القابسات إلى لوحات تحكم لتنفيذ عمليات الإدخال والنواتج والتحكم والمواجهة (الإضافة، الخصم، الضرب، القسمة). تم تنفيذ عدة برامج آلات جدولة عبر نبضات تنبعث في دورة الآلة، ومن ثم تضاهي فارجو وآر بي جي فكرة دورة الآلة مع دورة البرنامج. وكانت آر بي جي تفوق الفارجو وسرعان ما تم استبدالها كبرنامج توليد التقارير الاختياري.
وقد كانت اللغات البديلة المتاحة بشكل عام في هذا الوقت هي أسيمبلر وكوبول وفورتران. وكانت لغة الكوبول لغة عملية شبيهة باللغات الطبيعية والفورتران كانت لغة سهلت كافة التطبيقات الرياضية. من اللغات الأخرى في هذا الوقت كانت ألجول وأوتوكودر وبعد عدة سنوات بي إل وان. وقد كانت الللغتين أسيمبلر وكوبول شائعتين في العمليات الخاصة بأجهزة الكمبيوتر الرئيسية (طرازات سيستم 360 30 وأعلى) وتستخدم آر بي جي بشكل شائع من جانب العملاء الذين انتقلوا من أجهزة ومعدات الجدولة (سيستم 360 طراز 20).
نشأة اللغة
تم تقديم لغة آر بي جي تو مع مجموعة سيستم ثري من أجهزة الكمبيوتر. ثم استخدمت فيما بعد مع سيستم 32 وسيستم 34 وسيستم 36، مع نسخة معدلة من اللغة. كما أنتجت آي سي إل أيضا نسخة على نظام تشغيلها VME/KK.
ظهرت آر بي جي ثري لتعمل على سيستم 38 وما تلاها AS/400. وقد تم ترحيل آر بي جي ثري من اللغة الأصلية بحيث وفرت مقومات هيكلية عصرية مثل بلوكات IF-ENDIF وحلقات دو والكمبيوتر الرشيس IBM System/370 اليذ يعمل ب OS/VS1. كما كانت متاحة أيضا من يونيسيس لنظام التشغيل VS/9 الذي يعمل على الكمبيوتر الرئيسي يونيفاك 90/60
أما لغة DE/RPG أو آر بي جي لإدخال البيانات كانت متوفرة بشكل حصري في مجموعة حواسيب آي بي إم 5280 من محطات عما إدخال البيانات في بداية الثمانينات. وقد كانت شبيهة بآر بي جي ثري ولكن ينقصها مواصفات البيانات الخارجية (DDS) لوصف (ملفات) البيانات مثلما في نظام سيستم 38 وكل ما تلاه. بدلا من ذلك، يجب إدراج جزء DDS في مصدر آر بي جي نفسها.
آر بي جي 400 كان فعليا آر بي جي ثري الذي يعمل على AS/400. وأعادت IBM تسمية مصنف آر بي جي باسم "آر بي جي 400" ولكنه كان شبيها بمصنف آر بي جي ثري حتى بدأت IBM تطوير شفرات تشغيل جديدة مثل سكان وكات وإكسليت بعد عدة سنوات من توافر AS/400. هذه التعزيزات لآر بي جي ثري لم تكن متوفرة في نسخة سيستم 38 من آر بي حي ثري.
آر بي جي فور (أو التي تعرف ب RPGLE أو RPG/ILE) صدرت عام 1994 ولم يعد الاسم بعد ذلك مجرد أحرف بادئة تمثل معنى الكلمة. قدمت آر بي جي فور مجموعة متنوعة من التعبيرات من خلال سماتها الحسابية المتوسعة فاكتور تو Factor-2، ولاحقا في الحياة، من خلال مواصفاتها الحسابية الخالية من التنسيق وتركيبات الجمل الإجرائية. وتعد آر بي جي فور النسخة الوحيدة من آر بي جي التي تدعمها آي بي إم في كل سلسلة المنتجات الواسعة التالية لنظام AS/400.
. . .
آر بي جي فور، لغة حديثة
في عام 2001، ومع إصدار OS/400 V5R1، قدمت آر بي جي فور حرية أكبر من أجل الحسابات التي تقدمها المواصفات الحسابية الموسعة فاكتور تو : مدخل مصدري ذو إمكانية للنصوص خالية من التنسيق، كبديل للنسق المصدري الأصلي المعتمد على الأعمدة. إن حساب /freeلا يتطلب وضع شفرة تشغيل في عمود معين، وشفرة التشغيل هي أمر خياري بالنسبة لعمليات تشغيل EVAL وCALLP كما يتشابه تركيب الجمل بشكل كبير مع لغات برمجة الحواسيب الرئيسية متعددة الأغراض.
واليوم تعد لغة آر بي جي فور بلا شك لغة قوية. ويمكن أن يتم التحرير أيضا عبر محرر بسيط أو يمكن التحرير عبر الكمبيوتر الشخصي باستخدام برنامج "ويب سفير ديفيلوبمنت ستوديو" التابع لIBM والذي عرف حاليا باسم RDi (راشيونال ديفيلوبمنت ستوديو لآي) وهو تطبيق مصمم خصيصا من إكليبس. وتقوم آي بي إم بشكل مستمر بالتوسع في إمكاناتها وإضافة المزيد من الوظائف المدمجة داخليا (BIFs). وهي لديها القدرة على الارتباط بعناصر الجافا،[1] وi5/OS APIs، ويمكن استخدامها لكتابة برنامج سي جي آي بمساعدة صندوق أدوات الذو إشارة Cgidev2 التابع[2] لIBM وRPGLIP (مجموعة من مئات الأعمال الروتينية المكتوبة مسبقا عبر RPG IV) وCGILIB وصندوق أدوات آر بي جي ومجموعة باقات تمكينية تجارية أخرى للمواقع الإليكترونية. حتى مع التغييرت، لا تزال تحتفظ بمجموعة من التوافق الخلفي، لذا فإن برنامج آر بي جي الذي كتب منذ 37 عاما يمكن تشغيله اليوم بالقليل من التعديلات أو بدون تعليمات على الإطلاق.
علاوة على ذلك، مع تطبيق المصنف المسبق لإس كيو إل، يمكن لمطوري آر بي جي الاستفادة من إس كيو إي المعتمدة على التكاليف والتابعة لآي بي إم (SQL Query Engine). وعلى عكس التوجه التقليدي F-Spec، حيث يستيع المطور تحديد طريق وصول محدد لمجموعة بيانات، يمكن للمطور الآن تنفيذ بيانات إس كيو إل مدمجة مباشرة في البرنامج. وعند تصنيفها، يقوم المصنف المسبق لإس كيو إل بتحويل بيانات إس كيو إل المدمجة غير الصالحة إلى بيانات ر بي جي صالحة تستدعي برنامج مدير قواعد البيانات الذي يقوم في النهاية بتنفيذ طلب التساؤل.
تمت إعادة تسمية OS/400 لاحقا i5/OS ليتماشى مع مبادرة تسمية المنتج الجديدة IBM System i5، تم إسقاط 5 من التسمية لاحقا ليصبح الاسم system I فقط وخطوط إنتاج System p. كما انتهج نظام الطاقة الجديد أيضا أعداد نسخ تسلسلية أكثر لتستبدل 6.1 بالتدوين V1R1M0 التي تبلغ من العمر 20 عاما. وتمت الإشارة لآخر الإصدارات باسم IBM i 7.1 وتدعم بالكامل لغة آر بي جي فور والعديد من اللغات الأخرى أيضا. كما يشار إلى تابع ويبسفير ديفيلوبمنت ستوديو (WDSC) باسم المطور العقلاني للآي (RDi)، والذي يتوافر منه ثلاث مستويات من المنتجات. وهي تسمى المطور العقلي للآي RDi والهيكل ذو التوجه الخدمي RDi SOA ومطور التطبيقات العقلاني RDA. ويتيح الخط الجديد كافة أدوات ودعم التطوير بباقات حبيبية أكثر قدمتها النسخة WDSC والنسخة
أنماط البيانات
تدعم لغة آر بي جي أنماط البيانات التالية.[3][4]
نمط البيانات | الاسم | الطول | الوصف |
---|---|---|---|
A
|
حرف أبجدي رقمي | 1 إلى 32,766 بايت | حرف أبجدي رقمي |
B
|
عددي ثنائي | 2 بايت (16-بت) 4 بايت (32-bit) |
عدد صحيح ثنائي ذو إشارة |
D
|
التاريخ | 10 بايت | التاريخ: العام، الشهر، اليوم |
F
|
عددي ذو نقطة عائمة | 4 بايت (32-بت) 8 بايت(64-بت) |
عدد حقيقي ذو نقطة عائمة ثنائي ذو إشارة |
G
|
حرف جرافيك | 1 to 32,766 bytes | حرف جرافيك 16 بت (DBCS أو EGCS) |
I
|
عددي صحيح | 1 بايت(8-بت) 2 بايت (16-بت) 4 بايت (32-بت) 8 بايت(64-بت) |
عدد صحيح ثنائي ذو إشارة |
U
|
عدد صحيح | 1 بايت (8-بت) 2 bytes (16-بت) 4 بايت (32-بت) 8 بايت (64-بت) |
عدد صحيح غير مميز بإشارة |
P
|
عدد عشري في مجموعة | 1 إلى 30 جزء, 2 جزء لكل بايت إشارة جمع |
رقم عشري ذو نقطة ثابتة وإشارة مع رقم صحيح وأرقام كسرية |
S
|
عدد عشري في نطاق | 1 إلى 30 جزء, 1 جزء من البايت |
رقم واحد لكل بايت رقم عشري ذو نقطة ثابتة وإشارة مع رقم صحيح وأرقام كسرية |
T
|
الوقت | 6, 12, أو 14 بايت | الوقت: الساعة، الدقيقة، الثانية، المايكروثانية |
Z
|
الطابع الزمني | 26 بايت | الوقت والتاريخ: العام، الشهر، اليوم، الساعة، الدقيقة، الثانية، المايكروثانية |
مثال للشفرة
البرنامج التالي يستقبل رقم العميل كمعيار للمدخلات ويقوم بإرجاع الاسم والعنوان كمعيار للنواتج.
* على مر التاريخ فإن آر بي جي كانت لغة عمودية بطبيعتها، برغم أنها ذات نسق وصياغات حرة * مسموح بها تحت ظروف معينة. * الغرض من تعدد الشفرة في السطور يحدده * شفرة حرفية في العمود رقم 6. * ورمز النجمة (*) في العمود السابع يشير إلى سطر تعليقي * مواصفات "F" (ملف) تحدد الملفات وأجهزة i/o الأخرى F ARMstF1 IF E K Disk Rename(ARMST:RARMST) * مواصفات "D" تستخدم في تحديد المتغيرات D pCusNo S 6p 0 D pName S 30a D pAddr1 S 30a D pAddr2 S 30a D pCity S 25a D pState S 2a D pZip S 10a * مواصفات "c" (الحساب) تستخدم للعبارات القابلة للتنفيذ * يتم تحديد المعايير باستخدام plist وparm opcodes C *entry plist C parm pCusNo C parm pName C parm pAddr1 C parm pAddr2 C parm pCity C parm pState C parm pZip * أما أمر "chain" فيستخدم من أجل الوصول العشوائي إلى ملف ذو شفرة C pCusNo chain ARMstF1 * وإذا ما استدل على وجود تدوين ما، انقل الحقول من الملف إلى معايير C if %found C eval pName = ARNm01 C eval pAddr1 = ARAd01 C eval pAddr2 = ARAd02 C eval pCity = ARCy01 C eval pState = ARSt01 C eval pZip = ARZp15 C endif * تستعين لغة آر بي جي بالتحولات "switches". تحول واحد "LR" عادة يرمز إلى "آخر تدوين last record" * LR في الواقع تحدد البرنامج ومساحة بياناته بحيث تكون قابلة للإزالة من الذاكرة. C eval *InLR = *On
يستعين نفس البرنامج بحسابات حرة:
* مواصفات "F" (الملف) تحدد الملفات وأدوات i/o الأخرى FARMstF1 IF E K Disk Rename(ARMST:RARMST) * مواصفات "D" تستخدم في تحديد المتغيرات والمعايير * "النموذج الأصلي prototype" للبرنامج موجود بملف مستقل * بحيث يسمح للبرامج الأخرى باستدعائه /copy cust_pr * يصف "السطح البيني للإجراء" معايير المُدخل D getCustInf PI D pCusNo 6p 0 const D pName 30a D pAddr1 30a D pAddr2 30a D pCity 25a D pState 2a D pZip 10a /free // أمر "chain" يستخدم من أجل الوصول العشوائي للملفات المُشفرة chain pCusNo ARMstF1; // إذا ما استدل على وجود تدوين، انقل الملفات إلى معايير if %found; pName = ARNm01; pAddr1 = ARAd01; pAddr2 = ARAd02; pCity = ARCy01; pState = ARSt01; pZip = ARZp15; endif; // تستعين لغة آر بي جي بالتحولات "switches". تحول واحد "LR" عادة يرمز إلى "آخر تدوين last record" // LR في الواقع تحدد البرنامج ومساحة بياناته بحيث تكون قابلة للإزالة من الذاكرة. *InLR = *On; /end-free
يستعين نفس البرنامج بحسابات حرة: وSQL مدرج
* لا تحتاج لغة آر بي جي فور مرة أخرى الاستعانة بمؤشر *INLR لإنهاء البرنامج. *باستخدام الكلمة الرئيسية الأساسية في العنوان "H"، وتحديد "main" * أو اسم إجراء المُدخل، سيبدأ البرنامج وينتهي بشكل معتاد باستخدام * دورة آر بي جي القديمة منذ عقود وبالتالي سيبدأ البرنامج بشكل أشبه كثيرا بالسي وينتهي منطقيا. H MAIN('GETCUSTINF') * مواصفات "D" تستخدم في تحديد المتغيرات والمعايير * "النموذج الأصلي prototype" للبرنامج موجود بملف مستقل * بحيث يسمح للبرامج الأخرى باستدعائه /copy cust_pr * يصف "السطح البيني للإجراء" معايير المُدخل D getCustInf PI D pCusNo 6p 0 const D pName 30a D pAddr1 30a D pAddr2 30a D pCity 25a D pState 2a D pZip 10a /free exec sql select ARNm01, ARAd01, ARAd02, ARCy01, ARSt01, ARZp15 into :pName, :pAddr1, :pAddr2, :pCity, :pState, :pZip from ARMstF1 where ARNo01 = :pCusNo for fetch only fetch first 1 row only optimize for 1 row with CS; /end-free
- يصف "السطح البيني للإجراء" معايير المُدخل *
D getCustInf PI
D pCusNo 6p 0 const
D pName 30a
D pAddr1 30a
D pAddr2 30a
D pCity 25a
D pState 2a
D pZip 10a
/free
exec sql select ARNm01, ARAd01, ARAd02, ARCy01, ARSt01, ARZp15
into :pName, :pAddr1, :pAddr2, :pCity, :pState, :pZip
from ARMstF1
where ARNo01 = :pCusNo
for fetch only
fetch first 1 row only
optimize for 1 row
with CS;
/end-free
لنفترض أن نموذج الجدول ARMSTF1 صنع باستخدام عبارة SQL التالية:
create table armstf1 (arcnum decimal(7,0), arname char(30), aradd1 char(30), aradd2 char(30), arcity char(25), arstte char(2), arzip char(10))
وبالنسبة لنظام تشغيل V7R1، فإن البرنامج السابق يمكن كتابته (بشكل صحيح وكامل) كالآتي:
H main(GetCustInf) D ARMSTF1 E DS P GetCustInf B D GetCustInf PI extpgm('CUS001') D inCusNo like(arCNum) const D outName like(arName) D outAddr1 like(arAdd1) D outAddr2 like(arAdd2) D outCity like(arCity) D outState like(arStte) D outZip like(arZip) /free exec sql select arName, arAdd1, arAdd2, arCity, arStte, arZip into :outName, :outAddr1, :outAddr2, :outCity, :outState, :outZip from ARMSTF1 where arCNum = :inCusNo fetch first 1 row only with CS use currently committed; /end-free P GetCustInf E
المنصات
كما ذكرنا مسبقا، فقد تم التعريف بلغة البرمجة آر بي جي في البداية عبر IBM لملكيتهم لكل من 1401, /360, /3, /32, /34, /36, /38 AS/400 ونظام آي سيستم I system. كما كان هناك أيضا عدد من التطبيقات للديجيتال في إيه إكس Digital VAX وسبيري يوينفاك Sperry Univac BC/7 ويونيفاك سيستم 80 UNIVAC Sytem 80 وسيمنز بي إس 2000 Siemens BS2000 وبور بي 700 Borroughs B700 وبي 1700 B1700، وهيوليت باكارد إتش بي 3000 Hewlett Packard HP3000، وآي سي إل 2900 ICL 2900، هوني ويل 6220 و2020 Honeywell 6220، 2020، فور فيز فور/70 Four-phase IV/70 وIV/90 وWANG VS ومجموعة كبيرة ومتنوعة من المصنفات وبيئات التشغيل الزمني للأجهزة المعتمدة على يونيكس (INFINITE 36 (سابقا UNIBOL36)) والحواسيب الشخصية (Baby/400, Lattice-RPG).
آخر المنصات التي استقبلت منصة آر بي جي هي وينوز دوت نت عبر منصف وين آر بي جي. تحتوي هذه النسخة امتدادات لآر بي جي فور بعيدة عن مصنف IBM الرئيسي. هذه الامتدادات توفر خطافات ويندوز ودوت نت.
ولا تزال تطبيقات آر بي جي تو مدعومة بنظم تشغيل IBM z/VSE and z/OS ونظام تشغيل HP MPE على HP3000 ونظام التشغيل OpenVMS على كل من VAX, Alpha ويونيسيس إم سي بي.
لمزيد من القراءة
- McGee, W.C. (1981). "Data Base Technology" ( كتاب إلكتروني PDF ). IBM Journal of Research and Development. IBM. 25 (5, 25th Anniversary Issue): 514. مؤرشف من الأصل ( كتاب إلكتروني PDF ) في 04 أبريل 2020.
...original report program generator was the IBM Report Program Generator introduced in the early 1960s for the IBM 1401 computer. It was patterned after the SHARE 9PAC system...
- "9PAC, Report Generator". History of Programming Languages (HOPL), Murdoch University, AU. 2006. مؤرشف من الأصل في 24 ديسمبر 2010.
- "RPG, Report Program Generator". History of Programming Languages (HOPL), Murdoch University, AU. 2006. مؤرشف من الأصل في 15 أبريل 2011.
- DuCharme, Bob (2006-02-26). "Pulling data out of computers in the mid-twentieth and early twenty-first centuries". مؤرشف من الأصل في 14 مايو 2008.
- Cozzi, Robert (1996). "The Modern RPG IV Language". مؤرشف من الأصل في 03 نوفمبر 2012.
- Shelly, Gary B. (1977). Introduction to Computer Programming RPG. Fullerton, California: Anaheim Publishing Company. .
المراجع
- IBM Knowledge Center
- CGIDEV2 home - تصفح: نسخة محفوظة 08 يوليو 2017 على موقع واي باك مشين.
- "RPG/400 Reference" ( كتاب إلكتروني PDF ). IBM. يونيو 1994. مؤرشف من الأصل ( كتاب إلكتروني PDF ) في 27 أبريل 2006.
- "RPG/400 User's Guide" ( كتاب إلكتروني PDF ). IBM. يونيو 1994. مؤرشف من الأصل ( كتاب إلكتروني PDF ) في 24 يناير 2020.
وصلات خارجية
- RPG IV for beginners - A basic tutorial for beginners is available here.
- RPG (IV) World - An RPG discussion forum and a huge amount of code examples.
- RPG OPEN - A free open source service program with add-on subprocedures written in RPG IV for RPG IV.
- IBM (1964). IBM 1401 RPG manual ( كتاب إلكتروني PDF ). C24-3261-1. مؤرشف من الأصل ( كتاب إلكتروني PDF ) في 29 أغسطس 2012.
- IBM (2008). ILE RPG Programmer's Guide ( كتاب إلكتروني PDF ). SC09-2507-07. مؤرشف من الأصل ( كتاب إلكتروني PDF ) في 24 يناير 2020.
- RPG for COBOL programmers - Article
- RPG II for MVS, OS/390 and z/OS - Status of the IBM RPG II product in z/OS