PowerOn was created by San Diego company Symitar for use in their credit union-centric banking platform and database "Episys". Originally titled "Report Generator", PowerOn was designed to allow credit unions custom reporting functionality. These custom reports were (and still are) referred to as "RepGens" which refers to PowerOn's predecessor Report Generator.
PowerOn's background as both a report generation language and custom banking solution are the basis for the best and worst features of the language.
With report generation in mind let's look back at our "Hello World" example:
TARGET = ACCOUNT PRINT TITLE = "HELLO.WORLD" PRINT "Hello, world!" NEWLINE END
The first line tells Episys that our report will be run on the ACCOUNT level. We'll get into more details about TARGET later on in the series, but for this example it isn't significant beyond the fact that a TARGET is required for the program to run. The second line,
PRINT TITLE = "HELLO.WORLD" starts the
NEWLINE is just syntax sugar for
PRINT CTRLCHR(10).The PRINT command ignores escape characters so we use the built-in function CTRLCHR(10) which returns the ASCII character 0x0A: '\n'.
Symitar was acquired by Jack Henry & Associates in 2000 for $44 million dollars.Jack Henry & Associates to Acquire Symitar Systems
The purpose of this blog series is two-fold.
- To inform the reader about a proprietry programming language they may not have ever heard of before.
- To try to articulate why I love PowerOn, why I hate it, and what I think we could learn from this bizarre little language.
Before we go any further let's go ahead with introductions. Here is the required "Hello World" program in PowerOn.This also represents the smallest possible PowerOn program in terms of divisions.
TARGET = ACCOUNT PRINT TITLE = "HELLO.WORLD" HEADER = "" PRINT "Hello, world!" NEWLINE END
I'm going to try and keep these short so now that we got that out of the way join me in Part 2 for some history on PowerOn, a programming language.This should have included a link to Part 2 but I haven't figured out a good way to do that with bashblog yet.