IBM i v7.3 is here and its pretty cool

  • Posted on: 21 April 2016
  • By: NickLitten
ibm as400 is my grandfather

You think you know IBM i? You havent met 7.3

IBM i 7.3 Announcement & Material

  • IBM(r) DB2(tm) for i Temporal Support, enabling clients to conduct accurate analysis of data within a specific historical time period
  • More advanced analytics capability driven by enhanced OLAP functionality, allowing clients to better forecast, define gaps and build new strategies for business
  • Security authority collection, a new addition that better secures critical business data
  • Plus, many more enhancements that increase efficiency and functionality

IBM i 7.3

Here are some links which might be helpful as you start to learn more about IBM i 7.3 and the promotional material surrounding it:

Set off all indicators in RPG program

  • Posted on: 30 March 2016
  • By: NickLitten
not this type of indicator you donut!

RPG INDICATORS are switches

Just like car indicators (or 'blinkers' as my American cousins call them) they can be switched *ON or *OFF in a program to indicate the state of a certain piece of logic. Using numeric indicators has been frowned upon for years, since the introduction of alphanumeric 'indicators' in programming code. After all, what makes more sense checking a value of *IN66 or checking a value of a field called ItemCodeValid?

Now saying that, older programs some times use numeric indicators extensively and this is just a neat way of turning off blocks of indicators:

// *IN is a standard RPGLE array for *IN(01) thru *in(99) - and it says turn off all from 01 to 99
%SubArr(*IN : 01 : 99) = *Off;

In older column based RPG (or RPG400) you could use the MOVEA (move array command) turn them all off

C     MOVEA *ALL:'0' *in01

Or specify a smaller block of indicators:

C     MOVEA '0000' *in80

would move *zeros to *in80, *in81, *in82, *in83


Lots of other techniques but I like the %subarr solution.


Using special characters is naughty - Java and IBMi might get upset!

  • Posted on: 28 March 2016
  • By: NickLitten
special characters nuff said
This morning I was tryuing to figure out why I was having code page problems with a file that had been emailed to me from a British IBM i Server. 

Im try to run (from a CLLE) this command


but i receive this error :

Premere INVIO per chiudere la sessione del terminale.
/QSYS.LIB/NAS_TMP.LIB/675SAVE.FILE : impossible to find file or directory

My JOB CCSID is 280 , i have also tried to change to 37 but i receive always error .. can some one help me to solve this problem

I hate code pages.

I mean I dont hate them, they are good and useful but damn they annoy me when I get them wrong  ;)

In this case the solution was straight forward. I copied this asnswer from another forum and then promptly closed the tab so cant post a credit link  #oops

The $$ in Qshell means "insert current process id here". That's why when you specified /QSYS.LIB/NAS_TMP.LIB/$$SAVE.FILE', it gave an error message referring to /QSYS.LIB/NAS_TMP.LIB/675SAVE.FILE, because 675 must've been your process id (pid) at the time you ran this, so it replaced $$ with 675. To avoid this, you must escape the $$ so that it does not have a special meaning. An easy way to do that is to put the path names in single quotes, for example:

I am sick of Islamic Terrorists

  • Posted on: 22 March 2016
  • By: NickLitten
look its a medieval bloke with a beard

I'm fuming at the ridiculous mixture of extremism and political correctness that is swamping social media regarding todays incredibly evil killings in Belgium. Killings perpetrated in the name of Islam.

je suis bruxellesThe facts

  • Innocent people have been murdered by this act of planned EVIL.
  • Regular people both secular and religious alike were killed.
  • Religion (ISIS the Islamic State of Iraq and Syria) has claimed responsibility and is gloating about the death and destruction they have caused

How are ISIS Terrorists getting around?

This is a period of unprecedented un-regulated migration of tens of thousands of people from Iran and Syria into Europe. Migrants from the home counries of ISIS are able to move into the heart of Europe without any kind of security inspection.

Do we really believe that there are no islamic terrorists among the throngs of illegal immigrants flooding past European border controls? Come on now!

CPF327E Unable to move file into a new library

  • Posted on: 17 March 2016
  • By: NickLitten

That was a weird error!

I created a work file in my library, by copying an existing file from another library. I tinkered with it, loaded it with data and then wanted to rename it and store it alongside the original file in the original library. Simple enough one would think?

I renamed it in my library (simply by adding a suffix) and then tried to move it back into the original library but  *boom* IBM i gets very upset and will not let me move it reporting an error message: CPF327E Alternative name for file FILENAME not allowed.

What prevents a file moving to another library when it's got a unique name?

The problem here is - it actually hasn't got a unique name. I just thought it had. But it's got a sneaky SQL long name which already exists in the original library (schema).

Disable RPGLE 'live parsing' using Rational Developer (RDi)

  • Posted on: 29 February 2016
  • By: NickLitten

"IBM Rdi" is arguably the best code editor for coding on IBM i. That's pretty much a given. But, it's still filled with little annoyances and things that make me groan. one in particular is the lagginess and freeziing that comes when trying to edit very large programs using less that top-notch computer hardware. I present for the Jury - working at a customer site today tryingto edit a behomoth of a 65k+ line program (way to large for SEU) and RDi on the an HP desktop with 2GB memory. Open RDi... wait... wait... open source member... wait some more.... get into code changes and then it all locks up for 30 seconds while the LIVE PARSING procedures tries to figure out all the variables.

Luckliy we can turn it off!!

Window > Preferences > Remote Systems > Remote Systems LPEX Editor > ILE RPG (or type ILE RPG into the shortcut in the preferences window)

Look near the bottom and you will see 'Update the Outline View when text is changed in the editor'.

Turn it off and RDi way faster and smoother.

sqlrpgle select into extname using freeform

  • Posted on: 17 February 2016
  • By: NickLitten
bloody programers aaargh

Sometimes I find a problem and scratch my head and just cannot figure it out. i swear a lot. Then I discover the solution by climbing out of my little box, turning my head at a funny angle, squinting and thinking a bit differently. Then I swear even more. 



I converted a column based piece of SQLRPGLE from this:

d S21uservalues...                                                     
d               e ds                  qualified                    
d                                     extname('APG05PHY')  

to this:

dcl-ds S21uservalues qualified extname('APG05PHY') end-ds;   

The SQL to read this looks like this:

exec SQL fetch next from cursorAPG05 into :S21uservalues;

and then it just will not compile!

Compile error is: SQL0312  30     798  Position 52 Variable S21STOCKROOMNAME not defined or not usable.                                                   

"But that is completely valid new free format RPG syntax" I scream at the compiler. /me then goes on to waste more time than I am prepared to admit trying every combination of code to figure out whats going on


DSPF function keys in fully free RPGLE

  • Posted on: 1 February 2016
  • By: NickLitten
nothing to do with BOOKS what so ever... but it made me chuckle

Picking up user keyboard interactions in RPG is easy

But as usual there are many ways of doing it. Three main techniques are

(1) Assign a numeric value to the function keys

Probably the most common is to assign an indicator value to a function so that CMD01 sets on *IN01, CMD02 sets on *IN02 and so on.

(2) Leave the internal indicators for function keys

I see this a lot and I still sometimes use it if my program has simple function key handling. Basically, if you do not assign a numeric indicator to the function key, good ole' IBM i will assign a free one for us. Namely CMD01 sets on *INKA, CMD02 sets on *INKB, CMD03 sets on *INKC and so on. But... but... beware of the missing alphabet letters ;)

(3) Indicators smell. Dont use them

Define an information data structre in a /copybook and then you can reuse this simple technique where you like. This is my preferred technique.

Free IBM i system for Developers?

  • Posted on: 29 January 2016
  • By: NickLitten
old as400 and iseries computers are free and very very sexy

Try the machine that replaced the AS400 and iSeries for free!

  • Do you want to try the latest IBM i operating system version for free?
  • Do you want to try out the latest IBM i V7.2 programming styles?
  • Do you want to test an old program to see if it runs on IBM i 7.2 before upgrading?
  • Do you want to upgrade old AS400 RPG programs to IBM i RPGLE?
  • Do you fancy just being a nerd and poking around in the latest IBM i release?

If the answer to any of these questions is "Yes" then check out IBM's Virtual Owner program called IBM POWER DEVELOPMENT CLOUD. You simply signup for the program and get immediate no-charge remote access to IBM Power Systems for Development, Porting and Functional testing.