04
Mon, Nov
6 New Articles

Programming for the Lowest Common Denominator

General
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Back in the Dark Ages, when I was a kid, all cash registers had numbers on them and no brains inside them. People had to know how to count money and make change. Nowadays, most cash registers have a sheet of plastic with words like hamburger and fries printed on it. As long as the cashier punches the right spots on the membrane, everything is copacetic.

A local businessman explained the reasons for this change in the cash register user interface. First, cashiers don’t have to remember prices. Second, job applicants can’t do math. The cash register manufacturers have had to develop what I call a “lowest common denominator” user interface: one that just about anybody should be able to use.

The Web browser is a sort of “lowest common denominator” user interface. I don’t mean that Web browsers are designed with morons in mind. I mean that almost anybody can learn to point and click. That’s not a bad thing. If your applications use a Web browser, new employees are productive sooner and existing employees don’t require as much training when you roll out a new program.

Making a server communicate with a Web browser is known as Common Gateway Interface (CGI) programming. CGI is not the ideal way for everybody to communicate with a computer. It’s rotten for heads-down data entry, for example. But if you’re looking for a strategy to modernize applications, you should consider CGI. It works well for inquiry, simple data entry, and light maintenance applications. If you’re a programmer, you should learn how CGI works and how to write CGI applications.

UNIX Fundamentals

To understand certain Internet concepts requires that you learn something about UNIX. CGI is one of those concepts.

First, the UNIX file system, like the PC filing system, is organized into directories. Directories can contain other directories and files. A file can contain anything—data, source code, object code, graphics, text, you name it. Second, UNIX predefines a group of files called standard input (stdin), standard output (stdout), and standard error (stderr). By default, stdin is the keyboard of an interactive session; stdout and stderr are assigned to the CRT. Programs can use these files without having to declare them. Third, UNIX was designed on ASCII machines, so ASCII is a presupposition of UNIX applications.


Do you see a problem? Instead of storing a directory structure of untyped files, the AS/400 stores strongly typed objects in libraries. RPG and COBOL, the most commonly used AS/400 application development languages, know nothing of stdin, stdout and stderr. The AS/400 runs on EBCDIC, not ASCII.

Nevertheless, the AS/400 can do CGI, provided the programmer is aware of such differences and accounts for them.

It Begins with a Request

The typical way to make an AS/400 program begin to run is by typing a number or command name on the command line of a green-screen menu and pressing the Enter key.

Under CGI, the user sends a URL to the server. The user can type the URL into the Location box of the Web browser or click on a link for an anchor tag (). The URL consists of three parts: protocol, subprotocol, and data source. In the case of CGI, the protocol is HTTP, and there is no subprotocol. The data source consists of an IP address or domain name followed by a file name and, optionally, any parameters to be passed to that file. The file name may be a simple text file containing HTML source code or an executable script or program, and it may include the names of directories that indicate the location of that file on the server. The following URL shows how CGI applications are typically executed:

http://www.phoaks.com/cgi-bin/get_page?QUERY_TYPE=poster;

The domain name of the URL is www.phoaks.com. The file to be executed is get_page, which is located in the cgi-bin directory. One parameter, QUERY_TYPE, with a value of poster, is passed to the executable file.

If you’ve done any Web surfing at all, you’ve probably seen the cgi-bin directory name many times. Web developers have adopted this as an unofficial standard directory in which to store CGI Web applications. Since the AS/400 is not a directory-based machine, you have to tell it to route requests for the cgi-bin directory to a library of your choosing. You do this with an Exec directive in the HTTP configuration file as follows:

