Logo

dev-resources.site

for different kinds of informations.

RPG and IBM i

Published at
8/2/2019
Categories
ibmi
rpgle
as400
rpg
Author
barrettotte
Categories
4 categories in total
ibmi
open
rpgle
open
as400
open
rpg
open
Author
11 person written this
barrettotte
open
RPG and IBM i

This is my first post to DEV to see if there are any developers on here who have messed around with IBM i before or are interested in learning what it is. Primarily, I will be focusing on the history of IBM i and the RPG programming language that has evolved with it.

At my current workplace, I noticed this ominous green and black screen on numerous older developers' monitors. Shortly after, I found out that my company develops and maintains an IBM i system with an RPG(LE) codebase. I was immediately intrigued and set out to learn what was happening. The problem is that learning a new paradigm of thinking is difficult.

Since I was a web developer and expressed a bit of interest in learning IBM i, I was given a user account and library that I could mess around with. I searched around various sites and some IBM documentation for a "tutorial". But, I quickly learned that there really isn't too great of a starting point compared to learning every other programming language and/or OS.

An Important Lesson

If you ever find yourself wanting to learn RPG by purchasing a used AS/400 on eBay, don't do it (unless you have an additional $20K). IBM is cool, but their software is expensive and closed source. So, I have a pretty sweet 500lb bar table in my basement now.

Brief Introduction

IBM i is an OS that works very well with business applications, reporting, data warehousing, and more. It also comes with a built in database called DB2 which uses its own little flavor of SQL.

IBM i also has the ability to use many languages such as RPG, CL, DDS, COBOL, BASIC, C/C++, Java, Python, DB2 SQL, and REXX. There is a lot to this machine, but at a high level this amount of information should be sufficient.

A big selling point of IBM i is its stability. According to developers at my workplace, our IBM i system has only needed to be rebooted once in its 30+ years of operation.

Brief History

IBM i evolved a lot over time and often gets confusing trying to google things. The easiest way to trace its evolution is to follow the RPG programming language.

  • 1959ish IBM 1400 series - RPG I
    • Punch cards and magnetic tape
    • Also supported COBOL, FORTRAN, and some ancient ASM languages.
  • 1969-1977 IBM System/3 - RPG II
    • Also supported COBOL, FORTRAN, BASIC
  • 1978 IBM System/38 - RPG III
    • Disk storage, diskette drive, etc.
    • Also supported COBOL, BASIC, PL/I
  • 1988 Application System/400 - AS/400 - RPG 400/IV
    • Also supported ASM, C/C++, COBOL, Python, REXX, and more.
  • 2000 - renamed to iSeries
  • 2006 - renamed to System i

I glossed over a lot of information, but feel free to read more.

RPG

So, wait...RPG has been around since around 1960?

Yeah.

RPG (Report Program Generator) started out on punch cards as a programming language that was used for generating reports. Over its life span, RPG received new features/changes and can currently be used like a general purpose programming language.

RPG fixed-format looks so ugly because of its origin. Therefore, RPG's grammar is dependent on certain columns needing specific data.

Gradually, RPG evolved out of its fixed-format ancestry and took a free-format appearance. IBM made sure that there was a decent amount of backwards compatibility between version of RPG. For example, on the AS/400 you could have a mix of RPG III and RPG IV programs. With RPG's evolution into free-format

RPG is sometimes referred to as RPGLE. Without getting into too much detail: On IBM i, there is the concept of Integrated Language Environment (ILE) languages. ILE languages can talk to other ILE languages. This includes CL, COBOL, C/C++, RPG, and more. Modern RPG development is typically using RPGLE.

Hello World in fixed-format RPG (RPG III)



      C                     MOVEL'HELLO'   HELLO  11
      C                     MOVE 'WORLD'   HELLO
      C           HELLO     DSPLY          WAIT    1
      C                     SETON                     LR


Enter fullscreen mode Exit fullscreen mode

Hello World in fixed-format RPGLE (RPG IV)



      C     'Hello World' DSPLY
      C                   SETON                                        LR


Enter fullscreen mode Exit fullscreen mode

Hello World in free-format RPGLE (RPG IV)



       /free
       dsply ('Hello World');
       *inlr = *on


Enter fullscreen mode Exit fullscreen mode

With the use of the /free and /end-free you can mix and match fixed and free RPGLE.

Conclusion

This is just a small glimpse at IBM i. There is a mountain of information to learn about the machine, most of which I haven't learned yet. I know this was probably confusing, but I hope my writing was coherent enough to enjoy reading. If anyone would like to read and learn more about IBM i let me know in the comments. I'd love to keep making posts like this.

Possible future posts:

  • What is Control Language (CL) ?
  • What is Data Description Specification (DDS) ?
  • IBM i file structure, Physical Files, and Logical Files
  • Calling IBM i from Java, Python, and more
  • Writing a basic RPGLE program

My IBM i "Projects"

To start learning I made a small repository to dump random files and notes into; Located at https://github.com/barrettotte/IBM-RPG

I am writing a small "book" called "Learning IBM i as a Lowly Web Developer" (obviously the title is poking fun). This book will be a casual guide to IBM i , introductions to various obscure languages (RPGLE, CL, DDS, REXX, COBOL, etc), and a short course to wrap-up concepts.

To go along with my book, I am casually developing an IBM i VS Code extension and editor API to enable viewing, editing, and compiling IBM i code from the comfort of VS Code.

Thank you for reading.

Featured ones: