|
Booth,
One man's RPG is not the same as another's. Take this for example:
FTRACEL1 UP E K DISK
ITOLLTAPE
I TOLLTAPE TAPE L1
C NL1 DELETTOLLTAPE
This is a complete, useful program but there are more than a few people who
would not "get" this at a glance.
How about having to look at code like this all day:
C****************************************************************
C* -AGAIN - READ THE PREVIOUS OR NEXT MASTER RECORD *
C****************************************************************
CSR AGAIN BEGSR
C 08N61 16 READ ACIHST 61
C 09N61 16 READPACIHST 61
C 08N61 17 READ ACIHST08 61
C 09N61 17 READPACIHST08 61
C 08N61 18 READ ACIHST11 61
C 09N61 18 READPACIHST11 61
C 08N61 19 READ ACIHST10 61
C 09N61 18 READPACIHST10 61
C 61 SETOF 60
C N60 EXSR CLEAR
Or this beauty:
C CLRYY IFEQ REPYY
C CLRMM COMP REPMM 11
C 11 CLRMM COMP FROMM 12
C 11 12 CLRDD SUB REPDD HOLD
C 11 12 HOLD COMP 3 1313
C 11 12 13 ADD 1 LTFIVE
C END
The "c-like" example is pretty cryptic too, but don't blame RPG IV - the
above examples of RPG III fit into that category as well. Consider how it
would look with a few comments and "wrapping" the nasty code in a procedure.
Notice that the mainline code here is exactly one line long. In a "normal"
RPG IV program, I'd hide all these D specs in a /COPY member; they're
included here so you can see a compilable code snippet.
* dftactgrp(*no) actgrp(qile) dbgview(*source) bnddir(qc2le)
D OpenFile pr
D FilePath 255 const
D Error like(ErrorCode)
* File open
Dopen pr 10i 0 extproc('open')
D * value
D 10i 0 value
D 10u 0 value options(*nopass)
D 10u 0 value options(*nopass)
* Report errors
* #include <errno.h>
*
* int * __errno(void);
*
*
D errnoF PR * Extproc('__errno')
******************************************************************
D ErrorCode S 10I 0 inz
C Callp OpenFile('/QOpenSys/x.txt':ErrorCode)
C Seton LR
******************************************************************
P OpenFile B
D OpenFile pi
D FilePath 255 const
D Error like(ErrorCode)
D FileHandle s 10i 0
D oflag s 10u 0 inz(0)
D o_rdonly s 10i 0 inz(1)
D o_textdata s 10i 0 inz(16777216)
D FileWork s like(FilePath)
D errnoP S *
D errno S BASED(errnoP) like(ErrorCode)
* Because you can't set %addr against a CONST field,
* make a copy of the CONST field and use THAT address...
C eval FileWork=FilePath
* Open file in text mode, read only
C eval oflag=o_rdonly + o_textdata
C Eval FileHandle=open(%addr(FileWork):oflag)
* Call the "what error occurred" function
C EVAL errnoP = errnoF
* Tell the calling function what error (if any) occurred
C Eval Error=errno
P OpenFile E
Here, all the "grunt work" is done inside the OpenFile procedure. The
mainline code has no idea whether you are opening a standard DB2 external
file, an IFS file or a socket. Rather than coding the procedure as a
"function" (which returns a value like "open" does), I wrote OpenFile to
return it's error code as a parameter - just like old-style RPG. It's
really a matter of preference more than anything else.
By the way, you can't call these "c" functions from RPG III as far as I
know. You can only do this in an ILE language.
Buck Calabro
Aptis; Albany, NY
> -----Original Message-----
> From: boothm@earth.goddard.edu
> Sent: Thursday, January 13, 2000 12:39 PM
> To: RPG400-L@midrange.com
> Subject: Re: Having problems accessing IFS from RPGIV
>
> I know, I know, we gotta keep up, we can't be old-fashioned, we gotta get
> with the program... but gee whizzzzz...
>
> where's there any RPG at all in this mystifying piece of RPGized-C++ code?
>
> I'd bet that there are not 5 out of 100 qualified RPG programmers that
> can even begin to understand what is happening here.
>
> If someone asked me to do the same function in real RPG code I would be
> absolutely stuck.
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.