Exec /cgi-bin/* /QSYS.LIB/MYCGI.LIB/*

The Exec directive says that requests to the cgi-bin directory are to be processed from the library called MYCGILIB. This is similar in principle to a file override that tells the system to use one file instead of another.

So much for the first problem. Now to get around the other ones. CGI programs read the predefined file stdin and write to the predefined file stdout. The languages commonly used on UNIX systems, such as C and Perl, already understand these files. For example, C’s printf and fwrite functions automatically send output to stdout.

It would be nice if you could code stdin and stdout as device names in an RPG program or if you could code an F spec for a combined file called stdio or something of the sort. Then you’d be able to use op codes like READ and WRITE. Hey, you’d even be able to use the RPG cycle! Unfortunately, IBM didn’t choose to add such features to the RPG compiler. Instead, they gave us the APIs shown in Figure 1.

These APIs are not difficult to use, but they do cause the programmer to generate some messy code. If you’re interested in learning how to use these APIs, see “Writing Your First RPG CGI Data Entry Program,” MC, January 1998.

The Easy Way

IBM has developed a library called CGIDEV for RPG and REXX programmers. CGIDEV contains template RPG and REXX source code from which you can develop CGI


programs. It also contains source code for commands, modules, service programs, and programs for developing CGI programs. You must be at V3R2 or above to use this library.

CGIDEV is well-designed. Here are some of its best features:

• CGIDEV lets you store HTML in a source member. This means you can use SEU to make changes to HTML source without having to recompile your CGI program. You can divide an HTML source member into named sections so that you can send portions of the member to the browser as needed. You can embed substitution variables in the source code. These are strings that are preceded and followed by percent symbols. At runtime, your programs can replace these variables with data values before sending the HTML to the browser.

• CGIDEV makes easy work of processing the data that comes back from the browser. CGIDEV can extract all input values regardless of which method—GET or POST—was used to format the data.

• CGIDEV includes debugging aids. CGI programs are harder to debug because they run under the HTTP server, not from a dumb terminal through an interactive subsystem. The template program includes logic to send an error message to the browser when something goes wrong and logs information about errors into a physical file.

To get the CGIDEV library, point your Web browser to the IBM code snippets Web site at www.as400.ibm.com/snippets and download the save file of the CGIDEVD library with a binary download. Create a save file called CGIDEVD on the AS/400 and FTP the downloaded file, in binary mode, to this save file. Then use the Restore Library (RSTLIB) command to restore this save file to library CGIDEV. At that point, read the instructions in source physical file README.

HTML on the Fly

Storing HTML in a source member is one way to go with CGI. The other way is to make a program generate HTML dynamically. I consider this to be the inferior method, but a lot of CGI programming on the Web is done dynamically.

For more about this method, see Bradley V. Stone’s excellent articles “RPG and CGI: Code Word—Dynamic!” and “RPG and HTML: Another Winning Team” in the April and May 1999 issues of MC respectively. Brad has developed subprocedures that take much of the grunt work out of RPG CGI programming. (Look for his upcoming book e- RPG: Building Web Applications with RPG, which is due out in the middle of February.)

Widespread and Ordinary

The word common has several meanings. It can mean “plain and ordinary” or even “course and unrefined.” CGI fits these definitions. There’s nothing elegant or excellent about the lowest common denominator. But the other definitions—“prevalent,” “widespread,” and even “universal”—are what CGI is all about. Learn to develop “lowest common denominator” programs and take them to the Web.

REFERENCES AND RELATED MATERIALS

• Cool Title About the AS/400 and Internet, Redbook (SG24-4815-01)
• e-RPG: Building Web Applications with RPG. Bradley V. Stone. Carlsbad, California: MC Publishing Co., 2000
• IBM code snippets Web site: www.as400.ibm.com/snippets
• “RPG and CGI: Code Word—Dynamic!” Bradley V. Stone, MC, April 1999
• “RPG and HTML: Another Winning Team,” Bradley V. Stone, MC, May 1999
• “Writing Your First RPG CGI Data Entry Program,” Richard Shaler, MC, January 1998


API Name Function

QtmhGetEnv Get environment variable QtmhRdStin Read stdin QtmhWrStout Write to stdout QtmhCvtDb Convert CGI input based on a database file format

Figure 1: RPG programmers must use APIs to get functions built into UNIX languages.


TED HOLT

Ted Holt is IT manager of Manufacturing Systems Development for Day-Brite Capri Omega, a manufacturer of lighting fixtures in Tupelo, Mississippi. He has worked in the information processing industry since 1981 and is the author or co-author of seven books. 


MC Press books written by Ted Holt available now on the MC Press Bookstore.

Complete CL: Fifth Edition Complete CL: Fifth Edition
Become a CL guru and fully leverage the abilities of your system.
List Price $79.95

Now On Sale

Complete CL: Sixth Edition Complete CL: Sixth Edition
Now fully updated! Get the master guide to Control Language programming.
List Price $79.95

Now On Sale

IBM i5/iSeries Primer IBM i5/iSeries Primer
Check out the ultimate resource and “must-have” guide for every professional working with the i5/iSeries.
List Price $99.95

Now On Sale

Qshell for iSeries Qshell for iSeries
Check out this Unix-style shell and utilities command interface for OS/400.
List Price $79.95

Now On Sale

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: